Version
0.2
Soumis par
Bertrand Neveu
Description
L'usage de la 3B dans IbexBlockSolver fait perdre des solutions
Programme test
Pas de programme de test (la 3B n'est pas encore incorporé dans IbexBlockSolver).
Fixé dans la version
0.3
Note interne
Les réductions faites sur les bandes à l'intérieur de la 3B ne sont pas conservées, seulement, il se trouve que le rognage filtrait de façon intempestive sur les constantes symboliques (au lieu de la faire uniquement sur les variables), d'une part, et d'autre part que la synchronisation se fait de façon brutale entre un sous-système et le système global (toutes les entités sont synchronisées) si bien que le système global se trouvait à un certain stade à récupérer dans des variables des intervalles correspondant à des constantes symboliques non valides (datant d'un filtrage ancien). Le problème a été réglé en interdisant le filtrage sur les constantes symboliques dans la classe IbexEvaluator.
Version
0.3
Soumis par
Bertrand Neveu
Description
L'appel au constructeur IbexBlockSolver lève une exception IbexBlockSetException de type NO_BLK lorsqu'on lui passe un seul bloc contenant une seule variable.
Programme test
IbexBlockSet bs(30, 1);
IbexSystem sys("ponts.txt");
bs.set_blk(sys.var("A_x"), 0);
IbexBlockSolver solver1(sys,bs);
Output:
IbexBlockSetException
the variable does not belong to any block
Fixé dans la version
0.4
Note interne
Problème dans la décomposition (effectuée par IbexBlockSolver). Une contrainte n'était ajoutée à un sous-système que si les entités de la contrainte appartenaient au bloc courant ou à un bloc antérieur. Il fallait également prendre en compte le fait qu'une variable pouvait n'appartenir à aucun bloc (d'où l'exception).
Version
0.3
Soumis par
Bertrand Neveu
Description
La résolution d'un sous-système (obtenu par décomposition) avec IbexDefaultSolver conduit à un crash mémoire.
Programme test
IbexBlockSet bs(30, 1);
IbexSystem sys("ponts.txt");
bs.set_blk(sys.var("A_x"), 0);
IbexSystemArray decomp = sys.decompose(bs);
IbexDefaultSolver solver1(decomp[0]);
solver1.explore();
Output:
seg fault (ou exception de type IbexInvalidEntityException, mais la mémoire a été violée).
Fixé dans la version
0.4
Note interne
La méthode add_all_ctr() dans IbexSubSystemBuilder appelait add_ctr de la classe courante au lieu de la classe mère, conséquence: les indices étaient interprétés comme les numéros des contraintes dans le système base au lieu des numéros dans le repository. Ce problème apparaissait au moment où le sous-système decomp[0] était copié par le solveur.
Version
0.4
Soumis par
Bertrand Neveu
Description
La résolution d'un sous-système (obtenu par décomposition) avec IbexDefaultSolver avec shaving perd des solutions.
Programme test
IbexBlockSet bs(30, 4);
IbexSystem sys("ponts.txt");
bs.set_blk(sys.var("A_x"), 0);
bs.set_blk(sys.var("A_y"), 1);
bs.set_blk(sys.var("B_x"), 2);
bs.set_blk(sys.var("B_y"), 3);
IbexSystemArray decomp = sys.decompose(bs);
IbexDefaultSolver solver0(decomp[0]);
solver0.explore();
decomp[0].box = solver0.border(0);
sys.sync(decomp[0]);
IbexDefaultSolver solver1(decomp[1]);
solver1.explore();
decomp[1].box = solver1.border(0);
sys.sync(decomp[1]);
IbexDefaultSolver solver2(decomp[2]);
solver2.explore();
decomp[2].box = solver2.border(0);
sys.sync(decomp[2]);
decomp[3].sync(sys);
decomp[3].set_output_flags(15);
IbexDefaultSolver solver3(decomp[3]);
solver3.set_contractor(IBEX_SHAVE);
solver3.explore();
solver3.report();
Output:
found 0 inner box(es) found 0 border box(es)
Fixé dans la version
0.5
Note interne
Bug introduit en changeant dans la version 0.4 le comportement de la méthode hc4() en cas d'infaisabilité. Au lieu de vider simplement la boîte, une exception de type IbexUnfeasibilityException est désormais levée. Or, la méthode shave() n'avait pas été adaptée en conséquence.
Version
0.4
Soumis par
Bertrand Neveu
Description
Erreur de compilation lors de l'appel à la méthode bflag(int) de IbexDefaultSolver.
Programme test
IbexSystem sys(...);
IbexDefaultSolver solver(sys);
solver.explore();
if (solver.bflag(0)==IBEX_UNIQUE) ...
Output:
Erreur de compilation
error: cannot convert ~INTERVAL_VECTOR~ to ~IbexBoxFlag~ in return
Fixé dans la version
0.5
Note interne
Le type du champ bflags dans IbexSolver a été remplacé par vector<IbexBoxFlag>.
Version
0.4
Soumis par
Gilles Chabert
Description
L'équation x=0 ne peut être construite
Programme test
IbexSymbol x("x");
const IbexExpr& exr(x=0);
Output:
Erreur de compilation
ambiguous overload for ~operator=~ in ~x = 0~
Fixé dans la version
0.5
Note interne
0 est casté de façon intempestive en char* puis convertit en IbexSymbol via le constructeur IbexSymbol(const char*). Il en résulte une ambigüité entre IbexSymbol::operator=(const IbexSymbol&) et IbexSymbol::operator=(const INTERVAL&). Le constructeur impliqué a donc été mis explicit.
Version
0.4
Soumis par
Gilles Chabert
Description
Les contraintes ne sont pas numérotées dans le système suivant leur ordre d'ajout dans le builder (ou ordre d'apparition dans le fichier).
Programme test
IbexSystem csp("ponts.txt");
IbexRepository& rep(csp.rep);
for (int i=0; i<csp.nb_ctr(); i++)
IbexTernaryEncoder(rep,rep.get_syntax(i)).encode();
IbexDefaultBuilder builder(rep);
for (int j=csp.nb_ctr(); j<rep.nb_expr(); j++)
builder.add_ctr(j);
for (int j=0; j<rep.nb_entities(); j++)
builder.set_entity(j,IBEX_VAR);
IbexSystem sys(builder);
sys.set_output_flags(16);
cout << sys << endl;
Output: Contraintes 193 -> 221 puis 30 -> 192
Fixé dans la version
0.5
Note interne
La structure hash_set<int> (non ordonnée) de IbexDefaultBuilder a été remplacée par set<int> (ordonnée).
Version
0.5
Soumis par
Bertrand Neveu & Gilles Chabert
Description
Diverses fuites mémoires
Programme test
IbexSystem sys("ponts.txt");
IbexSymbol x("x");
IbexRepository rep;
rep.add(x=0);
IbexDefaultBuilder builder(rep);
builder.set_entity(0,IBEX_VAR);
Output: Valgrind révèle un grand nombre de memory leaks
Fixé dans la version
0.6
Note interne
Les destructeurs des classes IbexSystem, IbexAdjacency, IbexSystemBuilder, IbexExpr ont été modifiés en conséquence.
Version
0.5
Soumis par
Bertrand Neveu
Description
La méthode decompose de IbexSystem provoque un seg fault si une contrainte ne contient pas de variable
Programme test
IbexSystem sys("ponts.txt");
IbexSubSystemBuilder builder (sys);
builder.set_entity (IBEX_VAR,29,IBEX_SYB);
builder.add_all_ctr();
IbexSystem sysblock (builder);
sysblock.sync(sys);
IbexBlockSet bs(30, 1);
bs.set_blk(sysblock.var("A_y"), 0);
IbexSystemArray decomp = sysblock.decompose(bs);
Output: Seg fault
Fixé dans la version
0.6
Note interne
Le cas n'avait pas été prévu: le compteur max_blk restait à -1 dans la boucle calculant le plus grand bloc auquel appartient une contrainte.
Version
0.5
Soumis par
Bertrand Neveu
Description
La certification ne fonctionne pas
Programme test
IbexSystem sys("ponts.txt");
IbexDefaultSolver solver(sys);
solver.certification=true;
solver.explore();
cout << solver.bflag(0) << endl;
Output: 0 (nothing proven)
Fixé dans la version
0.6
Note interne
La eps-inflation dans la méthode certify ne testait pas la bonne inclusion de boîtes: La boîte en argument A était élargie en B puis contracté en C. On testait alors "C incluse dans A", ce qui avait très peu de chance de réussir compte tenu des flottants. Il fallait remplacer par "C incluse dans B" puis remplacer A par C. La boîte en argument est donc devenue in-out.
Version
0.5
Soumis par
Gilles Chabert
Description
Une erreur de type "unknown file" provoque un seg fault. De plus il y a une fuite mémoire.
Programme test
Output: seg fault
Fixé dans la version
0.6
Note interne
Le destructeur de la classe IbexAdjacency était appelé lors de la levée de l'exception (à l'intérieur du constructeur de IbexSystem) alors que l'objet n'est pas encore initialisé. La condition _nb_ctr>0 a été ajoutée dans le destructeur d'IbexAdjacency pour éviter ce cas. La fuite mémoire est liée au champ IbexRepository qui était non détruit en cas d'exception.
Version
0.6
Soumis par
Gilles Chabert
Description
maxdelta et maxratiodelta font un "min" au lieu d'un "max"
Programme test
Output: 0 (au lieu de 0.5)
Fixé dans la version
0.7
Note interne
Petite inversion dans le code des fonctions.
Version
0.6
Soumis par
Gilles Chabert
Description
Le restart de IbexDefaultSolver ne semble pas réinitialiser la recherche avec la boîte initiale.
Programme test
IbexSystem sys("ponts.txt");
IbexDefaultSolver solver(sys);
solver.explore();
solver.report();
solver.explore();
solver.report();
Output:
found 0 inner box(es) found 128 border box(es)
31975 boxes created.
total time : 10.5047s
found 0 inner box(es) found 0 border box(es) // PROBLEM!
1 boxes created.
total time : 0s
Fixé dans la version
0.7
Note interne
La boîte initiale est désormais stockée (champ start_box).
Version
0.7
Soumis par
Bertrand Neveu
Description
Impossible de récupérer l'exception IbexTimeOutException. Le catch est "traversé" et l'execution s'arrête en "terminate called after throwing an instance of 'IbexTimeOutException' Aborted"
Fixé dans la version
0.8
Note interne
Oubli de déclaration de l'exception dans le prototype de la méthode explore() de IbexDefaultSolver.
Version
1.05
Soumis par
Bertrand Neveu
Description
Deux problèmes:
- Empty composite exception (unrecoverable) pour un multisystème construit à partir d'un bloc 1x1 dont la variable n'est pas la première du système initial
- Apparition de boîtes dans le sous-pavage associé au contracteur de précision dont la taille est largement au dessus du seuil de précision (le sous-pavage comportant un nombre de boîtes beaucoup plus imortant que celui attendu).
Fixé dans la version
1.06
Note interne
- decompose() dans MultiSystem, confusion entre n° de variable et clef
- contract(Cell&, Param&) dans Contractor, le space sauvegardé doit être celui obtenu APRES le sync() et non avant.