Analisi di sensibilità dei prezzi ombra

Analytics per la supply chain con Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Definisci il prezzo ombra

Problemi di modellazione:

  • Gli input dei vincoli sono spesso stime
  • Cambiare gli input cambia la soluzione?

Prezzi ombra:

  • Variazione dell’ottimo della funzione obiettivo per aumento unitario del termine noto di un vincolo, a parità del resto.
Analytics per la supply chain con Python

Contesto - Azienda del vetro - Pianificazione risorse:

Risorsa Prod. A Prod. B Prod. C
Ore di produzione 6 5 8
Cap. magazzino (ft²) 10,5 20 10
Profitto $US $500 $450 $600

Vincoli:

  • Ore di capacità produttiva ≤ 60
  • Capacità magazzino ≤ 150 ft²
  • Produzione max di A ≤ 8
Analytics per la supply chain con Python

Esempio di codice

# Inizializza classe, definisci variabili e obiettivo
model = LpProblem("Max Glass Co. Profits", 
                   LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
model += 500 * A + 450 * B + 600 * C

# Vincolo 1
model += 6 * A + 5 * B + 8 * C <= 60

# Vincolo 2
model += 10.5 * A + 20 * B + 10 * C <= 150
# Vincolo 3
model += A  <= 8

# Risolvi il modello
model.solve()
print("Model Status: 
        {}".format(LpStatus[model.status]))
print("Objective = ", value(model.objective))
for v in model.variables():
    print(v.name, "=", v.varValue)
Analytics per la supply chain con Python

Soluzione d’esempio

Soluzione:

Prodotti Prod. A Prod. B Prod. C
Casse prodotte 6,667 4 0

Valore obiettivo: $5133,33

Analytics per la supply chain con Python

Rivedi i vincoli

Variabili decisionali:

  • A–C = numero di casse dei prodotti A–C

Vincoli:

  • 6A + 5B + 8C ≤ 60 (capacità produttiva limitata)
  • 10A + 20B + 10C ≤ 150 (capacità magazzino limitata)
  • A ≤ 8 (produzione max di A)
Analytics per la supply chain con Python

Stampa il prezzo ombra

Codice Python:

o = [{'name':name, 'shadow price':c.pi} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Analytics per la supply chain con Python

Prezzi ombra: spiegazione

Output:

  name  shadow price
   _C1     78.148148
   _C2      2.962963
   _C3     -0.000000

Ricorda i vincoli:

  1. capacità produttiva limitata
  2. capacità magazzino limitata
  3. produzione max di A
Analytics per la supply chain con Python

Slack del vincolo

slack:

  • Quantità di risorsa non usata.

Python:

o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Analytics per la supply chain con Python

Slack del vincolo: spiegazione

Output:

  name  shadow price     slack
   _C1     78.148148 -0.000000
   _C2      2.962963 -0.000000
   _C3     -0.000000  1.333333

Più sui vincoli binding

  • Se slack = 0, è binding
  • Cambiare un vincolo binding cambia la soluzione

Ricorda i vincoli:

  1. capacità produttiva limitata
  2. capacità magazzino limitata
  3. produzione max di A
Analytics per la supply chain con Python

Riepilogo

  • Come calcolare:
    • shadow prices
    • slack dei vincoli
  • Identifica i vincoli binding
    • se slack = 0 → binding
    • se slack > 0 → non binding
Analytics per la supply chain con Python

Provalo!

Analytics per la supply chain con Python

Preparing Video For Download...