Basi della modellazione PuLP

Analytics per la supply chain con Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Cos'è PuLP

  • PuLP è un framework di modellazione per problemi di Programmazione Lineare (LP) e Intera (IP) in Python

  • Mantenuto dalla COIN-OR Foundation (Computational Infrastructure for Operations Research)

  • PuLP si interfaccia con i solver

    • CPLEX
    • COIN
    • Gurobi
    • ecc.
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  • Consulente per una pasticceria boutique che vende 2 tipi di torte
  • Mese da 30 giorni
  • Ci sono:
    • 1 forno
    • 2 pasticceri
    • 1 addetto al confezionamento – lavora solo 22 giorni
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  • Risorse diverse per i 2 tipi di torte:
Torta A Torta B
Forno 0,5 giorni 1 giorno
Pasticceri 1 giorno 2,5 giorni
Confezionatori 1 giorno 2 giorni

.

Torta A Torta B
Profitto $20,00 $40,00
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  • Obiettivo: massimizzare il profitto
    • Profitto = 20*A + 40*B
  • Soggetto a:
    • A ≥ 0
    • B ≥ 0
    • 0,5A + 1B ≤ 30
    • 1A + 2,5B ≤ 60
    • 1A + 2B ≤ 22
Analytics per la supply chain con Python

Processo di modellazione tipico per PuLP

  1. Inizializza il modello
  2. Definisci le variabili decisionali
  3. Definisci la funzione obiettivo
  4. Definisci i vincoli
  5. Risolvi il modello
Analytics per la supply chain con Python

Inizializzare il modello - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Nome del problema usato nel file .lp di output, cioè "My LP Problem"
  • sense = Massimizzare o minimizzare la funzione obiettivo
    • Minimizza = LpMinimize (predefinito)
    • Massimizza = LpMaximize
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  1. Inizializza il modello
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Analytics per la supply chain con Python

Definire le variabili decisionali - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Nome della variabile usato nel file .lp di output
  • lowBound = Limite inferiore
  • upBound = Limite superiore
  • cat = Tipo di variabile
    • Integer
    • Binary
    • Continuous (predefinito)
  • e = Usato per modellazione basata su colonne
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  1. Inizializza la classe
  2. Definisci le variabili
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  1. Inizializza la classe
  2. Definisci le variabili
  3. Definisci la funzione obiettivo
# Define Objective Function
model += 20 * A + 40 * B
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  1. Inizializza la classe
  2. Definisci le variabili
  3. Definisci la funzione obiettivo
  4. Definisci i vincoli
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

  1. Inizializza la classe
  2. Definisci le variabili
  3. Definisci la funzione obiettivo
  4. Definisci i vincoli
  5. Risolvi il modello
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Analytics per la supply chain con Python

Esempio PuLP – pianificazione risorse

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))
Analytics per la supply chain con Python

Riepilogo

  • PuLP è un modellatore LP/IP in Python
  • Abbiamo rivisto i 5 passi del processo PuLP

    1. Inizializza il modello
    2. Definisci le variabili decisionali
    3. Definisci la funzione obiettivo
    4. Definisci i vincoli
    5. Risolvi il modello
  • Esempio di pianificazione risorse completato

Analytics per la supply chain con Python

Passiamo alla pratica !

Analytics per la supply chain con Python

Preparing Video For Download...