Grundlagen der PuLP-Modellierung

Supply Chain Analytics mit Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Was ist PuLP

  • PuLP ist ein in Python geschriebenes Modellierungs-Framework für lineare (LP) und ganzzahlige Programmierung (IP)

  • Wird von der COIN-OR Foundation (Computational Infrastructure for Operations Research) gepflegt

  • PuLP verbindet sich mit Solvern

    • CPLEX
    • COIN
    • Gurobi
    • usw.
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  • Berater:in für eine kleine Kuchenbäckerei mit 2 Kuchentypen
  • Monat mit 30 Tagen
  • Verfügbar sind:
    • 1 Ofen
    • 2 Bäcker
    • 1 Verpacker – arbeitet nur 22 Tage
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  • Unterschiedlicher Ressourcenbedarf für die 2 Kuchentypen:
Kuchen A Kuchen B
Ofen 0,5 Tage 1 Tag
Bäcker 1 Tag 2,5 Tage
Verpacker 1 Tag 2 Tage

.

Kuchen A Kuchen B
Gewinn $20.00 $40.00
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  • Ziel: Gewinn maximieren
    • Gewinn = 20*A + 40*B
  • Unter Nebenbedingungen:
    • A ≥ 0
    • B ≥ 0
    • 0,5A + 1B ≤ 30
    • 1A + 2,5B ≤ 60
    • 1A + 2B ≤ 22
Supply Chain Analytics mit Python

Typischer PuLP-Modellierungsprozess

  1. Modell initialisieren
  2. Entscheidungsvariablen definieren
  3. Zielfunktion definieren
  4. Nebenbedingungen definieren
  5. Modell lösen
Supply Chain Analytics mit Python

Modell initialisieren - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Name des Problems in der ausgegebenen .lp-Datei, z. B. „My LP Problem"
  • sense = Zielfunktion maximieren oder minimieren
    • Minimieren = LpMinimize (Standard)
    • Maximieren = LpMaximize
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  1. Modell initialisieren
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Supply Chain Analytics mit Python

Entscheidungsvariablen definieren - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Name der Variable in der ausgegebenen .lp-Datei
  • lowBound = Untere Schranke
  • upBound = Obere Schranke
  • cat = Variablentyp
    • Integer
    • Binary
    • Continuous (Standard)
  • e = Für spaltenbasierte Modellierung
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  1. Klasse initialisieren
  2. Variablen definieren
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  1. Klasse initialisieren
  2. Variablen definieren
  3. Zielfunktion definieren
# Define Objective Function
model += 20 * A + 40 * B
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  1. Klasse initialisieren
  2. Variablen definieren
  3. Zielfunktion definieren
  4. Nebenbedingungen definieren
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

  1. Klasse initialisieren
  2. Variablen definieren
  3. Zielfunktion definieren
  4. Nebenbedingungen definieren
  5. Modell lösen
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Supply Chain Analytics mit Python

PuLP-Beispiel – Ressourceneinsatz planen

from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits",
                   LpMaximize)

# Define Decision Variables
A = LpVariable('A', lowBound=0,
                cat='Integer')
B = LpVariable('B', lowBound=0, 
                cat='Integer')

# Define Objective Function
model += 20 * A + 40 * B
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22

# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Supply Chain Analytics mit Python

Zusammenfassung

  • PuLP ist ein Python-LP-/IP-Modeler
  • Die 5 Schritte des PuLP-Prozesses wiederholt

    1. Modell initialisieren
    2. Entscheidungsvariablen definieren
    3. Zielfunktion definieren
    4. Nebenbedingungen definieren
    5. Modell lösen
  • Ressourcenplanungsbeispiel abgeschlossen

Supply Chain Analytics mit Python

Lass uns üben!

Supply Chain Analytics mit Python

Preparing Video For Download...