Etat de progression d'un calcul.
Bounjour.
j'ai une fonction récursive qui fait des vérifications en séries de la manière suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| fonction Verify {tableau d'appel: SPC}
si SPC complet, alors
ajouter SPC à la liste BONSPC(globale)
sortir de la fonction
sinon
chercher case incompletes(boucle)
Boucle for jusqu'à nombre de possibilités
remplir case incomplete par variable dans nouveau tableau STC
regarder si la case est valable dans STC
si oui, appeler verify {STC}
fermer la boucle
fermer la condition |
On obtiens donc un arbre de possibilité un peu comme ça:
Code:
1 2 3 4 5 6 7
|
____________________________|____________________________________
__|____ ___|____ _|__ | ____|___ |
| __|__ | __|___ | * | | *
* * * | |
ext (* veut dire non trouvé, aret de la procédure) |
Sachant que je peut connaitre le niveau maximal de récursivité (nombre de niveau possibles de l'"arbre" (=nombre de cases vides)) mais que ce niveau n'est pas forcément atteint, j'aimerais faire une barre qui indique l'état de progression de la procédure.
j'usque-ici, j'utilisais une barre de progression logarythmique mais ce n'étais pas trés satisfaisant. (ralentit au fur et à mesure).
si vous avez une idée... Merci :wink:
Re: Etat de progression d'un calcul.
Le même problème se pose dans les calculs de type de branch-and-bound (que je connais bien): ils sont très longs et on a vraiment envie de montrer l'avancée du calcul mais il n'y a à ma connaissance pas de solution satisfaisante lorsque des coupes peuvent apparaître à de faible profondeur, ce qui déséquilibre très fortement l'arbre.
Pour calculer le k que j'ai défini dans mon post précédent, on peut modifier ton code comme ceci afin de faire un passage à vide pour évaluer k avant d'appeler la récursion:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| fonction Verify {tableau d'appel: SPC, réel: min, réel: max}
si SPC complet, alors
ajouter SPC à la liste BONSPC(globale)
sortir de la fonction
sinon
chercher case incompletes(boucle)
k=0
Boucle for jusqu'à nombre de possibilités
remplir case incomplete par variable dans nouveau tableau STC
regarder si la case est valable dans STC
si oui, augmenter k
vider la case incomplete
fermer la boucle
i=0
Boucle for jusqu'à nombre de possibilités
remplir case incomplete par variable dans nouveau tableau STC
regarder si la case est valable dans STC
si oui
appeler verify {STC, min + i(max-min)/k, min + (i+1)(max-min)/k}
augmenter i
finsi
fermer la boucle
fermer la condition |