Ganzzahlprogrammierung in Python
Ein ganzzahliges Programmierproblem ist ein Problem, das konstruiert wurde, um eine mathematische Optimierung oder Durchführbarkeit sicherzustellen, indem vorausgesetzt wird, dass einige oder alle an dem Problem beteiligten Variablen ganze Zahlen sind.
Angenommen, einige Entscheidungsvariablen in dem Problem sind nicht diskret. In diesem Fall werden sie als gemischt-ganzzahliges Problem klassifiziert, besser bekannt als MIP/MILP
(Mixed-Integer Linear Programming).
In diesem Python-Artikel werden wir also die verschiedenen Methoden und Bibliotheken untersuchen, die wir verwenden können, um diese Art von Problemen in Python zu lösen.
Probleme bei der Programmierung von gemischten Ganzzahlen in Python
Ein gemischt-ganzzahliges Programmierproblem (MIP
) ist ein Problem, bei dem sichergestellt ist, dass einige Entscheidungsvariablen für eine optimale Lösung streng ganzzahlige Werte sind.
Die Verwendung dieser ganzzahligen Variablen erweitert den Horizont und die Anzahl hilfreicher Optimierungsprobleme, die ein Programmierer verwenden kann, um sie am effizientesten und genauesten zu definieren und zu lösen.
Ein wesentliches Szenario in MIP
ist die als binär betrachtete Entscheidungsvariable; mit anderen Worten, es kann nur entweder als 0
oder 1
dargestellt werden.
Diese werden normalerweise als binäre Ganzzahlwerte bezeichnet. Diese Entscheidungsvariablen werden typischerweise verwendet, um Richtig
/False
- oder Ja
/Nein
-Entscheidungen auf der Grundlage sorgfältiger Berechnungen zu modellieren.
Jetzt gibt es mehrere Solver, die für diese Art von Problemen entwickelt wurden.
Dazu gehören die hochmodernen Gurobi
und Python-MIP
, die zu den bekanntesten und gefragtesten Lösern für gemischt-ganzzahlige lineare Programmierung gehören.
Ein weiterer hochgradig konfigurierbarer MIP
-Solver ist der CBC
- oder COIN-OR Branch-&-Cut
-Solver. Schließlich macht Python-MIP
die Entwicklung leistungsstarker, MIP-basierter Solver für jede kundenspezifische Anwendung einfach.
Es bietet hochwertige und moderne Funktionen, die unten ausführlich beschrieben und erklärt werden.
Python-Tools für MIP/MILP
: Python-MIP
In Python haben wir eine riesige Bibliothek namens MIP
, im Wesentlichen eine Sammlung von Python-basierten Werkzeugen zum Modellieren und Lösen von gemischt-ganzzahligen linearen Programmierproblemen.
Mit einer stark von Pulp
inspirierten Syntax bietet MIP
den Benutzern Zugang zu erweiterten und effizienten Funktionen wie lazy constraints
, MIPstart
, solution pools
und cut generation
.
Weitere herausragende Merkmale sind:
-
Modellierung auf hohem Niveau
Die meisten Programmierer haben ihre Fähigkeiten in der Modellierung mit einer höheren Programmiersprache entwickelt, da es einfach ist. Unsere
MIP-Modelle
können wir aber schnell in Python schreiben.Die Funktion zum Überladen von Operatoren macht den gesamten Prozess des Schreibens linearer Ausdrücke in Python viel reibungsloser.
-
Vollgepackt mit Funktionen
Mit Funktionen wie
cut generators
undlazy constraints
kann ein Programmierer mit soliden Formulierungen arbeiten, die viele Constraints verwenden.Es erzeugt nur die Ungleichungen, die während der
branch and cut
-Suche benötigt werden. Anschließend können Sie denLösungspool
abfragen, um die während der Suche gefundenen erstklassigen Lösungen zu extrahieren oder durchzugehen.MIPstart
ermöglicht es einem Programmierer zudem, zunächst mit einer problemabhängigen Heuristik praktikable Lösungen für dieMIP
-Suche zu erstellen. -
Schnell & Effizient
Das
MIP
-Paket in Python macht mit demCFFI-Modul
einen direktenAufruf
an die native dynamisch ladbare Bibliothek des bereits installierten Solvers.Diese Modelle werden effizient gespeichert und vom Solver effizient gemacht. Währenddessen befasst sich
MIP
mit der Kommunikation mit Ihrem Code. Während die offizielleGurobi
-Python-Schnittstelle auch Funktionen zur Handhabung vonMILP
bereitstellt, ist dieMIP
-Bibliothek in Python mitPypy
kompatibel.Es kann
25
Mal schneller laufen als es, da seine Leistung nur aufCPython
basiert. -
Mehrfach lösen
MIP
in Python wurde so konstruiert, dass es gründlich in dieC-basierten Bibliotheken
desCOIN-OR Branch-&-Cut
-Solvers undGurobi
integriert werden kann.Mit
MIP
müssen Sie sich keine Gedanken darüber machen, ein Mittel zur Kommunikation zwischen verschiedenen Solvern zu schreiben, da dies in derPython-MIP
-Bibliothek behandelt wird.Sie müssen nur einen einzigen Solver-unabhängigen Code schreiben.
-
Ausgestattet mit den neuesten Python-Versionen
Wie oben erwähnt, ist
MIP
mit den Python-Versionen 3.6 und höher kompatibel, sodass wir uns keine Gedanken über Redundanz machen müssen, die Sie ausbremst.
Jetzt wissen Sie, was gemischt-ganzzahlige Programmierung ist und welche verschiedenen Solver verfügbar sind, um Sie durch alle Probleme der ganzzahligen Programmierung zu führen, die möglicherweise auf die effizienteste und sinnvollste Weise gelöst werden müssen.
Sie können auch die offizielle Dokumentation für alle genannten Solver durchsuchen, um Lösungen für Ihr spezifisches Problem zu finden.
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn