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 und schnellsten 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
- Ein Constraint-Programmierlöser und ein linearer Programmierlöser ( nicht MIP )
- Eine Schnittstelle für MIP-Löser (unterstützt CBC, CLP, GLOP, GLPK, Gurobi, CPLEX und SCIP)
- Spezialisierte Algorithmen für Diagramme, für das Problem des Handlungsreisenden, das Problem der Fahrzeugführung und für Probleme mit der Verpackung von Behältern und dem Rucksack
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 .