Ein Python-Paket, das lineare Planungsprobleme löst. https://code.google.com/p/pulp-or/ https://pythonhosted.org/PuLP/index.html
Das lineare Planungsproblem ist ein Optimierungsproblem, bei dem die Zielfunktion und die Einschränkungen durch lineare Ausdrücke ausgedrückt werden. Zum Beispiel
Ist eines der linearen Planungsprobleme.
Seit es auf der PyConJP 2014 vorgestellt wurde, als ich untersuchte, wie man es benutzt, Es ist ziemlich einfach zu bedienen, also habe ich es zusammengefasst.
sudo pip install pulp
Dies drückt alle Probleme aus. Wählen Sie für den Konstruktor den Namen des Problems und ob die Zielfunktion minimiert oder maximiert werden soll.
import pulp
problem = pulp.LpProblem('Problem Name', pulp.LpMinimize) #Beim Minimieren
problem = pulp.LpProblem('Problem Name', pulp.LpMaximize) #Beim Maximieren
Erstellen Sie Variablen zur Verwendung in der linearen Planung. Es gibt zwei Möglichkeiten, es zu schaffen. Sie werden häufig 2 verwenden, wenn Sie eine große Anzahl von Variablen haben.
(1) Machen Sie eins nach dem anderen
pulp.LpVariable('name', 0, 1, 'Continuous')
Die Variablen sind von vorne geordnet
Mit diesem Code können Sie eine Variable generieren, die mit dem Variablennamen einen fortlaufenden Wert von 0 bis 1 annimmt.
(2) Übergeben Sie die Liste und machen Sie alles zusammen
var = pulp.LpVariable.dicts('VAR', ([1,2,3], ['a', 'b']), 0, 1, 'Continuous')
Die Variablen sind von vorne geordnet
3-5 ist das gleiche wie zuvor.
Wenn dieser Code ausgeführt wird, werden fortlaufende Werte mit einem Minimalwert von 0 und einem Maximalwert von 1 angenommen. Sie können ein Wörterbuch mit den Variablen "VAR_1_a, VAR_1_b, VAR_2_a, ..." erhalten. Die Zugriffsmethode lautet "var [1] ['a']" wie folgt. Dies wird in einem zukünftigen Artikel verwendet.
Erstellen Sie einen Ausdruck mit Variablen und fügen Sie ihn dem Objekt Mathematical Planning Problem hinzu. ** Das ist erstaunlich.
Zum Beispiel, wenn Sie die Summe von "a" und "b" maximieren möchten
import pulp
problem = pulp.LpProblem('test', pulp.LpMinimize)
a = pulp.LpVariable('a', 0, 1)
b = pulp.LpVariable('b', 0, 1)
problem += a + b
Wenn Sie das Problem in diesem Zustand drucken, wird das Problem angezeigt.
test:
MINIMIZE
1*a + 1*b + 0
VARIABLES
a <= 1 Continuous
b <= 1 Continuous
Machen Sie einen Vergleich mit Variablen und ** fügen Sie ihn einem mathematischen Planungsproblemobjekt hinzu ** Dies ist auch großartig.
Zum Beispiel für die Variablen "a" und "b"
a
ist größer oder gleich 0problem += a >= 0
problem += b >= 0.1
problem += a + b == 0.5
Es konnte nur die Ungleichung (<=, =>) verwendet werden.
problem.solve()
nur das.
Abhängig von den Randbedingungen ist es möglicherweise nicht möglich, das Problem zu lösen. Wenn Sie also das Ergebnis wissen möchten,
status = problem.solve()
print pulp.LpStatus[status]
OK, wenn Optimal in angezeigt wird
Sie können den Wert erhalten, indem Sie die Methode "value" der Variablen aufrufen, die zu "problem" hinzugefügt wurde.
import pulp
problem = pulp.LpProblem('sample', pulp.LpMinimize)
a = pulp.LpVariable('a', 0, 1)
b = pulp.LpVariable('b', 0, 1)
problem += a + b
problem += a >= 0
problem += b >= 0.1
problem += a + b == 0.5
status = problem.solve()
print "Status", pulp.LpStatus[status]
print problem
print "Result"
print "a", a.value()
print "b", b.value()
Ergebnis ist,
Status Optimal
sample:
MINIMIZE
1*a + 1*b + 0
SUBJECT TO
_C1: a >= 0
_C2: b >= 0.1
_C3: a + b = 0.5
VARIABLES
a <= 1 Continuous
b <= 1 Continuous
Result
a 0.4
b 0.1
Recommended Posts