Análisis de sensibilidad del precio sombra

Analítica de la cadena de suministro en Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Definir precio sombra

Problemas al modelar:

  • Las entradas de las restricciones suelen ser estimaciones
  • ¿Cambiarán la solución si cambian?

Precios sombra:

  • Cambio en el valor óptimo de la función objetivo por cada unidad que aumenta el lado derecho de una restricción, manteniendo lo demás constante.
Analítica de la cadena de suministro en Python

Contexto - Vidriera - Planificación de recursos:

Recurso Prod. A Prod. B Prod. C
Horas de producción 6 5 8
Cap. almacén (ft²) 10.5 20 10
Beneficio $US $500 $450 $600

Restricciones:

  • Horas de capacidad de producción ≤ 60
  • Capacidad de almacén ≤ 150 ft²
  • Producción máx. de A ≤ 8
Analítica de la cadena de suministro en Python

Ejemplo de código

# 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)
Analítica de la cadena de suministro en Python

Solución del ejemplo

Solución:

Productos Prod. A Prod. B Prod. C
Casos producidos 6.667 4 0

El valor del objetivo es $5133.33

Analítica de la cadena de suministro en Python

Revisar restricciones

Variable de decisión:

  • A a C = número de cajas de los productos A a C

Restricciones:

  • 6A + 5B + 8C ≤ 60 (capacidad de producción limitada)
  • 10A + 20B + 10C ≤ 150 (capacidad de almacén limitada)
  • A ≤ 8 (producción máx. de A)
Analítica de la cadena de suministro en Python

Imprimir precio sombra

Código Python:

o = [{'name':name, 'shadow price':c.pi} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Analítica de la cadena de suministro en Python

Precios sombra: explicación

Salida:

  name  shadow price
   _C1     78.148148
   _C2      2.962963
   _C3     -0.000000

Recuerda las restricciones:

  1. capacidad de producción limitada
  2. capacidad de almacén limitada
  3. producción máx. de A
Analítica de la cadena de suministro en Python

Holgura de restricción

slack:

  • Cantidad de recurso sin usar.

Python:

o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Analítica de la cadena de suministro en Python

Holgura: explicación

Salida:

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

Más sobre binding

  • Si slack = 0, es binding
  • Cambiar una restricción binding cambia la solución

Recuerda las restricciones:

  1. capacidad de producción limitada
  2. capacidad de almacén limitada
  3. producción máx. de A
Analítica de la cadena de suministro en Python

Resumen

  • Cómo calcular:
    • shadow prices
    • slack de restricciones
  • Identificar restricciones binding
    • Si slack = 0, binding
    • Si slack > 0, no binding
Analítica de la cadena de suministro en Python

¡Vamos a practicar!

Analítica de la cadena de suministro en Python

Preparing Video For Download...