Podstawy modelowania w PuLP

Analityka łańcucha dostaw w Pythonie

Aaren Stubberfield

Supply Chain Analytics Mgr.

Czym jest PuLP

  • PuLP to framework do modelowania problemów programowania liniowego (LP) i całkowitoliczbowego (IP) w Pythonie

  • Utrzymywany przez COIN-OR Foundation (Computational Infrastructure for Operations Research)

  • PuLP współpracuje z solverami:

    • CPLEX
    • COIN
    • Gurobi
    • itd.
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  • Konsultant dla małej cukierni sprzedającej 2 rodzaje ciast
  • Miesiąc 30-dniowy
  • Dostępne zasoby:
    • 1 piec
    • 2 piekarzy
    • 1 pracownik pakowania – pracuje tylko 22 dni
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  • Różne zapotrzebowanie na zasoby dla 2 rodzajów ciast:
Ciasto A Ciasto B
Piec 0,5 dnia 1 dzień
Piekarze 1 dzień 2,5 dnia
Pakerzy 1 dzień 2 dni

.

Ciasto A Ciasto B
Zysk $20,00 $40,00
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  • Cel: maksymalizacja zysku
    • Zysk = 20*A + 40*B
  • Przy ograniczeniach:
    • A ≥ 0
    • B ≥ 0
    • 0,5A + 1B ≤ 30
    • 1A + 2,5B ≤ 60
    • 1A + 2B ≤ 22
Analityka łańcucha dostaw w Pythonie

Typowy proces modelowania w PuLP

  1. Inicjalizacja modelu
  2. Definiowanie zmiennych decyzyjnych
  3. Definiowanie funkcji celu
  4. Definiowanie ograniczeń
  5. Rozwiązanie modelu
Analityka łańcucha dostaw w Pythonie

Inicjalizacja modelu - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Nazwa problemu używana w pliku wyjściowym .lp, tj. "My LP Problem"
  • sense = Maksymalizacja lub minimalizacja funkcji celu
    • Minimalizacja = LpMinimize (domyślnie)
    • Maksymalizacja = LpMaximize
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  1. Inicjalizacja modelu
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Analityka łańcucha dostaw w Pythonie

Definiowanie zmiennych decyzyjnych - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Nazwa zmiennej używana w pliku wyjściowym .lp
  • lowBound = Dolne ograniczenie
  • upBound = Górne ograniczenie
  • cat = Typ zmiennej
    • Integer
    • Binary
    • Continuous (domyślnie)
  • e = Używane w modelowaniu kolumnowym
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  1. Inicjalizacja modelu
  2. Definiowanie zmiennych
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  1. Inicjalizacja modelu
  2. Definiowanie zmiennych
  3. Definiowanie funkcji celu
# Define Objective Function
model += 20 * A + 40 * B
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  1. Inicjalizacja modelu
  2. Definiowanie zmiennych
  3. Definiowanie funkcji celu
  4. Definiowanie ograniczeń
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

  1. Inicjalizacja modelu
  2. Definiowanie zmiennych
  3. Definiowanie funkcji celu
  4. Definiowanie ograniczeń
  5. Rozwiązanie modelu
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Analityka łańcucha dostaw w Pythonie

Przykład PuLP – planowanie zasobów

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))
Analityka łańcucha dostaw w Pythonie

Podsumowanie

  • PuLP to modelator LP / IP w Pythonie
  • Omówiono 5 kroków procesu modelowania w PuLP

    1. Inicjalizacja modelu
    2. Definiowanie zmiennych decyzyjnych
    3. Definiowanie funkcji celu
    4. Definiowanie ograniczeń
    5. Rozwiązanie modelu
  • Zrealizowano przykład planowania zasobów

Analityka łańcucha dostaw w Pythonie

Czas na ćwiczenia!

Analityka łańcucha dostaw w Pythonie

Preparing Video For Download...