Análise de sensibilidade do preço-sombra

Análise de Cadeia de Suprimentos em Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Definir preço-sombra

Questões de modelagem:

  • Entradas das restrições costumam ser estimativas
  • Mudanças nas entradas mudam a solução?

Preços-sombra:

  • Variação no ótimo da função objetivo por aumento de 1 unidade no lado direito de uma restrição, mantendo o resto igual.
Análise de Cadeia de Suprimentos em Python

Contexto - Vidraçaria - Planejamento de recursos:

Recurso Prod. A Prod. B Prod. C
Horas de produção 6 5 8
Capacidade do CD m² 10.5 20 10
Lucro US$ $500 $450 $600

Restrições:

  • Horas de capacidade de produção ≤ 60
  • Capacidade do depósito ≤ 150 m²
  • Produção máxima de A ≤ 8
Análise de Cadeia de Suprimentos em Python

Exemplo de código

# Inicializar classe, definir vars. e objetivo
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

# Restrição 1
model += 6 * A + 5 * B + 8 * C <= 60

# Restrição 2
model += 10.5 * A + 20 * B + 10 * C <= 150
# Restrição 3
model += A  <= 8

# Resolver modelo
model.solve()
print("Model Status: 
        {}".format(LpStatus[model.status]))
print("Objective = ", value(model.objective))
for v in model.variables():
    print(v.name, "=", v.varValue)
Análise de Cadeia de Suprimentos em Python

Solução do exemplo

Solução:

Produtos Prod. A Prod. B Prod. C
Caixas produzidas 6.667 4 0

Valor do objetivo: US$ 5.133,33

Análise de Cadeia de Suprimentos em Python

Revisar restrições

Variável de decisão:

  • A a C = Número de caixas dos produtos A a C

Restrições:

  • 6A + 5B + 8C ≤ 60 (capacidade de produção limitada)
  • 10A + 20B + 10C ≤ 150 (capacidade do depósito limitada)
  • A ≤ 8 (produção máxima de A)
Análise de Cadeia de Suprimentos em Python

Imprimir preço-sombra

Código Python:

o = [{'name':name, 'shadow price':c.pi} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Análise de Cadeia de Suprimentos em Python

Preços-sombra explicados

Saída:

  name  shadow price
   _C1     78.148148
   _C2      2.962963
   _C3     -0.000000

Lembre as restrições:

  1. capacidade de produção limitada
  2. capacidade do depósito limitada
  3. produção máxima de A
Análise de Cadeia de Suprimentos em Python

Folga da restrição

slack:

  • Quantidade de recurso não usada.

Python:

o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Análise de Cadeia de Suprimentos em Python

Folga explicada

Saída:

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

Mais sobre binding

  • Se slack = 0, então é binding
  • Mudar uma restrição binding altera a solução

Lembre as restrições:

  1. capacidade de produção limitada
  2. capacidade do depósito limitada
  3. produção máxima de A
Análise de Cadeia de Suprimentos em Python

Resumo

  • Como calcular:
    • shadow prices
    • slack das restrições
  • Identificar restrições binding
    • slack = 0 → binding
    • slack > 0 → não binding
Análise de Cadeia de Suprimentos em Python

Vamos praticar!

Análise de Cadeia de Suprimentos em Python

Preparing Video For Download...