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