web-dev-qa-db-fra.com

Python Programmation linéaire en nombres entiers mixtes

Existe-t-il un résolveur de programmation linéaire à nombres entiers mixtes (MILP) pour Python?

GLPK peut-il python résoudre le problème MILP? J'ai lu qu'il peut résoudre le problème du nombre entier mixte.
Je suis très nouveau en problème de programmation linéaire. Donc, je suis plutôt confus et je ne peux vraiment pas différencier si la programmation mixte en nombres entiers est différente de la programmation linéaire en nombres entiers mixtes (MILP).

65
asun

Pulp est un python interface de modélisation reliée à des solveurs tels que [~ # ~] cbc [~ # ~] (source ouverte), [~ # ~] cplex [~ # ~] (commercial), Gurobi (commercial), XPRESS-MP (commercial) et [~ # ~] yalmip [~ # ~] (source ouverte).

Vous pouvez également utiliser Pyomo pour modéliser le problème d'optimisation, puis appeler un solveur externe, à savoir CPLEX, Gurobim GLPK et l'AMPL. bibliothèque de solveur.

Vous pouvez également appeler GLPK depuis GLPK/Python , PyGLPK ou PyMathProg .

Encore un autre langage de modélisation est [~ # ~] cmpl [~ # ~] , qui a python pour les solveurs MIP (uniquement pour les programmes linéaires).

Tous les solveurs ci-dessus résolvent Programmes entiers mixtes linéaires , alors que certains d'entre eux (CPLEX, GUROBI et XRESS-MP bien sûr) peut résoudre programmes entiers mixtes quadratiques et programmes quadratiques à contraintes quadratiques (ainsi que des programmes coniques, mais va probablement au-delà de la portée de cette question).

MIP fait référence à des programmes entiers mixtes, mais il est couramment utilisé pour faire référence à des programmes linéaires uniquement. Pour préciser la terminologie, il convient de toujours se référer à MILP ou MINLP (Programmation non linéaire en nombres entiers mixtes).

Notez que CPLEX et GUROBI ont également leurs propres API python, mais ils (et aussi) XPRESS-MP sont des produits commerciaux, mais gratuits pour la recherche universitaire. CyLP est similaire à Pulp ci-dessus mais s'interface avec les solveurs COIN-OR CBC, CGL et CLP.

Notez que il y a une grande différence dans les performances des solveurs commerciaux et libres : ces derniers sont largement en retard par rapport à ceux-là. [~ # ~] scip [~ # ~] est peut-être le meilleur solveur non-commercial (voir ci-dessous pour une mise à jour). Son python, PySCIPOpt, est ici .

Regardez aussi this SO question .

Enfin, si vous êtes intéressé par un simple résolveur de contraintes (pas d'optimisation), jetez un œil à python-constraint .

J'espère que ça aide!

[~ # ~] met à jour [~ # ~]

Plus de solveurs et python interfaces qui sont tombées dans mon radar:

MIPCL , qui semble être l'un des plus rapides Le solveur MIP non commercial le plus rapide a un interface python qui a assez bonne documentation . Notez cependant que l'API Python n'inclut pas les fonctionnalités avancées fournies avec le natif MIPCLShell . J'aime particulièrement le manuel MIPCL-PY , qui présente un ensemble de modèles utilisés dans Operations Management, en plus de quelques implémentations à petite échelle. Il s’agit d’un manuel d’introduction très intéressant en soi, quel que soit le solveur ou l’API à utiliser.

Outils d’optimisation Google , qui inclut une multitude de fonctionnalités, telles que

  • Un solveur de programmation par contraintes et un solveur de programmation linéaire ( pas MIP)
  • Une interface pour les solveurs MIP (supporte CBC, CLP, GLOP, GLPK, Gurobi, CPLEX et SCIP)
  • Algorithmes spécialisés pour les graphiques, pour le problème de voyageur de commerce, le problème de routage de véhicule et pour les problèmes de remplissage et de sac à dos

Il a une documentation complète de plusieurs OR problèmes classiques et d’implémentations simples). Je n’ai pas trouvé de documentation complète Python API, bien qu’il existe quelques exemples ici Il m'est difficile de comprendre comment d’autres solveurs se connectent à l’interface et si les méthodes de ces solveurs sont disponibles.

CVXOPT , un paquet open source d'optimisation convexe, qui s'interface avec GLPK (open source) et MOSEK (commercial). Il est polyvalent, car il peut traiter de nombreuses classes de problèmes (notamment linéaire, de second ordre, semi-défini, convexe non linéaire). Le seul inconvénient est qu'il peut être fastidieux de modéliser des problèmes complexes, car l'utilisateur doit transmettre les données de manière "matlab-y" (c'est-à-dire pour spécifier la matrice, les vecteurs rhs, etc.). Cependant, il peut être appelé depuis les interfaces de modélisation PICOS et ...

CVXPY , un langage d'optimisation intégré à Python pour les problèmes d'optimisation convexe, qui contient CVXOPT comme solutionneur par défaut, mais il peut se connecter à - les solveurs MIP habituels .

Merci à RedPanda pour avoir signalé que CVXOPT/CVXPY supportez également les solveurs MIP.

Pour un article très complet sur les capacités de modélisation d'optimisation des packages et des langages orientés objet (non limité à Python), cochez la case cet article .

115
Ioannis