[PYTHON] Erste Schritte zur Lösung linearer Planungsprobleme mit PuLP

Was ist PuLP?

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.

Wie installiert man

sudo pip install pulp

Verfahren

Erstellen Sie ein lineares Planungsproblemobjekt

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 ein variables Objekt

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

  1. Variablenname
  2. Mindestwert der Variablen
  3. Maximalwert der Variablen
  4. Variablentyp. 'Continuous' für Floats, 'Integer' für Ganzzahlen, 'Binary' für Binärvariablen

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

  1. Präfix des Variablennamens
  2. Ein Tupel einer Liste von Postfixes mit Variablennamen
  3. Mindestwert der Variablen
  4. Maximalwert der Variablen
  5. Variablentyp

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 eine Zielfunktion

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

Erstellen Sie Einschränkungen

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"

  1. a ist größer oder gleich 0
  2. "b" ist 0,1 oder mehr
  3. Die Summe von "a" und "b" beträgt 0,5 Wenn Sie eine Einschränkung erstellen möchten
problem += a >= 0
problem += b >= 0.1
problem += a + b == 0.5

Es konnte nur die Ungleichung (<=, =>) verwendet werden.

lösen

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

Holen Sie sich das Ergebnis.

Sie können den Wert erhalten, indem Sie die Methode "value" der Variablen aufrufen, die zu "problem" hinzugefügt wurde.

Zusammenfassung

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

Erste Schritte zur Lösung linearer Planungsprobleme mit PuLP
Lineare Programmierung mit PuLP
Wie fange ich mit Scrapy an?
Wie fange ich mit Django an?
Beginnend mit USD unter Windows
Erste Schritte mit Python 3.8 unter Windows
So lösen Sie das Problem des dynamischen Planungsalgorithmus (von Anfängern gesehen)
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Wie man Spaß am Programmieren mit Minecraft hat (Ruby, Python)
Strategie zur Monetarisierung mit Python Java
So installieren Sie OpenGM unter OSX mit Macports
Materialien zum Lesen, wenn Sie mit Python beginnen
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
1.1 Erste Schritte mit Python
Erste Schritte mit Pandas: Grundkenntnisse, an die Sie sich zuerst erinnern sollten
So installieren Sie caffe unter OS X mit Macports
Erste Schritte mit apache2
Erste Schritte mit Python
Erste Schritte mit Django 1
Einführung in die Optimierung
Löse Mathe mit PuLP
Einführung in die Tensorflow-About-Hypothese und die Kosten der linearen Regression
Autoencoder im Chainer (Hinweise zur Verwendung von + Trainer)
Erste Schritte mit Numpy
Erste Schritte mit Spark
Materialien zum Lesen, wenn Sie mit Apache Beam beginnen
Erste Schritte mit Python
Wie man Python auf Android genießt !! Programmieren für unterwegs !!
Erste Schritte mit Pydantic
Erste Schritte mit Jython
Hinweise zum Betrieb von Firefox mit Selen unter Windows
Erste Schritte mit Django 2
[Cyberduck] So tauschen Sie Dateien unter Linux (CentOS7) aus, die von VirtualBox mit Mac über die GUI gestartet wurden
Nützliche Operation, wenn Sie alle Probleme in mehreren Programmiersprachen mit Codewars lösen möchten
So installieren Sie Python2.7 python3.5 mit pyenv (unter RHEL5 CentOS5) (2016 Nov)
Ich wollte den Panasonic Programming Contest 2020 mit Python lösen
Erste Schritte mit Mathematik Beginnen mit Python Programming Challenge Persönliche Notizen-Problem 1-1
13. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
So installieren Sie Theano unter Mac OS X mit Homebrew
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
Übersetzen Erste Schritte mit TensorFlow
Einführung in Python-Funktionen
Einführung in Tkinter 2: Button
Erste Schritte mit Go Assembly
Lineare Programmierung + Hands-on von Zellstoff
So registrieren Sie sich bei pypi
Erste Schritte mit Python Django (4)
Wie aktualisiere ich mit SQLAlchemy?
Erste Schritte mit Python Django (3)
Wie man mit Theano besetzt
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Einführung in Python Django (6)
Erste Schritte mit Django mit PyCharm
Wie man RDP auf Fedora31 macht