Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #6

Merged
merged 32 commits into from
Jun 14, 2021
Merged

Develop #6

merged 32 commits into from
Jun 14, 2021

Conversation

Jordan08
Copy link
Member

@Jordan08 Jordan08 commented May 24, 2021

Bonjour,
L'interface avec AMPL est finie.
Tout marche.

Quelques petites indications:

  1. Pour l'utiliser dans l'IDE de AMPL l'exécutable s'appelle "ibexopt". J'ai repris la base du "ibexopt" de Ibex, tout en y ajoutant les fonctionnalités de lecture de ficher NL et de passage des options par AMPL.
    Il manque juste le fait de récupérer un point x0 que AMPL peut donner avec le modèle, ça pourrait initialiser la value de la fonction objective, mais à voir...
  2. On utilise une librairie externe qui s'installe avec cmake : https://github.com/ampl/asl
    On peut donner le dossier d'installation avec l'option -DASL_DIR=/chemin/
    sinon elle s'installe automatiquement à partir de l'archive contenue dans 3rd.
  3. Je n'ai pas fait le pkgconfig ni le confg.cmake, car j'ai besoin d'aide.
  4. Je me pose la question de l'integration de ce "plugin" dans le coeur de Ibex
  5. La trace de IbexOpt retourne des codes avec des couleurs qui n'est pas compatibles avec l'affichage dans AMPL IDE. Il serait bien de pouvoir désactiver les couleurs avec un code de trace=10 ou 20 par exemple. Ou l'on peut rentre l'option sans couleur obligatoire quand on utilise AMPL.
  6. Pour l'instant, l'interface est compatible qu'avec Filib. Car il y a un conflit entre GAOL et ASL qui contiennent tous les deux dtoa.c. Ce problème disparait avec la version 4.2.3 de GAOL.

N'hésitez pas à me faire des retours.

@cyrilbouvier
Copy link
Contributor

Je viens de commiter (8a22f66) quelques modifications des scripts CMake.

Voici quelques remarques:

  1. 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@2303cbe)

  2. 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))))
  1. 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.

  2. 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)

@Jordan08
Copy link
Member Author

Jordan08 commented May 27, 2021

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:

  • soit on attend la version 4.2.3 de Gaol
  • soit on enleve la librairie libgdtoa.a de la compilation, mais mes competences en cmake s'arrete là... :-) En le faisant à la "main", on a un autre message d'erreur...
/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 »

  1. 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?

  2. 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

@cyrilbouvier
Copy link
Contributor

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.

@Jordan08
Copy link
Member Author

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: ibex-team/ibex-lib#511

@cyrilbouvier
Copy link
Contributor

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.

@Jordan08
Copy link
Member Author

Jordan08 commented Jun 8, 2021

Ça devrait être bon pour le "merge" :-)

@cyrilbouvier
Copy link
Contributor

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))))

@Jordan08
Copy link
Member Author

Jordan08 commented Jun 8, 2021

"Normalement" c'est bon...

@cyrilbouvier
Copy link
Contributor

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))))")

@Jordan08
Copy link
Member Author

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.

@Jordan08 Jordan08 merged commit 1f90b43 into master Jun 14, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants