ibex-team / ibex-ampl

Plugin for AMPL modeling language
GNU General Public License v3.0
1 stars 0 forks source link

Develop #6

Closed Jordan08 closed 3 years ago

Jordan08 commented 3 years ago

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 commented 3 years ago

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@2303cbe49d4c490a4fa601b6a7756720b11d2e4a)

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

  4. 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 commented 3 years ago

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:


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 
cyrilbouvier commented 3 years ago

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 commented 3 years ago

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

cyrilbouvier commented 3 years ago

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 commented 3 years ago

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

cyrilbouvier commented 3 years ago

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 commented 3 years ago

"Normalement" c'est bon...

cyrilbouvier commented 3 years ago

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 commented 3 years ago

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.