Python Mixed Integer Linear Programming


74

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.


7
Ich bin mir nicht sicher, warum die Abstimmung nicht stimmt, aber ich habe tatsächlich stundenlang gesucht und war mir wirklich nicht sicher, ob MILP mit MIP identisch ist.
Asun

Antworten:


137

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 CVXOPTals 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/CVXPYMIP-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 .


Hey, danke für die Antwort. Ich habe viele der von Ihnen geposteten Inhalte durchsucht. Sogar zwei davon (PuLP und GLPK) wurden installiert, bevor dies veröffentlicht wurde. Aufgrund der Benennung war ich ziemlich verwirrt zwischen MILP und MIP. Trotzdem danke für die Klarstellung. Geschätzt.
Asun

3
Übrigens gibt es eine stark verbesserte Python-Schnittstelle für SCIP, die hier zu finden ist: github.com/SCIP-Interfaces/PySCIPOpt
mattmilten

1
cvxoptund cvxpyunterstützen auch gemischte Ganzzahlprogrammierung. Hier ist ein Artikel Benchmarking cvxoptso viel schneller als pulp: scaron.info/blog/linear-programming-in-python-with-cvxopt.html
RedPanda

1
Ich denke nicht, dass Gurobi Open Source ist, wie im ersten Satz der Antwort angegeben.
Oliver Angelil

3
@OliverAngelil Die Komplexität eines MIP-Lösers ist nicht vergleichbar mit der von regulären numerischen Analyse-Subroutinen wie Array-Operationen, Lösen von Gleichungssystemen usw. Dies hat hauptsächlich zwei Gründe. Erstens ist in den Lösern viel historisches Wissen eingebettet, das Jahrzehnte strenger Forschung und implementierungsspezifischer Details umfasst. Zweitens ist die Lösung von MIP-Problemen ein aktives Forschungsgebiet, in dem Wissenschaftler die Grenzen dessen verschieben, was Jahr für Jahr gelöst werden kann. Kommerzielle Löser implementieren die neuen Fortschritte regelmäßig und aktualisieren ihre Versionen etwa einmal pro Jahr.
Ioannis

3

Ich 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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.