Erklärung des Produktionsoptimierungsmodells durch Python

Einführung

Der Zweck hier ist es, ** denjenigen zu helfen, die gerade erst anfangen, mit Python zu optimieren, um ihr Verständnis zu vertiefen **.

Weitere Informationen zur Kombinationsoptimierung finden Sie unter "Verwenden wir die Kombinationsoptimierung". Wir werden basierend auf der Tatsache vorgehen, dass es Elemente wie Modelle, Variablen, Zielfunktionen und Einschränkungen gibt.

Zielperson

Zielproblem

Problem der Produktionsoptimierung Ich möchte den Gewinn maximieren, indem ich Produkte mit begrenzten Rohstoffen herstelle

Weitere Informationen finden Sie unter [Google-Suche](https://www.google.co.jp/search?q=Production Planning Problem + Example).

Dieses Mal wird davon ausgegangen, dass die ursprünglichen Eingabedaten in der folgenden Tabelle vorbereitet sind.

data.csv


,Zutat 1,Rohstoff 2,Rohstoff 3,Profitieren
Produkt 1,1,4,3,5
Produkt 2,2,4,1,4
Lager,40,80,50

Python-Code

python3


import pandas as pd
from pulp import *
from ortoolpy import addvars
Eingabetabelle= pd.read_csv('data.csv', encoding='cp932', index_col=0) #Spezifikationen lesen
Variablentabelle,Lager=Eingabetabelle.iloc[:-1,:].copy(),Eingabetabelle.iloc[-1,:-1] #In zwei Teile teilen
Modell-= LpProblem(sense=LpMaximize) #Lineares Optimierungsmodell
Variablentabelle['Variable'] = addvars(len(Variablentabelle)) # 生産量を表すVariableを表に追加
Modell-+= lpDot(Variablentabelle.Profitieren,Variablentabelle.Variable) # 総Profitierenを表す目的関数
für Rohmaterial in variabler Tabelle.columns[:-2]: #Verarbeitung für jedes Produkt
Modell-+= lpDot(Variablentabelle[Material],Variablentabelle.Variable) <=Lager[Material] # Materialの使用量が在庫以下
Modell-.solve() #Finden Sie eine Lösung mit einem Löser
Variablentabelle['Ergebnis'] = Variablentabelle.Variable.apply(value) # Variableの値(Ergebnis)Zum Tisch
print('Zielfunktion',value(Modell-.objective)) # Zielfunktionの表示
print(Variablentabelle) # Variablentabelleの表示

Ergebnis


Zielfunktion 95.0
Rohstoff 1 Rohstoff 2 Rohstoff 3 Gewinnvariable Ergebnis
Produkt 1 1 4 3 5.0   v0001    15.0
Produkt 2 2 4 1 4.0   v0002     5.0

Kommentar

Paketspezifikation

python3


import pandas as pd
from pulp import *
from ortoolpy import addvars

Importieren Sie das gewünschte Paket. Modellvariablen werden in der Variablentabelle als Spalten dargestellt.

--pandas: Wird verwendet, um mit Modellen über variable Tabellen zu arbeiten. --Wenn Sie Anaconda verwenden, können Pandas so verwendet werden, wie sie sind. Wenn nicht, können Sie es mit "pip install pandas" installieren. --pulp: Sie können ein mathematisches Optimierungsmodell erstellen. --ortoolpy: Verwenden Sie die Variablengenerierungsfunktion (addvars).

Eingabetabelle lesen

python3


Eingabetabelle= pd.read_csv('data.csv', encoding='cp932', index_col=0) #Spezifikationen lesen

Wenn die Datei nicht vorbereitet werden kann


from io import StringIO
Eingabetabelle= pd.read_table(StringIO("""
Rohstoff 1 Rohstoff 2 Rohstoff 3 Gewinn
Produkt 1 1 4 3 5
Produkt 2 2 4 1 4
Lager 40 80 50
"""),index_col=0)

Lesen Sie die erforderlichen Spezifikationen aus der Datei und verwenden Sie sie als Eingabetabelle. Sie können es einfach mit pandas.read_csv lesen.

image.png

Aufteilung der Eingabetabelle

python3


Variablentabelle,Lager=Eingabetabelle.iloc[:-1,:].copy(),Eingabetabelle.iloc[-1,:-1] #In zwei Teile teilen

Ersetzen Sie "Variationstabelle" durch den blauen Teil in der obigen Abbildung und "Inventar" durch den grünen Teil. Sie können Slices in der Eingabetabelle .iloc verwenden, um sie frei aus der Tabelle abzurufen.

Weitere Informationen zum Schneiden finden Sie unter [Google-Suche](https://www.google.co.jp/search?q=python+numpy+ Slice).

Modell erstellen

python3


Modell-= LpProblem(sense=LpMaximize) #Optimiertes Modell

Erstellen Sie mit pulp.LpProblem ein optimiertes Modell [^ 1]. Gibt an, dass Sie die Zielfunktion maximieren möchten, indem Sie sense = LpMaximize angeben. Wenn nichts angegeben ist, wird es minimiert.

[^ 1]: Für Praktiker sollten der Zustand (das Problem), den sie lösen möchten, und das Modell, das es abstrahiert, um die Lösung zu vereinfachen, ordnungsgemäß getrennt werden. Forscher betrachten das Problem oft als Modell, weil es mit einem formalisierten beginnt. LpProblem entspricht dem Modell.

Spalte mit Variablen hinzufügen

python3


Variablentabelle['Variable'] = addvars(len(Variablentabelle)) # 生産量を表すVariableを表に追加

In Pandas können Sie eine neue Spalte mit dem Namen "Variable" in die "Variablentabelle ['Variable'] = ..." einfügen. Mit addvars können Sie ein Array von Variablen erstellen. Eine Zeile in der Variablentabelle entspricht "1 Variable und ihren Attributen".

Zielfunktion hinzufügen

python3


Modell-+= lpDot(Variablentabelle.Profitieren,Variablentabelle.Variable) # 総Profitierenを表す目的関数

In Zellstoff können Sie die Zielfunktion mit "Modell + = ..." [^ 2] einstellen. lpDot (c, x) bedeutet inneres Produkt, das $ c ^ T x $ ist.

[^ 2]: Es ist verwirrend, aber keine Ergänzung. Selbst wenn Sie es zweimal tun, ist nur das zweite gültig.

Einschränkungsbedingung hinzufügen

python3


für Rohmaterial in variabler Tabelle.columns[:-2]: #Verarbeitung für jedes Produkt
Modell-+= lpDot(Variablentabelle[Material],Variablentabelle.Variable) <=Lager[Material] # Materialの使用量が在庫以下

Mit Zellstoff können Sie Einschränkungen mit "Modell + = ... <= Wert" hinzufügen. Alternativ können Sie "> =" und "==" verwenden, jedoch nicht "! =".

Solver-Ausführung

python3


Modell-.solve() #Finden Sie eine Lösung mit einem Löser

Das erstellte Modell kann von einem anderen Programm gelöst werden, das als Solver bezeichnet wird. Mit Pulp können Sie verschiedene Löser angeben. Wenn Sie nichts angeben, wird es mit einem freien Löser namens CBC gelöst. CBC wird mit der Zellstoffinstallation installiert.

Ergebnis hinzufügen

python3


Variablentabelle['Ergebnis'] = Variablentabelle.Variable.apply(value) # Variableの値(Ergebnis)Zum Tisch

Bei Lösung mit einem Solver kann der Wert (XXX) verwendet werden, um den Wert von XXX abzurufen. Sie können den Wert auf die gesamte Variablenspalte anwenden, indem Sie "Variablentabelle.Variable.apply (Wert)" ausführen. Eine neue Ergebnisspalte wird mit "Variablentabelle ['Ergebnis'] = ..." erstellt.

Ergebnisse anzeigen

python3


print('Zielfunktion',value(Modell-.objective)) # Zielfunktionの表示
print(Variablentabelle) # Variablentabelleの表示

Ergebnisse erneut veröffentlicht


Zielfunktion 95.0
Rohstoff 1 Rohstoff 2 Rohstoff 3 Gewinnvariable Ergebnis
Produkt 1 1 4 3 5.0   v0001    15.0
Produkt 2 2 4 1 4.0   v0002     5.0

Wenn Sie 15 für Produkt 1 und 5 für Produkt 2 machen, werden Sie feststellen, dass der Gesamtgewinn maximal 95 beträgt.

Andere

Studieren

—— Lesen Sie Bücher und schauen Sie im Internet nach.

Let's enjoy Mathematical Optimization!

Recommended Posts

Erklärung des Produktionsoptimierungsmodells durch Python
Liste der Beiträge zur Optimierung durch Python to Docker
Markov-Schaltmodell von Python
Erweiterung des Python-Wörterbuchs um Argumente
Optimierung des Produktionsplans für Halbleiterwafer
Verhalten von Python3 durch Sakuras Server
Geschichte der Potenznäherung von Python
[Lernnotiz] Grundlagen des Unterrichts mit Python
Bedingte Verzweigung von Python mit Chemoinfomatik gelernt
Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
Beispiel einer dreidimensionalen Skelettanalyse von Python
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Analyse des Röntgenmikrotomographiebildes durch Python
Python-Implementierung eines kontinuierlichen Hidden-Markov-Modells
Rückkehr per CNN (gebautes Modell der Fackelsicht)
Python in der Optimierung
Optimierung der Produktionsplanung mittels linearer Programmierung (Python + PuLP)
Übertragungsfunktion / Zustandsraummodell der RLC-Serienschaltung und Simulation von Python
Memorandum der Extraktion durch Python BS4-Anfrage
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren
Beurteilung des Endes von Mahjong durch Kombinationsoptimierung
Verbesserung der Leistungsmetrik durch 2-Stufen-Lernmodell
Portfoliooptimierung mit Python (Markovitz-Durchschnittsverteilungsmodell)
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
Einführung von Python
Übertragungsfunktion / Zustandsraummodell des Feder- / Masse- / Dämpfersystems und Simulation von Python
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
Bildverarbeitung durch Matrix Basics & Contents-Reinventor der Python-Bildverarbeitung-
Höchstwahrscheinlich Schätzungsimplementierung des Themenmodells in Python
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
Zusammenfassung der Python-Artikel des Pharmaunternehmens Yukiya
○○ Probleme im Fachbereich Mathematik mit Optimierung lösen
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Gruppieren Sie nach aufeinanderfolgenden Elementen einer Liste in Python
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Implementierung der Bayes'schen Varianzschätzung des Themenmodells in Python
Erläuterung zum NoReverseMatch-Fehler in "Python Django Super Introduction"
Memo von "Cython beschleunigt Python durch Fusion mit C"
Primzahlbeurteilung durch Python
[Python] Operation der Aufzählung
Liste der Python-Module
Visualisierungsnotiz von Python
Kommunikationsverarbeitung durch Python
Vereinheitlichung der Python-Umgebung
Produktionsplanungsoptimierung (OR-Tools)
Kopie der Python-Einstellungen
Grundlagen der Python-Scraping-Grundlagen
[Python] Verhalten von Argmax
Verwendung von Python-Einheimischen ()
der Zen von Python
Installieren von Python 3.3 rc1
Gruppierung nach Kombinationsoptimierung
Python-Optimierungsbibliothek Pulp
# 4 [Python] Grundlagen der Funktionen
Beamformer-Antwort von Python