Analýza citlivosti stínových cen

Supply Chain Analytics v Pythonu

Aaren Stubberfield

Supply Chain Analytics Mgr.

Definice stínové ceny

Problémy při modelování:

  • Vstupy pro omezení modelu jsou často odhady
  • Ovlivní změny vstupu naše řešení?

Stínové ceny:

  • Změna optimální hodnoty účelové funkce na jednotkový nárůst pravé strany omezení, za předpokladu neměnnosti ostatních podmínek.
Supply Chain Analytics v Pythonu

Kontext – sklenářská firma – plánování zdrojů:

Zdroj Prod. A Prod. B Prod. C
Výrobní hodiny 6 5 8
Skladovací plocha m² 10,5 20 10
Zisk v USD $500 $450 $600

Omezení:

  • Výrobní kapacita hodin ≤ 60
  • Skladovací kapacita ≤ 150 m²
  • Max. výroba A ≤ 8
Supply Chain Analytics v Pythonu

Ukázka kódu

# Initialize Class, Define Vars., and Objective
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

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

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

# Solve Model
model.solve()
print("Model Status: 
        {}".format(LpStatus[model.status]))
print("Objective = ", value(model.objective))
for v in model.variables():
    print(v.name, "=", v.varValue)
Supply Chain Analytics v Pythonu

Příklad řešení

Řešení:

Produkty Prod. A Prod. B Prod. C
Výrobní případy 6,667 4 0

Hodnota účelové funkce: $5 133,33

Supply Chain Analytics v Pythonu

Přehled omezení

Rozhodovací proměnná:

  • A až C = počet případů příslušných produktů A až C

Omezení:

  • 6A + 5B + 8C ≤ 60 (omezená výrobní kapacita)
  • 10A + 20B + 10C ≤ 150 (omezená skladovací kapacita)
  • A ≤ 8 (max. výroba A)
Supply Chain Analytics v Pythonu

Výpis stínové ceny

Kód v Pythonu:

o = [{'name':name, 'shadow price':c.pi} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Supply Chain Analytics v Pythonu

Vysvětlení stínových cen

Výstup:

  name  shadow price
   _C1     78.148148
   _C2      2.962963
   _C3     -0.000000

Připomenutí omezení:

  1. omezená výrobní kapacita
  2. omezená skladovací kapacita
  3. max. výroba A
Supply Chain Analytics v Pythonu

Slack omezení

slack:

  • Množství nevyužitého zdroje.

Python:

o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Supply Chain Analytics v Pythonu

Vysvětlení slacku omezení

Výstup:

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

Více o aktivních omezeních

  • slack = 0 → aktivní
  • Změna aktivního omezení mění řešení

Připomenutí omezení:

  1. omezená výrobní kapacita
  2. omezená skladovací kapacita
  3. max. výroba A
Supply Chain Analytics v Pythonu

Shrnutí

  • Jak vypočítat:
    • stínové ceny
    • slack omezení
  • Identifikace aktivních omezení
    • slack = 0 → aktivní
    • slack > 0 → neaktivní
Supply Chain Analytics v Pythonu

Vyzkoušejte si to!

Supply Chain Analytics v Pythonu

Preparing Video For Download...