Grunderna i PuLP-modellering

Supply Chain Analytics i Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Vad är PuLP?

  • PuLP är ett modelleringsramverk för linjär programmering (LP) och heltalsprogrammering (IP) i Python

  • Underhålls av COIN-OR Foundation (Computational Infrastructure for Operations Research)

  • PuLP kommunicerar med lösare:

    • CPLEX
    • COIN
    • Gurobi
    • osv…
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  • Konsult för ett litet bageri som säljer 2 typer av tårtor
  • 30-dagarsmånad
  • Resurser:
    • 1 ugn
    • 2 bagare
    • 1 förpackare – arbetar bara 22 dagar
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  • Olika resursbehov för de 2 tårttyperna:
Tårta A Tårta B
Ugn 0,5 dagar 1 dag
Bagare 1 dag 2,5 dagar
Förpackare 1 dag 2 dagar

.

Tårta A Tårta B
Vinst $20,00 $40,00
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  • Målet är att maximera vinsten
    • Vinst = 20*A + 40*B
  • Med villkor:
    • A ≥ 0
    • B ≥ 0
    • 0.5A + 1B ≤ 30
    • 1A + 2.5B ≤ 60
    • 1A + 2B ≤ 22
Supply Chain Analytics i Python

Vanlig modelleringsprocess i PuLP

  1. Initiera modellen
  2. Definiera beslutsvariabler
  3. Definiera målfunktionen
  4. Definiera villkoren
  5. Lös modellen
Supply Chain Analytics i Python

Initiera modellen – LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Namnet på problemet som används i den genererade .lp-filen, dvs. "My LP Problem"
  • sense = Maximera eller minimera målfunktionen
    • Minimera = LpMinimize (standard)
    • Maximera = LpMaximize
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  1. Initiera modellen
from pulp import *

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

Definiera beslutsvariabler – LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Namnet på variabeln som används i den genererade .lp-filen
  • lowBound = Undre gräns
  • upBound = Övre gräns
  • cat = Variabelns typ
    • Integer
    • Binary
    • Continuous (standard)
  • e = Används för kolumnbaserad modellering
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  1. Initiera modellen
  2. Definiera variabler
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  1. Initiera modellen
  2. Definiera variabler
  3. Definiera målfunktionen
# Define Objective Function
model += 20 * A + 40 * B
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

  1. Initiera modellen
  2. Definiera variabler
  3. Definiera målfunktionen
  4. Definiera villkoren
# 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 i Python

PuLP-exempel – resursplanering

  1. Initiera modellen
  2. Definiera variabler
  3. Definiera målfunktionen
  4. Definiera villkoren
  5. Lös modellen
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Supply Chain Analytics i Python

PuLP-exempel – resursplanering

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

Sammanfattning

  • PuLP är ett LP/IP-modelleringsverktyg i Python
  • Genomgång av 5 steg i PuLP:s modelleringsprocess

    1. Initiera modellen
    2. Definiera beslutsvariabler
    3. Definiera målfunktionen
    4. Definiera villkoren
    5. Lös modellen
  • Genomfört ett resursplaneringsexempel

Supply Chain Analytics i Python

Nu kör vi en övning!

Supply Chain Analytics i Python

Preparing Video For Download...