2 pièce(s) jointe(s)
Reconstruction de flux de données
Bonjour à tous,
J'ai un plus ou moins gros soucis sur lequel j'espère vous pourrez m'apporter des indications. Je ne sais pas si je post dans le bon répertoire.
J'expose dans un premier temps le problème. Puis, je décris mon ébauche de résolution bien qu'encore très limité. Par ailleurs, SI vous voyez d'autre moyen de résoudre ce problème, je suis tout ouïe.
Problème:
Un exemple de données est dans le fichier joint.
Ma données est tout simplement une table.
Chaque observation contient un identifiant unique, clé de ma table. puis quelques caractéristiques intrinsèques liées a cette identifiant.
Enfin, pour l'une des variables spécifiques, nous avons l'historique des mesures de la variable dans le temps dispatché annuellement sur plusieurs colonnes. Cela représente le flux de la variable au niveau de l'identifiant.
Pour rendre plus concret. Imaginons un monde post apocalyptique où on fait très attention a la gestions de l'eau. On a un parc de différents points d'eau (identifiants unique), disons trois points A0, B0 et C0. la gestion est confiée à trois personnes différentes (disons Bob, Snoopy et Pierrot) et chacune est responsable de son point d'eau. Jusqu'ici tout va bien.
Seulement les points d'eau communiquent entre eux. et du jour au lendemain le point A0 peut etre vidé dans un autre point d'eau disons A1 avec une petite perte d'eau. quant à B0, le volume d'eau est vidé dans B11 et B12. Cette fois en cumulant les deux volumes, on a un petit peu plus en terme de quantité.
Il se peut même qu'a partir d'une certaine date, Bob se voit accorder la gérance supplémentaire d'un nouveau point d'eau Z.
Il se peut aussi qu'un beau jour, pour xY raison, A1 et C0 soit versé dans le même point d'eau AC0 toujours avec une legere perte ou gain.
Imaginez après quelques années de gestion, on nous demande d'évaluer comment les quantités A0, B0 et C0 ont été géré. Mais on rencontre un problème, les seuls données dont on dispose sont le nom des point d'eau qui ont été utilisé avec leur historique de volume. nous ne savons plus qui c'est occupé de tel ou tel point d'eau ni des transferts de volume. Avec ces seules données, on voudrait reconstruire la colonne de provenance tel que: A0->A1; A1->AC0;
B0->B11
B0->B12
Z quantité à part
C0->AC0
L'exemple inclus les cas décrits.
Une contrainte supplémentaire est que les réservoirs sont à usage unique. une fois vidé, ils ne sont plus utilisé.
L'idée de la solution est intuitif et simple dans le cas de l'exemple mais la solution devra être utiliser sur des milliers de tables dont le nombre de reservoir pourra aller jusqu'a quelques centaine et la profondeur historique jusqu'a 160 mois a une frequence mensuelle.
Résolution:
- solution simple:
regarder quand les réservoirs se vident et ou ils sont susceptibles d'avoir été transférés en se basant sur la stabilité du niveau volumétrique en prenant en compte à la fois les contraintes techniques et à la fois les caractéristiques (qui peuvent porter de l'information pertinente quand disponible). facile a dire ^^ mais je peche un peu ici.
D'abord la solution pour un cas ou on a 3 reservoirs initiaux et 8 réservoirs au globale aura la forme d'une matrice tel que:
|
A0 |
B0 |
C0 |
A1 |
B11 |
B12 |
AC0 |
K |
C1 |
A0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
B0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
C0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
NA (nouvel assignation) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
La matrice contient des 1 lorsques le réservoir d'une colonne donnée a contenu un volume issue du reservoir de la ligne correspondante.
Des contraintes portent sur le contenu de la matrice :
- soit directement par exemple par rapport aux caractéristiques :l'eau contenu dans un réservoir homologué en L ne peut être contenu que dans un reservoir homologué L ou info absente.
- soit indirectement par exemple le transfert ne peut durer que deux mois maximun entre deux réservoirs. ie que le reservoir de transfert a un reservoir ne peut etre rechercher que parmi ceux qui contiennent Au moins une goutte d'eau deux mois apres.
Une fois ces limites/règles établies, Il reste selon moi à chercher la solution optimale ie (je crois qu'on appelle ca l'optimun de pareto) minimiser au mieux la fonction de stabilité de notre data D et de notre solution potentielle S d'une part et minimiser le nombre de solution ranger en nouvel assignation d'autre part.
La fonction de stabilité est plus ou moins la volatilité de ma variable volume au cours du temps. Voila ou j'en suis.
Techniquement, je pensais, pour gérer ces contraintes simplement à de la programmation par contraintes, mais je ne connais pas du tout ce sujet donc je suis assez preneur de conseils qui pourrait m'orienter vers une solution technique efficace et gratos ;). et si il y a beaucoup plus simple je suis aussi biensur preneur.
Il faut aussi savoir que on a un jeu de test ou la solution est connue
Merci ;)