Känslighetsanalys med skuggpriser

Supply Chain Analytics i Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Definiera skuggpris

Problem vid modellering:

  • Indata för modellrestriktioner är ofta uppskattningar
  • Påverkar förändringar i indata vår lösning?

Skuggpriser:

  • Förändringen i målfunktionens optimala värde per enhet ökning av högerledet i en restriktion, givet att allt annat är oförändrat.
Supply Chain Analytics i Python

Kontext – Glasföretag – Resursplanering:

Resurs Prod. A Prod. B Prod. C
Produktionstimmar 6 5 8
Lageryta kvm 10,5 20 10
Vinst $US $500 $450 $600

Restriktioner:

  • Produktionskapacitet timmar ≤ 60
  • Lagerkapacitet ≤ 150 kvm
  • Max produktion av A ≤ 8
Supply Chain Analytics i Python

Kodexempel

# 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 i Python

Exempellösning

Lösning:

Produkter Prod. A Prod. B Prod. C
Produktionsenheter 6,667 4 0

Målfunktionens värde är $5 133,33

Supply Chain Analytics i Python

Granska restriktioner

Beslutsvariabel:

  • A till C = Antal enheter av respektive produkt A till C

Restriktioner:

  • 6A + 5B + 8C ≤ 60 (begränsad produktionskapacitet)
  • 10A + 20B + 10C ≤ 150 (begränsad lagerkapacitet)
  • A ≤ 8 (max produktion av A)
Supply Chain Analytics i Python

Skriv ut skuggpris

Python-kod:

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

Skuggpriser förklarade

Utdata:

  name  shadow price
   _C1     78.148148
   _C2      2.962963
   _C3     -0.000000

Kom ihåg restriktionerna:

  1. begränsad produktionskapacitet
  2. begränsad lagerkapacitet
  3. max produktion av A
Supply Chain Analytics i Python

Restriktionens slack

slack:

  • Mängden av en resurs som är oanvänd.

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 i Python

Restriktionens slack förklarad

Utdata:

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

Om bindande restriktioner

  • slack = 0 → bindande
  • Ändrar du en bindande restriktion förändras lösningen

Kom ihåg restriktionerna:

  1. begränsad produktionskapacitet
  2. begränsad lagerkapacitet
  3. max produktion av A
Supply Chain Analytics i Python

Sammanfattning

  • Hur man beräknar:
    • shadow prices
    • restriktionens slack
  • Identifiera bindande restriktioner
    • slack = 0 → bindande
    • slack > 0 → inte bindande
Supply Chain Analytics i Python

Nu kör vi en övning!

Supply Chain Analytics i Python

Preparing Video For Download...