Basis van PuLP-modelleren

Supply Chain Analytics in Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Wat is PuLP

  • PuLP is een modelleringsframework voor lineaire (LP) en geheelgetalprogrammering (IP) in Python

  • Onderhouden door de COIN-OR Foundation (Computational Infrastructure for Operations Research)

  • PuLP koppelt aan solvers

    • CPLEX
    • COIN
    • Gurobi
    • enz.
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  • Consultant voor een boetiekbanketbakkerij die 2 soorten taarten verkoopt
  • Maand van 30 dagen
  • Er is:
    • 1 oven
    • 2 bakkers
    • 1 inpakker – werkt slechts 22 dagen
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  • Verschillende resourcebehoeften voor de 2 soorten taarten:
Taart A Taart B
Oven 0,5 dag 1 dag
Bakkers 1 dag 2,5 dag
Inpakkers 1 dag 2 dagen

.

Taart A Taart B
Winst $20,00 $40,00
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  • Doel: winst maximaliseren
    • Winst = 20*A + 40*B
  • Onder de voorwaarden:
    • A ≥ 0
    • B ≥ 0
    • 0,5A + 1B ≤ 30
    • 1A + 2,5B ≤ 60
    • 1A + 2B ≤ 22
Supply Chain Analytics in Python

Gebruikelijk modelleerproces voor PuLP

  1. Model initialiseren
  2. Beslissingsvariabelen definiëren
  3. Doelfunctie definiëren
  4. Restricties definiëren
  5. Model oplossen
Supply Chain Analytics in Python

Model initialiseren - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Naam van het probleem in het .lp-uitvoerbestand, bijv. "My LP Problem"
  • sense = Maximaliseer of minimaliseer de doelstelling
    • Minimaliseren = LpMinimize (standaard)
    • Maximaliseren = LpMaximize
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  1. Model initialiseren
from pulp import *

# Klasse initialiseren
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Supply Chain Analytics in Python

Beslissingsvariabelen definiëren - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Naam van de variabele in het .lp-uitvoerbestand
  • lowBound = Ondergrens
  • upBound = Bovengrens
  • cat = Type variabele
    • Integer
    • Binary
    • Continuous (standaard)
  • e = Voor kolomgebaseerd modelleren
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  1. Klasse initialiseren
  2. Variabelen definiëren
# Beslissingsvariabelen definiëren
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  1. Klasse initialiseren
  2. Variabelen definiëren
  3. Doelfunctie definiëren
# Doelfunctie definiëren
model += 20 * A + 40 * B
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  1. Klasse initialiseren
  2. Variabelen definiëren
  3. Doelfunctie definiëren
  4. Restricties definiëren
# Restricties definiëren
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

  1. Klasse initialiseren
  2. Variabelen definiëren
  3. Doelfunctie definiëren
  4. Restricties definiëren
  5. Model oplossen
# Model oplossen
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Supply Chain Analytics in Python

PuLP-voorbeeld – resourceplanning

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 in Python

Samenvatting

  • PuLP is een Python-modeler voor LP/IP
  • 5 stappen van het PuLP-modelleerproces herzien

    1. Model initialiseren
    2. Beslissingsvariabelen definiëren
    3. Doelfunctie definiëren
    4. Restricties definiëren
    5. Model oplossen
  • Resourceplanning-voorbeeld afgerond

Supply Chain Analytics in Python

Laten we oefenen!

Supply Chain Analytics in Python

Preparing Video For Download...