Elementele de bază ale modelării PuLP

Analitică în lanțul de aprovizionare cu Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Ce este PuLP

  • PuLP este un framework de modelare pentru probleme de Programare Liniară (LP) și în Numere Întregi (IP), scris în Python

  • Întreținut de Fundația COIN-OR (Computational Infrastructure for Operations Research)

  • PuLP interfațează cu solvere precum:

    • CPLEX
    • COIN
    • Gurobi
    • etc…
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  • Consultant pentru o brutărie de nișă care vinde 2 tipuri de prăjituri
  • Lună de 30 de zile
  • Resurse disponibile:
    • 1 cuptor
    • 2 brutari
    • 1 ambalator – lucrează doar 22 de zile
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  • Necesarul de resurse pentru cele 2 tipuri de prăjituri:
Prăjitura A Prăjitura B
Cuptor 0,5 zile 1 zi
Brutari 1 zi 2,5 zile
Ambalatori 1 zi 2 zile

.

Prăjitura A Prăjitura B
Profit $20,00 $40,00
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  • Obiectivul este maximizarea profitului
    • Profit = 20*A + 40*B
  • Sub restricțiile:
    • A ≥ 0
    • B ≥ 0
    • 0.5A + 1B ≤ 30
    • 1A + 2.5B ≤ 60
    • 1A + 2B ≤ 22
Analitică în lanțul de aprovizionare cu Python

Procesul standard de modelare în PuLP

  1. Inițializare model
  2. Definire variabile de decizie
  3. Definire funcție obiectiv
  4. Definire constrângeri
  5. Rezolvare model
Analitică în lanțul de aprovizionare cu Python

Inițializarea modelului - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Numele problemei utilizat în fișierul .lp de ieșire, ex. "My LP Problem"
  • sense = Maximizare sau minimizare a funcției obiectiv
    • Minimizare = LpMinimize (implicit)
    • Maximizare = LpMaximize
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  1. Inițializare model
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Analitică în lanțul de aprovizionare cu Python

Definirea variabilelor de decizie - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Numele variabilei utilizat în fișierul .lp de ieșire
  • lowBound = Limita inferioară
  • upBound = Limita superioară
  • cat = Tipul variabilei
    • Integer
    • Binary
    • Continuous (implicit)
  • e = Utilizat pentru modelarea pe coloane
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  1. Inițializare model
  2. Definire variabile
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  1. Inițializare model
  2. Definire variabile
  3. Definire funcție obiectiv
# Define Objective Function
model += 20 * A + 40 * B
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  1. Inițializare model
  2. Definire variabile
  3. Definire funcție obiectiv
  4. Definire constrângeri
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

  1. Inițializare model
  2. Definire variabile
  3. Definire funcție obiectiv
  4. Definire constrângeri
  5. Rezolvare model
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Analitică în lanțul de aprovizionare cu Python

Exemplu PuLP – planificarea resurselor

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))
Analitică în lanțul de aprovizionare cu Python

Rezumat

  • PuLP este un modelator LP / IP în Python
  • Am parcurs 5 pași ai procesului de modelare PuLP

    1. Inițializare model
    2. Definire variabile de decizie
    3. Definire funcție obiectiv
    4. Definire constrângeri
    5. Rezolvare model
  • Am finalizat exemplul de planificare a resurselor

Analitică în lanțul de aprovizionare cu Python

Să exersăm!

Analitică în lanțul de aprovizionare cu Python

Preparing Video For Download...