2010-11-17 19 views
1

J'ai un ensemble de trois (ou plus) variables connues qui sont liées à l'entrée d'un processus. J'ai aussi les résultats (mesurés) du processus, dans ce cas le temps qu'il a fallu pour que le processus se termine.Comment trouver la relation entre un certain nombre de variables d'entrée et une sortie résultante

Afin d'être en mesure de donner une durée estimée et créer un indicateur de progression en fonction de l'entrée, je besoin de trouver la relation (le cas échéant) entre les variables et les résultats.

Quelle est la meilleure façon de déterminer s'il y a une relation, et si une relation existe pour créer une formule.

I ont un certain nombre d'ensembles de données pour travailler avec (valeurs variables d'entrée et de temps qui en résulte).

Des suggestions ou des liens liés à cela? Un indice sur la façon de résoudre cela en utilisant le code ou un pointeur vers une théorie serait utile.

Certains fond ajouté:

Le processus se compose d'un certain nombre de fichiers à traiter (l'entrée principale) avec une entrée secondaire supplémentaire consistant en une autre série de (référence) des fichiers directement lié au contenu de l'entrée principale. Actuellement, la progression est indiquée en montrant la progression globale du fichier (liée au nombre total d'entrées principales) combinée avec la progression dans le fichier sur la base de la position dans le contenu du fichier d'entrée courant. Comme le temps global requis par fichier (ensemble) peut être assez long (selon le contenu), je voudrais ajouter une sorte de "temps restant" ou "temps de fin prévu".

Le code actuel consiste en une fusion d'un sous-ensemble de données à partir d'une liste (format Excel) avec des fichiers XML dans un fichier de format hérité. La partie "qui prend du temps" est l'analyse des fichiers Excel, mais elle est grandement affectée par la taille réelle du fichier, le nombre d'éléments à traiter et le nombre de fichiers à créer en sortie. Dans certains cas, un fichier volumineux génère une sortie alors que dans d'autres, un petit fichier peut générer un grand nombre de sorties. Comme beaucoup d'accès aux fichiers est effectué, un facteur secondaire (difficile à mettre en chiffres) est le nombre de processus identiques qui s'exécutent en même temps.

L'idée est de pouvoir donner un débit estimé en fonction de l'entrée.

+0

Merci à tous! Basé sur les réponses je mettrai à jour le code pour créer automatiquement un journal contenant toutes les variables et les débits connus par sous-tâche. Cela devrait faciliter l'identification de la contribution de chaque tâche (et, espérons-le, simplifier la relation entre l'entrée et la sortie de la sous-tâche). Cela devrait également faciliter l'obtention plus rapide d'un plus grand nombre de données d'échantillon pour l'analyse. Notez que puisqu'il s'agit d'une fonctionnalité de priorité inférieure, cela peut prendre un certain temps;) Je rapporterai ici avec les résultats. – barry

Répondre

2

La première étape consiste à restreindre la relation que vous recherchez à une famille de fonctions. Pour ce faire, vous devez trouver un modèle de la façon dont les intrants affectent les résultats mesurés. Une fois que vous avez choisi la famille de fonctions, l'étape suivante consiste à déterminer quel membre de la famille représente le mieux vos données.

Par exemple, vous pouvez décider du système de mesure de vous peut être modélisé avec une relation linéaire, time = a*x + b*y + c*z; Vous pouvez ensuite utiliser une régression linéaire pour trouver les paramètres a, b, c qui correspondent le mieux à vos données.

+0

Merci! Je suppose que je ferais mieux de réduire le nombre de variables et de voir quel est le nombre minimum qui peut être utilisé pour obtenir une approximation. Comme la relation ne semble pas linéaire, je vais essayer l'outil @belisarius. – barry

3

@ La réponse de Dissipateur est bonne, mais la sélection de la famille de la fonction et le nombre de paramètres libres nécessite une certaine expérience. C'est ce qu'on appelle la «modélisation», et les physiciens sont les maîtres du commerce. De plus, le problème de régression générale (non linéaire) n'est pas toujours trivial à résoudre.

Peut-être que vous pouvez essayer this software package que parfois est assez intelligent pour sélectionner la bonne fonction et les paramètres. J'ai eu quelques belles expériences avec ça.

alt textalt text

HTH!

BTW ... Si vous pouvez poster vos données 4D quelque part nous pourrions la recherche un peu plus

+0

Eureqa semble prometteur! Il parvient à créer une formule (complexe) qui "connecte" le (petit) ensemble des points de données. Je suppose que je vais avoir besoin d'un plus grand ensemble de données afin d'obtenir des résultats utilisables et même des facteurs externes. Je posterai tous les résultats futurs ici. – barry

+0

@barry A moins que vos fonctions soient très régulières, pour modéliser une fonction de 3 variables, vous avez en effet besoin de beaucoup de points. Je répète l'offre de jeter un œil à vos points actuellement disponibles pour voir si quelque chose se présente. –

+0

Je vous ferai savoir quand j'ai un ensemble de données d'échantillon plus propre. L'ensemble de données actuel a également souffert de trop de facteurs externes. – barry

2

Comment allez-vous mettre à jour le compteur de progrès que le calcul progresse? Si elle se divise en un grand nombre d'étapes qui s'exécutent à peu près à temps égal, vous pouvez simplement indiquer combien d'étapes ont été effectuées en pourcentage du total, sans avoir besoin de connaissances préalables.

Si le calcul comporte quelques phases distinctes, alors vous devrez estimer la contribution totale de chacune par une formule, comme vous le dites. Toujours pour chaque phase, vous aurez besoin d'un modèle pour savoir jusqu'où le calcul a progressé à travers cette phase, et cela nécessite une certaine connaissance du code lui-même. En savoir plus sur la nature des variables d'entrée ici aiderait. Avez-vous des limites de calcul sur le code lui-même, c'est-à-dire pouvez-vous prouver qu'il s'exécute linéairement ou quadratiquement dans chaque dimension de l'entrée? Est-ce un type de méthode de force brute qui est factorielle ou exponentielle dans l'une des entrées? Essayer de dériver une formule pour le temps d'exécution du code basé sur le choix de l'algorithme serait probablement plus précis qu'une régression empirique seule, et pourrait vous conduire à trouver un algorithme plus rapide.

+0

J'ai ajouté quelques informations à la question. Je suis d'accord que ce serait peut-être une bonne idée d'essayer d'obtenir des résultats pour des sous-tâches individuelles, ce qui améliorerait probablement aussi l'exactitude de l'estimation. Il serait probablement aussi plus facile de voir le type de relation entre les sous-tâches et le temps requis qu'entre les tâches combinées et le temps total nécessaire puisque l'initialisation des sous-tâches etc. pourrait avoir une entrée pondérée (fixe) sur le processus global. . – barry