ibex-team / ibex-lib

IBEX is a C++ library for constraint processing over real numbers.
http://ibex-team.github.io/ibex-lib/
GNU Lesser General Public License v3.0
67 stars 51 forks source link

soplex4.0.2 warning messages #440

Open bneveu opened 4 years ago

bneveu commented 4 years ago

Avec la nouvelle version de soplex (4.0.2) sous master , il y a assez souvent des warnings , mais les résultats restent corrects. par exemple ../../../bin/ibexopt ../benchs/coconutbenchmark-library1/ex5_4_4.bch -a 1.e-6 -r 1.e-6

**** setup **** file loaded: ../benchs/coconutbenchmark-library1/ex5_4_4.bch rel-eps-f: 1.00001e-06 (relative precision on objective) abs-eps-f: 1.00001e-06 (absolute precision on objective) output COV file: ../benchs/coconutbenchmark-library1/ex5_4_4.cov


running............

warning: LPSolver: solve status is an internal Soplex status (-4). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-8). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-8). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-8). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-4). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-8). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-4). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-4). This is probably an error for you. warning: LPSolver: solve status is an internal Soplex status (-4). This is probably an error for you. optimization successful!

f* in [10077.7670795,10077.7771573] (best bound)

x* = (52.8572469821 ; 30.000000009 ; 10.0000006796 ; 59.999149538 ; 10.000000009 ; 22.8572470224 ; 35.000063753 ; 35.0000637711 ; 0.000148849827294 ; 34.9999149302 ; 0 ; 9.99993625609 ; 10.000085115 ; 9.08803698963e-09 ; 0 ; 10.0000850969 ; 0 ; 34.9999149392 ; 0 ; 0 ; 34.9999149302 ; 100 ; 157.142753027 ; 100.000850472 ; 199.99999933 ; 157.142752987 ; 200) (best feasible point)

relative precision on f: 9.99999999831e-07 [passed] absolute precision on f: 0.0100777670778 cpu time used: 71.4037020001s number of cells: 6348


en version ibex 2.8.6

./../../bin/ibexopt ../benchs/coconutbenchmark-library1/ex5_4_4.bch -a 1.e-6 -r 1.e-6

**** setup **** file loaded: ../benchs/coconutbenchmark-library1/ex5_4_4.bch rel-eps-f: 1.00001e-06 (relative precision on objective) abs-eps-f: 1.00001e-06 (absolute precision on objective) output COV file: ../benchs/coconutbenchmark-library1/ex5_4_4.cov


running............

optimization successful!

f* in [10077.7657294,10077.7758071] (best bound)

x* = (52.8571708274 ; 30.000000008 ; 10.0000006731 ; 59.9997714408 ; 10.00000001 ; 22.8571708684 ; 35.0000171083 ; 35.0000171268 ; 4.00135336065e-05 ; 34.9999771212 ; 1.00000000001e-09 ; 9.99998289973 ; 10.0000229233 ; 1.00000000001e-09 ; 1.00000000001e-09 ; 10.0000229123 ; 1.00000000001e-09 ; 34.9999771322 ; 1.00000000001e-09 ; 8.4399651712e-09 ; 34.9999771138 ; 100.000000002 ; 157.142829182 ; 100.000228569 ; 199.999999336 ; 157.142829141 ; 200) (best feasible point)

relative precision on f: 9.99999999696e-07 [passed] absolute precision on f: 0.0100777657263 cpu time used: 82.8421680001s number of cells: 6178

gchabert commented 4 years ago

Effectivement, il y a ces warnings qui apparaissent. Ils ne sont pas gênants fondamentalement dans la mesure où il s'en produit relativement peu et ne sont pas non plus si surprenants car les bouts de code qui bloquaient l'appel au solveur LP (sur des critères arbitraires de diamètre) ont été retirés (ce qui est une bonne chose). Mais c'est vrai que ça pollue l'affichage. D'un autre côté, on pense, Antoine et moi, qu'il n'est pas bon de les ignorer complètement car le jour où il s'en produira vraiment en pagaille sur un bench, on passera à côté.

Je propose d'ajouer une option --stats à ibexsolve et ibexopt qui servira pour l'utilisateur averti à afficher un certains nombre de statistiques fines sur la résolution, au delà du simple nombre de cellules. On pourrait mettre comme première information le nombre d'échecs du solveur LP.

bneveu commented 4 years ago

Ces messages sont fréquents dans les problèmes de la serie 2 de coconut (en moyenne dans un problème sur 2) et il y a parfois des pages entières de tels messages. dixchlng.nl, dualc1 , hs093, ...

Il faudrait remettre une limite à l'appel de soplex, si cela permet de supprimer ces messages.

Par ailleurs le problème linear.bch (qui comprend des valeurs absolues dans l'objectif) , n'est plus résolu avec compo et art ; il reste résolu avec xn.

amarendet commented 4 years ago

Il semblerait que certains problèmes viennent du multistart. Lorsque je force SoPlex a revenir à recalculer une nouvelle base de départ à chaque solve(), je n'ai plus de warning (en tout cas sur ex5_4_4 et dualc1). Par contre les performances sont catastrophiques... Et encore des warnings sur dixchlng et hs093.

amarendet commented 4 years ago

Il y a définitivement quelque chose d'étrange : ces status (-4) et (-8) n'apparaissent que lorsqu'on "restart" le solveur après avoir modifié les bornes. Sur une nouvelle instance ou je copie exactement les données du premier, le solveur retourne bien UNFEASIBLE ou OPTIMAL. J'ai envoyé un mail sur la mailing liste SoPlex pour en avoir le coeur net.

gchabert commented 4 years ago

Bertrand,

Il faudrait remettre une limite à l'appel de Soplex, si cela permet de supprimer ces messages.

Je voudrais clarifier les choses: dans la version antérieure (ibex 2.8.6), on n'affichait aucun message lorsque le solveur LP échouait. La limite sur le diamètre permettait d'éviter certains échecs mais il pouvait s'en produire beaucoup d'autres silencieusement (dans la nouvelle version, on ne laisse rien passer). J'ai fait le test de résoudre le problème ex5_4_4.bch que tu mentionnes plus haut avec ibex 2.8.6 en faisant afficher cette fois le nombre de fois où le solveur LP plante. Résultat: j'ai 365 messages alors que dans la version actuelle on n'en a que 9, et ce, sans filtrer les appels. Je pense donc que la nouvelle version est beaucoup plus stable et qu'il n'est pas utile de rétablir le test sur le diamètre.

Je propose de mettre en commentaire temporairement malgré tout les warnings et de laisser le ticket ouvert jusqu'à ce que l'option --stats soit implémentée.

Par ailleurs le problème linear.bch (qui comprend des valeurs absolues dans l'objectif) , n'est plus résolu avec compo et art ; il reste résolu avec xn.

Si c'est le seul bench où la résolution se passe mal, et ce, seulement en utilisant l'arithmétique affine, il s'agit sans doute d'un problème de l'affine et je milite pour ne pas en tenir compte (pour rappel l'arithmétique affine n'est plus officiellement dans ibexopt car non maintenue depuis plus de 3 ans...) De mon côté je note des améliorations avec soplex 4, par exemple, 15% sur sambal.bch.

Donc je propose de faire la nouvelle release, est-ce que tu es d'accord?

bneveu commented 4 years ago

Salut,

C'est d'accord pour la nouvelle release (en n'affichant pas les warnings de soplex).