¿Cuánto vale una hora más de horno?
El análisis de sensibilidad estudia cuánto cambia la mejor solución cuando cambia un límite o un precio. Sirve para decidir si compensa pagar por más harina o por una hora más de horno.
La panadería gana 540 € con 6 tandas de pan y 4 de tarta. El dueño pregunta cuánto ganaría si el horno diera una hora más.
Al final de esta lección
Nota
Puedo decir cuánto cambia la respuesta cuando cambia un límite.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Análisis de sensibilidad | estudiar cómo cambia la respuesta cuando cambian los datos |
| Precio sombra | lo que sube el beneficio por cada unidad más de un límite |
| Restricción activa | un límite que el plan gasta por completo |
| Holgura | lo que sobra de un límite sin usar |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
¿Cuánto vale una unidad más de un límite?
Si el horno diera 25 horas en vez de 24, el mejor plan cambiaría a 5,75 tandas de pan y 4,5 de tarta. El beneficio subiría de 540 a 557,5 €.
La diferencia, 17,5 €, es el precio sombra de una hora de horno: lo que vale la hora de más. Se calcula resolviendo dos veces el problema.
Ejemplo resuelto: el efecto de un límite mayor
| Cambio | Mejor plan (pan, tarta) | Beneficio (€) | Diferencia (€) |
|---|---|---|---|
| Datos de siempre: 24 h y 32 kg | 6 y 4 | 540 | ninguna |
| Una hora más de horno: 25 h | 5,75 y 4,5 | 557,5 | +17,5 |
| Un kilo más de harina: 33 kg | 6,375 y 3,75 | 543,75 | +3,75 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Resuelve la panadería con 25 horas de horno
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -60], A_ub=[[2, 3], [4, 2]], b_ub=[25, 32]); print(round(-r.fun, 2), [round(v, 2) for v in r.x])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Resuelve la panadería con 33 kg de harina
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -60], A_ub=[[2, 3], [4, 2]], b_ub=[24, 33]); print(round(-r.fun, 2))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
linprog calcula los precios sombra por ti
No hace falta resolver el problema una vez por límite. Con el método por defecto, linprog guarda en result.ineqlin.marginals un número por cada límite.
Como linprog minimiza, esos números salen con el signo cambiado. Tomando su valor sin signo, con abs, se leen los precios sombra de cada límite.
Lee los dos precios sombra de la panadería
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -60], A_ub=[[2, 3], [4, 2]], b_ub=[24, 32]); print([round(abs(m), 2) for m in r.ineqlin.marginals])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: ¿compensa comprar más?
| Compra | Cuesta (€) | Vale (€) | ¿Compensa? |
|---|---|---|---|
| Una hora de horno | 20 | 17,5 | No |
| Una hora de horno | 12 | 17,5 | Sí |
| Un kilo de harina | 2 | 3,75 | Sí |
| Un kilo de harina | 5 | 3,75 | No |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un límite que sobra no tiene precio
Añade un tercer límite: el mostrador admite 12 tandas en total, x + y <= 12. El plan de 6 y 4 usa solo 10, así que sobran 2: esa es la holgura.
Un límite con holgura es una restricción que no manda, y su precio sombra es 0. Los que se gastan por completo son las restricciones activas.
Precios sombra y holguras con tres límites
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -60], A_ub=[[2, 3], [4, 2], [1, 1]], b_ub=[24, 32, 12]); print([round(abs(m), 2) for m in r.ineqlin.marginals]); print([round(s, 2) for s in r.slack])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error muy común
Advertencia
Mucha gente cree que el precio sombra vale para cualquier cantidad. Solo vale para cambios pequeños. Con 60 horas de horno la cuenta daría 1.170 €, pero la harina pasa a mandar y el beneficio real es 960 €.
Comprueba lo que aporta cada hora más
# Beneficio de la panadería con distintas horas de horno
# (el plan sale de cruzar el horno con la harina mientras la harina no manda)
hours = 24
while hours <= 27:
y = (2 * hours - 32) / 4
x = (32 - 2 * y) / 4
print(hours, "horas:", round(50 * x + 60 * y, 2), "euros")
hours = hours + 1
# Resta cada beneficio al anterior: ¿qué diferencia sale siempre?
Para ir más lejos: cambiar un precio
Hasta ahora cambiaste los límites. Cambia ahora el beneficio de la tarta de 60 a 70 y resuelve de nuevo. ¿Sigue siendo mejor el plan de 6 y 4? ¿A partir de qué precio de la tarta cambia el mejor plan?