Closed Jordan08 closed 3 years ago
Je viens de commiter (8a22f66) quelques modifications des scripts CMake.
Voici quelques remarques:
La dépendence envers Ibex n'est pas 2.8.9.1 mais la version suivante. En effet, pour que la compilation fonctionne, il faut que la méthode add_goal avec 2 arguments existe, or elle a été introduite dans un commit postérieur à la version 2.8.9.1 (ibex-team/ibex-lib@2303cbe49d4c490a4fa601b6a7756720b11d2e4a)
La version de Gaol sans gdtoa est 4.2.3 et non 4.2.2 De plus, je n'ai pas réussi à reproduire le problème avec Gaol 4.2.0 et 4.2.2 sur le double dépendence à gdtoa, j'arrive à compiler sans problème. Par contre, avec Gaol, j'ai des tests qui ne passent pas:
Expr tested :
((((x3^4*x9^7)+(-0.18324757*((x4*x3)*x9)^3))+x1)-0.254287220000001)
Expr wanted :
((((x3^4*x9^7)+(-0.18324757*((x4*x3)*x9)^3))+x1)-0.25428722)
F.Expr tested :
((10*(x7*x9))-(0.00968946189201593*(x3*(x1^4-x2^4))))
Expr wanted :
((10*(x7*x9))-(0.00968946189201592*(x3*(x1^4-x2^4))))
Le fichier pkg-config est bien généré et installé dans le sous-dossier share/pkgconfig/
du dossier d'installation. De même les fichiers de config CMake pour la détection et l'utilisation de la librairie ibex-ampl sont bien générés et installés dans le sous-dossier share/ibex_ampl/cmake
du dossier d'installation.
Lorsque que ibex-ampl installe lui même la bibliothèque ASL, j'ai changé les chemins d'installations des headers et bibliothèques (j'ai tout mis dans include/ibex/3rd/ et lib/ibex/3rd)
Merci Cyril pour ton aide.
1) Pour Gaol, ça ne marche pas avec la version 4.2.0, voici mon message d'erreur lorsque l'on compile ibexopt
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/ibexopt.dir/ibexopt.cpp.o -o ../../bin/ibexopt ../libibex-ampl.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/libibex.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libgaol.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libgdtoa.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libultim.a /usr/lib/x86_64-linux-gnu/libClpSolver.so /usr/lib/x86_64-linux-gnu/libClp.so /usr/lib/x86_64-linux-gnu/libCoinUtils.so /usr/lib/x86_64-linux-gnu/libbz2.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/liblapack.so /usr/lib/x86_64-linux-gnu/libblas.so -lm /home/jninin/Documents/WORK/DEV/IBEX/GIT_ASL3/OUT/lib/libasl.a -ldl -lm
/usr/bin/ld : /home/jninin/Documents/WORK/DEV/IBEX/GIT_ASL3/OUT/lib/libasl.a(dtoa1.c.o) : dans la fonction « freedtoa » :
dtoa1.c:(.text+0x4fdd) : définitions multiples de « freedtoa »; /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libgdtoa.a(dmisc.c.o):dmisc.c:(.text+0xa0) : défini pour la première fois ici
/usr/bin/ld : /home/jninin/Documents/WORK/DEV/IBEX/GIT_ASL3/OUT/lib/libasl.a(dtoa1.c.o) : dans la fonction « dtoa » :
dtoa1.c:(.text+0x76eb) : définitions multiples de « dtoa »; /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libgdtoa.a(dtoa.c.o):dtoa.c:(.text+0x0) : défini pour la première fois ici
collect2: error: ld returned 1 exit status
make[2]: *** [src/bin/CMakeFiles/ibexopt.dir/build.make:98 : bin/ibexopt] Erreur 1
Il y a deux possibilités:
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/ibexopt.dir/ibexopt.cpp.o -o ../../bin/ibexopt ../libibex-ampl.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/libibex.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libgaol.a /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libultim.a /usr/lib/x86_64-linux-gnu/libClpSolver.so /usr/lib/x86_64-linux-gnu/libClp.so /usr/lib/x86_64-linux-gnu/libCoinUtils.so /usr/lib/x86_64-linux-gnu/libbz2.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/liblapack.so /usr/lib/x86_64-linux-gnu/libblas.so -lm /home/jninin/Documents/WORK/DEV/IBEX/GIT_ASL3/OUT/lib/libasl.a -ldl -lm
/usr/bin/ld : /home/jninin/Documents/WORK/DEV/IBEX/GIT_IBEX/OUT_CLP_GOAL/lib/ibex/3rd/libgaol.a(gaol_interval_lexer.cpp.o) : dans la fonction « gaol_lex() » :
gaol_interval_lexer.cpp:(.text+0x824) : référence indéfinie vers « strtord »
/usr/bin/ld : gaol_interval_lexer.cpp:(.text+0x9ab) : référence indéfinie vers « strtord »
/usr/bin/ld : gaol_interval_lexer.cpp:(.text+0xb1f) : référence indéfinie vers « strtord »
2) J'ai vu que dans le `ibex-ampl.pc`, il manquait les chemins vers libasl.a et toutes les librairies d'ibex. Mais ça peut peut-être attendre?
3) Pour les comparaisons d'expression, le problème vient de la précision d'affichage des doubles.
Dans sameExpr de utili.h, j'ai du fixer la précision d'affichage J'ai l'impression qu'il y a une erreur de l'ordre de la precision machine entre la lecture et l'ecriture. Ça doit dépendre également des systèmes. Il faudrait peut-être améliorer la comparaison de deux ExprNode?
std::stringstream s;
s.precision(15);
s << node;
Mon système est: Linux 5.8.0-53-generic #60~20.04.1-Ubuntu x86_64 GNU/Linux
Encore merci
Pour ce qui concerne le problème avec gdtoa, je pense que le mieux est d'attendre que Gaol sorte une nouvelle version.
Pour ce qui concerne le fichier ibex-ampl.pc
, c'est normal qu'il n'y ai pas les libs d'Ibex, elles seront ajoutés par pkg-config grâce à la ligne Requires: ibex >= 2.8.9.1
. Par contre il devrait y avoir la lib asl, je vais regarder pour corriger ça.
Pour ce qui concerne les problèmes de tests, il faudrait identifier la source: Gaol, Ibex ou ibex-ampl ? Le test doit passer pour toutes les systèmes et toutes les lib d'intervalles.
OK merci.
Pour les tests, le problème vient de la lecture/ecriture de nombre décimal, c'est-à-dire de la conversion entre un double precision IEEE-754 floating point (double) et une ASCII string. La représentation binaire n'étant pas exacte, il y a un décalage en fonction de la précision machine. Vu que l'on fait des comparaisons d'expression algébrique en utilisant les stringstream et << , il semble que ce décalage ne soit pas le même suivant la machine, la librairie et la précision d'affichage: gdtoa, dtoa ou stdio... Je pense que je vais simplifer les tests, car il n'y a pas de problème ici. On est pas obligé de tester ce type de chose. Ou alors il faut coder les comparaison d' ExprNode dans Ibex, pour vérifier l'égalité de double. Mais je sais que l'isomorphisme de DAG (ou de graphe) est un probleme NP.... Je pense que je vais simplifer les tests, car il n'y a pas de problème ici. On est pas obligé de tester ce type de chose.
Peux-tu voir également ceci: https://github.com/ibex-team/ibex-lib/issues/511
Le fichier pkgconfig devrait maintenant être correcte. Une fois que les tests passeront avec Gaol et Filib, je pense qu'on pourra merger dans master.
Ça devrait être bon pour le "merge" :-)
J'ai toujours 2 erreurs avec Gaol:
Expr tested :
((((x3^4*x9^7)+(-0.18324*((x4*x3)*x9)^3))+x1)-0.254280000000001)
Expr wanted :
((((x3^4*x9^7)+(-0.18324*((x4*x3)*x9)^3))+x1)-0.25428)
F.Expr tested :
((10*(x7*x9))-(0.00968000000000001*(x3*(x1^4-x2^4))))
Expr wanted :
((10*(x7*x9))-(0.00968*(x3*(x1^4-x2^4))))
"Normalement" c'est bon...
Toujours la même erreur avec Gaol:
1/1 Test #1: TestAmpl .........................***Failed 0.04 sec
.........Expr tested :
((((x3^4*x9^7)+(-0.18324*((x4*x3)*x9)^3))+x1)-0.2542801)
Expr wanted :
((((x3^4*x9^7)+(-0.18324*((x4*x3)*x9)^3))+x1)-0.25428)
F.Expr tested :
((10*(x7*x9))-(0.009680001*(x3*(x1^4-x2^4))))
Expr wanted :
((10*(x7*x9))-(0.00968*(x3*(x1^4-x2^4))))
F..
!!!FAILURES!!!
Test Results:
Run: 12 Failures: 2 Errors: 0
1) test: ibex::TestAmpl::I5 (F) line: 206 /home/cyril/work/ibex-lib/plugins/ibex-ampl/tests/TestAmpl.cpp
assertion failed
- Expression: sameExpr(sys.f_ctrs[0].expr(),"((((x3^4*x9^7)+(-0.18324*((x4*x3)*x9)^3))+x1)-0.25428)")
2) test: ibex::TestAmpl::bearing (F) line: 238 /home/cyril/work/ibex-lib/plugins/ibex-ampl/tests/TestAmpl.cpp
assertion failed
- Expression: sameExpr(sys.f_ctrs[1].expr(),"((10*(x7*x9))-(0.00968*(x3*(x1^4-x2^4))))")
J'ai retiré les tests avec des doubles. Car le problème vient juste de l'arrondi d'affichage. Il n'y a pas de bug dans ibex-ampl. On a pas besoin de tester ce genre de chose ici.
Bonjour, L'interface avec AMPL est finie. Tout marche.
Quelques petites indications:
sinon elle s'installe automatiquement à partir de l'archive contenue dans 3rd.
N'hésitez pas à me faire des retours.