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

Add bisector option in ibexopt #540

Open cyrilbouvier opened 7 months ago

cyrilbouvier commented 7 months ago

Backported code from qibex branch of @bneveu 's repo: https://github.com/bneveu/ibex-lib/tree/qibex

This code add a bisector option in ibexopt.

Notes:

gchabert commented 7 months ago

Désolé, je ne suis pas favorable à l'ajout de cette nouvelle option. ibexopt (contrairement à optimizer04 par exemple) est conçu pour être l'optimiseur par défaut utilisable par un non-expert en optimisation globale. Toutes les options actuellement définies dans ibexopt sont des options qui sont compréhensibles par l'utilisateur et qui "concernent" l'utilisateur, c.a.d., des options qui sont relatives aux propriété des résultats qu'il attend (précision sur l'objectif, rigueur dans la satisfaction des égalités, etc.). Là il s'agit d'une option relative au mécanisme de résolution, c'est très différent.

bneveu commented 7 months ago

Je pense que c'est intéressant de pouvoir changer de bissecteur dans ibexopt , sans passer par l'optimiseur générique. Le bissecteur par défaut est en effet le paramètre le moins robuste : par exemple, kall_congruentcircles_c71 n'est pas résolu avec le bissecteur par défaut lsmear en 7200s et est résolu avec smearsum en 78s. C'est encore plus vrai pour les problèmes minlp. Des optimiseurs comme SCIP ou gurobi sous AMPL donnent accès à de nombreux paramètres , dont certains sont algorithmiques, par exemple SCIP permet de paramétrer la bissection sur les variables binaires par le paramètre branch:preferbinary (preferbinary) 0/1: whether branching on binary variables should be preferred

gchabert commented 7 months ago

Oui, tu as raison; et on pourrait proposer dans l'aide une option --advanced qui indiquerait les paramètres algorithmiques, histoire de ne pas noyer l'utilisateur lambda. Mais du coup, pourquoi ne pas avoir carrément un seul optimiseur?