Gibt es einen MILP-Löser (Mixed Integer Linear Programming) für Python?
Kann GLPK Python das MILP-Problem lösen? Ich habe gelesen, dass es das Problem der gemischten Ganzzahl lösen kann.
Ich bin sehr neu im linearen Programmierproblem. Ich bin also ziemlich verwirrt und kann nicht wirklich unterscheiden, ob sich Mixed Integer Programming von Mixed Integer Linear Programming (MILP) unterscheidet.
python
linear-programming
glpk
integer-programming
eine Sonne
quelle
quelle
Antworten:
Pulp ist eine Python-Modellierungsschnittstelle, die sich mit Solvern wie CBC (Open Source), CPLEX (kommerziell), Gurobi (kommerziell), XPRESS-MP (kommerziell) und YALMIP (Open Source) verbindet.
Sie können Pyomo auch verwenden , um das Optimierungsproblem zu modellieren und dann einen externen Solver aufzurufen, nämlich CPLEX, Gurobi GLPK und die AMPL-Solver-Bibliothek.
Sie können GLPK auch über GLPK / Python , PyGLPK oder PyMathProg aufrufen .
Eine weitere Modellierungssprache ist CMPL , die über eine Python-Schnittstelle für MIP-Solver verfügt (nur für lineare Programme).
Alle oben genannten Löser lösen gemischte ganzzahlige lineare Programme , während einige von ihnen (CPLEX, GUROBI und XRESS-MP sicher) gemischte ganzzahlige quadratische Programme und quadratisch beschränkte quadratische Programme (und auch konische Programme ) lösen können, aber dies geht wahrscheinlich über den Rahmen hinaus Frage).
MIP bezieht sich auf gemischte Ganzzahlprogramme, wird jedoch üblicherweise nur für lineare Programme verwendet. Um die Terminologie genauer zu machen, sollte man immer auf MILP oder MINLP (Mixed Integer Non-Linear Programming) verweisen.
Beachten Sie, dass CPLEX und GUROBI auch ihre eigenen Python-APIs haben, aber sie (und auch) XPRESS-MP sind kommerzielle Produkte, aber für akademische Forschung kostenlos. CyLP ähnelt Pulp oben, ist jedoch mit den COIN-OR-Lösern CBC, CGL und CLP verbunden.
Beachten Sie, dass es einen großen Unterschied in der Leistung von kommerziellen und freien Lösern gibt : Letztere fallen mit großem Abstand hinter die ersteren zurück. SCIP ist
möglicherweise der beste nichtkommerzielle Löser(siehe unten für ein Update). Die Python-Schnittstelle PySCIPOpt ist hier .Schauen Sie sich auch diese SO-Frage an .
Wenn Sie sich für einen einfachen Constraint-Solver (keine Optimierung) interessieren, schauen Sie sich schließlich die Python-Constraint an .
Ich hoffe das hilft!
AKTUALISIERUNG
Weitere Löser und Python-Schnittstellen, die in mein Radar gefallen sind:
MIPCL ,
einer der schnellsten undschnellsten nichtkommerziellen MIP-Löser, verfügt über eine Python-Oberfläche mit einer recht guten Dokumentation . Beachten Sie jedoch, dass die Python-API nicht die erweiterten Funktionen enthält, die mit der nativen MIPCLShell geliefert werden . Besonders gut gefällt mir das MIPCL-PY-Handbuch , das neben einigen kleinen Implementierungen eine Reihe von Modellen zeigt, die im Operations Management verwendet werden. Es ist ein sehr interessantes Einführungshandbuch für sich, unabhängig davon, welchen Solver / welche API man verwenden möchte.Google-Optimierungstools , die eine Vielzahl von Funktionen enthalten, z
Es verfügt über eine umfassende Dokumentation mehrerer traditioneller OP-Probleme und einfacher Implementierungen. Ich konnte keine vollständige Python-API-Dokumentation finden, obwohl es hier einige Beispiele gibt . Es ist mir etwas unklar, wie sich andere Löser an die Schnittstelle anschließen und ob Methoden dieser Löser verfügbar sind.
CVXOPT , ein Open-Source-Paket zur konvexen Optimierung, das mit GLPK (Open Source) und MOSEK (kommerziell) verbunden ist. Es ist vielseitig einsetzbar, da es viele Problemklassen angehen kann (insbesondere lineare, semidefinite, konvexe nichtlineare, zweiter Ordnung). Der einzige Nachteil besteht darin, dass die Modellierung komplexer Probleme umständlich sein kann, da der Benutzer die Daten in einer "Matlab-y" -Methode übergeben muss (dh um die Matrix, die rhs-Vektoren usw. anzugeben). Es kann jedoch über die Modellierungsschnittstellen PICOS und ...
CVXPY , eine in Python eingebettete Optimierungssprache für konvexe Optimierungsprobleme, die
CVXOPT
als Standardlöser enthalten ist, aber mit den üblichen MIP-Lösern verbunden werden kann .Vielen Dank an RedPanda für den Hinweis, dass auch
CVXOPT/CVXPY
MIP-Löser unterstützt werden.Für einen sehr umfassenden Artikel über Optimierungsfunktionen von Paketen und objektorientierten Sprachen (nicht beschränkt auf Python) Modellierung, überprüfen Sie diesen Artikel .
quelle
cvxopt
undcvxpy
unterstützen auch gemischte Ganzzahlprogrammierung. Hier ist ein Artikel Benchmarkingcvxopt
so viel schneller alspulp
: scaron.info/blog/linear-programming-in-python-with-cvxopt.htmlIch habe das Gekko Python-Paket verwendet, um MILP-Probleme zu lösen. Sie können Ihre Modelle entweder lokal oder auf ihrem Remote-Server lösen.
GEKKO ist ein Python-Paket zum maschinellen Lernen und zur Optimierung von algebraischen Gleichungen mit gemischten Ganzzahlen und Differentialen. Es ist mit groß angelegten Lösern für die lineare, quadratische, nichtlineare und gemischte Ganzzahlprogrammierung (LP, QP, NLP, MILP, MINLP) gekoppelt . Zu den Betriebsmodi gehören Parameterregression, Datenabstimmung, Echtzeitoptimierung, dynamische Simulation und nichtlineare Vorhersagesteuerung. GEKKO ist eine objektorientierte Python-Bibliothek zur Erleichterung der lokalen Ausführung von APMonitor.
quelle