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

Finish the AMPL interface #1

Open
Jordan08 opened this issue May 25, 2019 · 7 comments
Open

Finish the AMPL interface #1

Jordan08 opened this issue May 25, 2019 · 7 comments

Comments

@Jordan08
Copy link
Member

Bonjour,

Dans la branche "ampl", j'ai fait un update du code.

Je mets ici une todo liste du travail qu'il reste à faire

A+

Jordan08 referenced this issue in ibex-team/ibex-lib May 26, 2019
include the option --AMPL in ibexopt (but we need the option -AMPL)
Need more test with ampl
Jordan08 referenced this issue in ibex-team/ibex-lib Jun 1, 2019
just add the following option before solving:
" option solver ibexopt; "

Now we need to interface the option of ibexopt with AMPL (rel_eps,
abs_eps, timeout,...)
Jordan08 referenced this issue in ibex-team/ibex-lib Jun 4, 2019
Jordan08 referenced this issue in ibex-team/ibex-lib Jun 4, 2019
You can directly call ibexopt from AMPL
@Jordan08
Copy link
Member Author

Jordan08 commented Jun 4, 2019

Bonjour,

ça y est IBEXOPT est completement compatible avec AMPL
On peut appeler ibexopt directement depuis l'IDE de AMPL.

Il suffit de copier ou mettre un lien vers "ibexopt" dans le dossier de Amplide et on peut appeler ibexopt et récupérer la solution dans l'IDE de AMPL.

exemple:

var x {1..3} >= 1, <= 5;
var truc >= 1, <= 5;
minimize obj:
x[1]truc(x[1] + x[2] + x[3]) + x[3];
subject to constr1: truc *prod {i in 1..3} x[i] >= 25;
subject to constr2: truc^2 +sum {i in 1..3} x[i]^2 = 40;
let x[1] := 1;
let x[2] := 5;
let x[3] := 5;
let truc := 1;
#printf "optimal solution as starting point \n";
#let x[1] := 1;
#let x[2] := 4.742994;
#let x[3] := 3.8211503;
#let x[4] := 1.3794082;

display x;
display truc;
display obj - 17.0140173;

option ibexopt_options " trace=0 rigor=0 rel_eps_f=1.e-5 abs_eps_f=1.e-6 eps_h=1.e-8 eps_x=1.e-8 initial_loup=20 timeout=10";
option solver ibexopt;
solve;

display x;
display truc;
display obj;
display obj - 17.0140173;

@Jordan08
Copy link
Member Author

Jordan08 commented Jun 4, 2019

Il me faudrait une relecture sur les messages de retour et sur les noms des options

@Jordan08
Copy link
Member Author

Jordan08 commented Jun 4, 2019

Si on ne met pas de "ibexopt_options" c'est les options par default de ibexopt.
( d'ailleurs il faudrait peut-être réunir toutes les variables par défault dans un endroit, car c'est très éparpillé: NormalizedSystem, Optimizer, DefaultOptimizer,.... )

J'ai fait en sorte que rien ne change en apparence avec ibexopt.
On peut toujours faire du Minibex si on veut sans rien changer.

Un peu de relecture est NEOS nous tend les bras ;-)

@goldsztejn-a
Copy link

Super boulot Jordan, merci !

On a quelques questions pour bien comprendre :)

  • Finalement, tu utilises la librairie ASL distribuée par AMPL pour lire les nl, n'est-ce pas? Tu as fait quelques patchs sur ces librairies distribuées par AMPL si j'ai bien compris, n'est-ce pas?
  • Au final, lit-on des .ampl ou des .nl?
  • Joli d'avoir réussi à passer les options ibexopt à AMPL !!! Gilles a pris note et reconnais sa faute de débutant de répartir des options par défaut dans les 100000 lignes de code ;) Il corrige cela au plus vite :)

On souhaite faire des tests sur l'ensemble des benchs. L'idée serait de prendre un fichier mbx, de le ré-écrire en ampl, d'utiliser le plugin pour le relire encore une fois, et finalement de comparer les deux sorties du solver. Comme tu es à fond dans AMPL, voudrais-tu bien écrire la fonction System::to_AMPL() membre de la classe System et qui écrit fichier AMPL dans une chaîne de caractère? Tu pourrais fortement t'inspirer de System::minibex() qui est très simple... De notre coté, on ferait l'exécutable qui lit, converti, résout et compare les sorties.

Gilles aimerait au final inclure cela dans les tests unitaires du plugin, ca serait super !

Il me faudrait une relecture sur les messages de retour et sur les noms des options

Que faut-il relire?

Merci encore !

Alex (& Gilles)

@Jordan08
Copy link
Member Author

Jordan08 commented Jun 5, 2019

* Finalement, tu utilises la librairie ASL distribuée par AMPL pour lire les nl, n'est-ce pas? Tu as fait quelques patchs sur ces librairies distribuées par AMPL si j'ai bien compris, n'est-ce pas?

oui c'est ça. Mais, j'ai du bien modifié les script d'install de AMPL pour que ça marche (bug dans les option, rename des librairies, ajoute d'option PREFIX,....)

* Au final, lit-on des .ampl ou des .nl?

On peut faire les deux.

  • Soit on fait un fichier .ampl ou .mod comme j'ai mis dans mon précédent message, puis:
    ampl monfichier.mod

et la résolution s'affiche

  • soit on génére un .nl avec ampl, puis on fait:
    ibexoption monfichier.nl
* Joli d'avoir réussi à passer les options ibexopt à AMPL !!! Gilles a pris note et reconnais sa faute de débutant de répartir des options par défaut dans les 100000 lignes de code ;) Il corrige cela au plus vite :)

pas bien 👎 :-D

On souhaite faire des tests sur l'ensemble des benchs. L'idée serait de prendre un fichier mbx, de le ré-écrire en ampl, d'utiliser le plugin pour le relire encore une fois, et finalement de comparer les deux sorties du solver. Comme tu es à fond dans AMPL, voudrais-tu bien écrire la fonction System::to_AMPL() membre de la classe System et qui écrit fichier AMPL dans une chaîne de caractère? Tu pourrais fortement t'inspirer de System::minibex() qui est très simple... De notre coté, on ferait l'exécutable qui lit, converti, résout et compare les sorties.

oui ça peut se faire.

là je suis en train de récupérer les noms de variable depuis le .nl pour les avoir dans le System Ibex pour corriger le bug ibex-team/ibex-lib#351

Pour la relecture, je ne suis pas entierement satisfait des noms des options, ce n'est pas très compatible avec ce que font les autres (voir le dossier doc dans amplide lorsque l'on installe la version gratuite ).
De même, est-ce que les messages de retour aux utilisateurs sont satisfaisants?

a+

@Jordan08
Copy link
Member Author

Jordan08 commented Jun 6, 2019

J'ai ajouté la récupération des nom de variables, de contraintes et de fonction objectif.
Il suffit de rajouter l'option suivante dans le .mod avant de générer le .nl
option ibexopt_auxfiles rc;

Jordan08 referenced this issue in ibex-team/ibex-lib Jun 6, 2019
@Jordan08
Copy link
Member Author

Jordan08 commented Jun 6, 2019

J'ai commencé System::toAmpl(). Les variables et definition générale du problème ont besoin d'être testé...
Mais surtout, il faut faire Function::toAmpl() et Expr2Ampl().... C'est plus compliqué que prévu....
Car, les produits Matrice-Matrice et Matrice-Vecteur n'existent pas en Ampl... il faut les développer....
Donc, to continue...

@gchabert gchabert transferred this issue from ibex-team/ibex-lib Mar 25, 2020
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

No branches or pull requests

2 participants