[PYTHON] Lineare Programmierung mit PuLP

Ich studiere nichtlineare Programmierung, um den Kernel zu verstehen und so weiter. Vorher wollte ich meine Hände mit der linearen Programmiermethode bewegen, also habe ich versucht, PuLP zu verwenden, das kostenlos verwendet werden kann.

Dieses Mal habe ich das Beispiel in Kapitel 6 von "Optimierungsmathematik, die verstanden werden kann", lineare Programmierung, gelöst.

Da es mehrere ähnliche Beispiele gibt, habe ich sie aufgenommen und mit PuLP modelliert.

Beispiel 6.2

Verwenden Sie die Maschinen M1 und M2, um zwei Arten von Behältern A und B herzustellen. Sie müssen M1 2 Minuten und M2 4 Minuten lang verwenden, um einen Behälter A herzustellen. Stellen Sie andererseits einen Behälter B her. Es ist jedoch erforderlich, die Maschine M1 8 Minuten und die Maschine M2 4 Minuten lang zu verwenden. Die Gewinne für die Herstellung der Behälter A und B betragen 29 Yen bzw. 45 Yen. So planen Sie die Maximierung der Gewinne Sollte ich es tun?

Wenn der Gewinn durch Abfragen der Zielfunktion f und der Anzahl der Container durch Abfragen von x bzw. y modelliert wird, lautet die Formel wie folgt. Einschränkungen: 2x + 8y <= 60 4x + 4y <= 60 x >= 0, y >= 0

Zielfunktion: f = 29x + 45y → max

Der Code zum Lösen dieser Formeln durch Eintauchen in PuLP ist unten aufgeführt. Da diesmal die Anzahl der Container berechnet wird, ist die Lösung eine Ganzzahl und die Variable wird durch eine Ganzzahl angegeben.

#Creat variables
x = pulp.LpVariable("x", cat = "Integer")
y = pulp.LpVariable("y", cat = "Integer")

#Create object function
problem = pulp.LpProblem("Container", pulp.LpMaximize)
problem += 29*x + 45*y  #(6.6)

#constrained condition
problem += 2*x + 8*y <= 60 #(6.4)
problem += 4*x + 4*y <= 60 #(6.4)
problem += x >= 0 #(6.5)
problem += y >= 0 #(6.5)

status = problem.solve()
print "Status", pulp.LpStatus[status]

print problem

print "Result"
print "x", x.value()
print "y", y.value()

Ergebnis ist,

Status Optimal
Container:
MAXIMIZE
29*x + 45*y + 0
SUBJECT TO
_C1: 2 x + 8 y <= 60
_C2: 4 x + 4 y <= 60
_C3: x >= 0
_C4: y >= 0

VARIABLES
x free Integer
y free Integer

Result
x 10.0
y 5.0

Beispiel 6.3

Zwei Arten von Legierungen A und B werden unter Verwendung von zwei Arten von Metallen M1 und M2 hergestellt. Die Legierungen A und B haben einen Gewinn von 30.000 Yen bzw. 25.000 Yen pro Tonne. Legierung A mischt die Metalle M1 und M2 im Verhältnis 1: 1 und Legierung B mischt die Metalle M1 und M2 im Verhältnis 1: 3. Die Metalle M1 und M2 können mit 10 Tonnen bzw. 15 Tonnen pro Tag geliefert werden. So planen Sie die Herstellung der Legierungen A und B, um den Gewinn zu maximieren.

Wenn modelliert, Einschränkungen: 0.5x + 0.25y <= 10 0.5x + 0.75y <= 15 x >= 0, y >= 0

Zielfunktion: f = 30x + 25y → max

Dieses Mal ist die Lösung beim Codieren ein kontinuierlicher Wert, daher wird die Variable als kontinuierlich angegeben.

#Creat variables
x = pulp.LpVariable("x", cat = "Continuous")
y = pulp.LpVariable("y", cat = "Continuous")

#Create object function
problem = pulp.LpProblem("Alloy", pulp.LpMaximize)
problem += 30*x + 25*y  #(6.9)

#constrained condition
problem += 0.5*x + 0.25*y <= 10 #(6.7)
problem += 0.5*x + 0.75*y <= 15 #(6.7)
problem += x >= 0 #(6.8)
problem += y >= 0 #(6.8)

status = problem.solve()
print "Status", pulp.LpStatus[status]

print problem

print "Result"
print "x", x.value()
print "y", y.value()

Ergebnis ist,

Status Optimal
Alloy:
MAXIMIZE
30*x + 25*y + 0
SUBJECT TO
_C1: 0.5 x + 0.25 y <= 10
_C2: 0.5 x + 0.75 y <= 15
_C3: x >= 0
_C4: y >= 0

VARIABLES
x free Continuous
y free Continuous

Result
x 15.0
y 10.0

Beispiel 6.7

Wenn die Zielfunktion abweicht und die optimale Lösung nicht wie in diesem Beispiel vorhanden ist, wird "Status Unbounded" wie unten gezeigt angezeigt.

Einschränkungen: -x - y <= -1 -2x + y <= 1 x - 2y <= 1 x >= 0, y >= 0

Zielfunktion: f = x + y → max

#Creat variables
a = pulp.LpVariable("a", cat = "Continuous")
b = pulp.LpVariable("b", cat = "Continuous")

#Create object function
problem = pulp.LpProblem("Test", pulp.LpMaximize)
problem += a + b  #(6.16)

#constrained condition
problem += -a - b <= -2 #(6.14)
problem += -2*a + b <= 15 #(6.14)
problem += a - 2*b <= 15 #(6.14)
problem += a >= 0 #(6.15)
problem += b >= 0 #(6.15)

status = problem.solve()
print "Status", pulp.LpStatus[status]

print problem

Status Unbounded

Recommended Posts

Lineare Programmierung mit PuLP
Lineare Programmierung + Hands-on von Zellstoff
[Mathematisches Optimierungsproblem] Lineare Programmiermethode mit PuLP
Erste Schritte zur Lösung linearer Planungsprobleme mit PuLP
Lineare Regression mit Statistikmodellen
3. 3. KI-Programmierung mit Python
Mit OR-Tools erlernte Optimierung [Lineare Planung: Mehrstufiges Modell]
Python-Programmierung mit Atom
Wettbewerbsfähige Programmierung mit Python
Shader-Programmierung mit pyOpenGL
Löse Mathe mit PuLP
Regression mit einem linearen Modell
Asynchrone Programmierung mit libev
Programmieren mit Python Flask
Asynchrone Programmierung mit libev # 3
Mit OR-Tools erlernte Optimierung [Lineare Planung: Projektmanagement]
Mit OR-Tools erlernte Optimierung [Linearer Plan: Lassen Sie uns Öl raffinieren]
Programmieren mit Python und Tkinter
Versuchen Sie, mit einer Shell zu programmieren!
Versuchen Sie die GUI-Programmierung mit Hy
Koordinator und ganzzahliger linearer Plan
Programmier-Lernspiel mit SenseHAT
[Python] Lineare Regression mit Scicit-Learn
Lineare Programmiermethode nach Automarkierungsmethode
Netzwerkprogrammierung mit Python Scapy
Robuste lineare Regression mit Scikit-Learn
[Python] Mit Pokemon erlernte objektorientierte Programmierung
Einfache Python + OpenCV-Programmierung mit Canopy
Lineare Regression mit Student's t-Verteilung
Programmierung für Menschen mit einem genau definierten __repr__
Wettbewerbsprogrammierung mit Python Lokale Umgebungseinstellungen
Lineare Algebra zur Programmierung Kapitel 4 (eindeutige Werte, Eigenvektoren)
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Führen Sie Embedded-Programmierung mit testgetriebener Entwicklung mit googletest durch
Soundprogrammierung mit Go (Super-Einführungslevel)
Was Sie mit Programmierkenntnissen machen können