Dualidad y análisis de sensibilidad
"El dual te muestra el mismo problema desde el otro lado del mostrador."
Qué vas a aprender en este capítulo
Una vez que tenés el óptimo, surge la pregunta interesante: ¿qué pasa si los datos cambian? En la práctica, los (precios), (recursos) y (coeficientes técnicos) son estimaciones. El modelo no sirve si su solución se cae con un cambio mínimo.
La dualidad y el análisis de sensibilidad responden:
- ¿Cuánto vale cada recurso? (precio sombra).
- ¿Cuánto puede cambiar un coeficiente sin que la solución cambie?
- ¿Conviene comprar más recurso ? ¿Hasta qué precio?
- ¿Vale la pena producir un nuevo producto? (costo reducido).
Estas son las preguntas que tu cliente realmente te va a hacer. Si solo le entregás "produzcan 40 pupusas de queso", no le servís de mucho. Si le explicás "y si compran 1 kg más de queso ganan $X extra", le diste valor real.
3.1 El problema dual
💡 Intuición
Volvé a la pupusería. Vos tenés recursos (masa, queso, chicharrón) y querés convertirlos en ingresos. Un comprador externo te ofrece: "te compro todos tus recursos a tal precio cada uno; vendele a mí en vez de hacer pupusas".
¿Te conviene? Si los precios que te ofrece igualan o superan lo que vos ganarías produciendo, sí. Si no, mejor producís.
El problema dual plantea exactamente eso: "encontrar los precios mínimos a los que un comprador querría adquirir todos los recursos, respetando que ningún producto deje al productor con pérdida".
El teorema fuerte de dualidad dice algo asombroso: el óptimo del primal = óptimo del dual. Mismo número, dos interpretaciones.
Esa equivalencia es la base de los precios sombra (cuánto vale cada recurso adicional) y del análisis económico de la solución.
📐 Fundamento
Reglas para construir el dual (asumiendo primal en forma de maximización con ):
| Primal (max) | Dual (min) |
|---|---|
| variables | restricciones |
| restricciones | variables |
| Coeficientes del objetivo | RHS del dual |
| RHS | Coeficientes objetivo del dual |
| Matriz | Matriz (transpuesta) |
| Variable | Restricción |
| Restricción | Variable |
| Restricción | Variable libre |
Ejemplo de transformación:
Primal:
Dual: una variable por cada restricción primal:
Lectura: "¿cuál es el costo mínimo de los recursos (mortar de masa 100 + ...) que iguale o supere el ingreso por unidad de cada producto?"
Teoremas clave
-
Dualidad débil: para todo primal factible y dual factible: .
-
Dualidad fuerte: si el primal tiene óptimo finito, = b^T y^**.
-
Holgura complementaria: en óptimo, para cada par :
- O y la restricción dual está activa.
- O y la restricción dual puede tener holgura.
(Y simétricamente para .)
3.2 Precios sombra
📐 Fundamento
Precio sombra = valor de la variable dual en óptimo = incremento marginal del objetivo Z por aumentar en una unidad (dentro de un rango).
Interpretación:
- : la restricción está activa (saturada). El recurso es escaso. Conseguir más unidades vale por unidad.
- : la restricción tiene holgura (). El recurso sobra. Conseguir más no aporta — no pagués por él.
Aplicación práctica: ¿conviene comprar más queso?
Si el precio sombra del queso es 20 adicionales en ingresos. Si te lo venden a 5 de ganancia adicional. Si te lo cobran $25/kg, no.
Esa lógica simple es la base de toda decisión "cuánto pagar por X" en operaciones e inversión.
3.3 Costo reducido
📐 Fundamento
Costo reducido = penalización por usar la variable si no está en la solución óptima.
Interpretación:
- Si y : la variable no entra porque su contribución al objetivo es menor que el "costo" de los recursos que consumiría (medido en precios sombra). Para que entrara, debería subir al menos unidades.
- Si : el cambio es marginal — entre y no afecta .
Aplicación práctica: ¿conviene introducir un nuevo producto?
Pupusería evalúa lanzar pupusa loca ($0.80/unidad, usa 60 g masa, 25 g queso, 15 g chicharrón).
Costo reducido: .
Si (precios sombra del óptimo actual):
.
Negativo en problema de maximización = entra ya. Conviene introducir el producto.
(Para minimización, las desigualdades se invierten.)
3.4 Análisis de sensibilidad (post-óptimo)
📐 Fundamento
Después de obtener el óptimo, querés saber cuánto pueden cambiar los datos sin invalidar tu solución.
Cambios en (coeficientes objetivo)
Hay un rango dentro del cual la misma base sigue siendo óptima (mismas variables en la solución; sus valores pueden ajustarse).
Si sale del rango: otra variable entrará. Tenés que re-optimizar (Simplex desde la base actual; normalmente toma 1-2 pivotes).
Excel Solver y PuLP reportan estos rangos en el reporte de sensibilidad.
Cambios en (lados derechos)
Hay un rango dentro del cual el conjunto de restricciones activas no cambia. Dentro del rango:
Lineal en . Fuera del rango: el cambio deja de ser lineal — otra restricción se vuelve activa y el precio sombra cambia.
Añadir restricción nueva
Chequeás si el óptimo actual la satisface:
- Si sí: sigue siendo óptimo.
- Si no: tenés que re-optimizar (Dual Simplex es eficiente acá).
Añadir variable nueva
Calculás su costo reducido. Si entra ( con signo correcto), re-optimizás.
3.5 Reporte de sensibilidad en software
🛠️ Aplicado
Excel Solver
Cuando resuelve, ofrece 3 reportes: Answer, Sensitivity, Limits. El Sensitivity Report te muestra:
- Variable Cells: valor óptimo, costo reducido, rango de .
- Constraints: valor en óptimo, precio sombra, rango de .
Python — PuLP
# Después de m.solve():
for v in m.variables():
print(f"{v.name} = {v.varValue}, reduced cost = {v.dj}")
for c in m.constraints.values():
print(f"{c.name}: slack = {c.slack}, shadow price = {c.pi}")
v.dj = costo reducido. c.pi = precio sombra (variable dual asociada).
Python — scipy
res = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method='highs')
print("Marginals (precios sombra):", res.ineqlin.marginals)
print("Costos reducidos:", res.upper.marginals + res.lower.marginals)
(scipy 1.10+. Versiones anteriores no reportan duales bien.)
📝 Ejemplo trabajado — análisis completo de la pupusería
Resolvemos:
Óptimo (calculado en cap. 2 con la corrección): , , .
Activas: y . Holgura: masa = ; queso = .
Precios sombra (típicos en este óptimo):
- Masa: (sobra → no vale más). ✓
- Queso: (sobra → no vale más). ✓
- Chicharrón: (saturada — cada g más vale $0.0325 en ingresos).
- Contrato : (activa — relajar el mínimo a 29 ganarías $0.15).
Interpretación de negocio:
- Conseguir más masa o queso: no vale. Sobran.
- Conseguir más chicharrón: conviene hasta el precio sombra.
- Renegociar el contrato con la cooperativa para bajar a 25 pupusas mínimo: ganarías $0.75 extra/día. Probablemente no vale la pena la negociación.
Lección: los precios sombra te dan agenda de acciones. Es muy raro que el cliente quiera "el plan óptimo"; lo que quiere es saber qué hacer para que el óptimo mejore.
3.6 Errores comunes
⚠️ Trampa común
Interpretar precio sombra fuera de su rango de validez. "El precio sombra del chicharrón es 325 extra." Falso: el precio sombra es marginal, válido dentro de un rango. Más allá del rango, otra restricción se vuelve activa y el precio sombra cambia (suele bajar).
Tip: siempre reportá precio sombra junto con el rango de validez. Si el rango es chico, la información es local; si es grande, podés extrapolar más.
⚠️ Trampa común
Confundir holgura con precio sombra. Restricción no activa tiene precio sombra cero, aunque tenga holgura grande. Suena contradictorio ("¡sobra mucho recurso!") pero correcto: si sobra, una unidad más no aporta nada al óptimo. El recurso solo "vale" si la restricción está saturada.
Tip: memorizá: holgura > 0 ⇔ precio sombra = 0.
⚠️ Trampa común
Confiar en el sensibilidad como predicción robusta. Sensibilidad asume que cambian uno o dos parámetros a la vez. Si muchos cambian simultáneamente, la solución puede saltar a otra base de manera no obvia.
Tip: para escenarios complejos, usá simulación de Monte Carlo: muestreas parámetros desde sus distribuciones, resolvés muchas veces, mirás la distribución de las soluciones. La sensibilidad analítica es un vista local; Monte Carlo da una vista global.
3.7 Resumen visual
Primal (max) Dual (min)
───────────── ─────────────
n variables m variables
m restricciones (≤) n restricciones (≥)
c (objetivo) ↔ b (objetivo)
b (RHS) ↔ c (RHS)
A ↔ Aᵀ
↓ ↓
Óptimo Z* = Óptimo W* ← dualidad fuerte
Para cada restricción primal i:
- holgura sᵢ > 0 ⟹ precio sombra yᵢ* = 0
- holgura sᵢ = 0 ⟹ precio sombra yᵢ* puede ser > 0
Para cada variable primal j:
- xⱼ* > 0 ⟹ costo reducido c̄ⱼ = 0
- xⱼ* = 0 ⟹ costo reducido c̄ⱼ ≥ 0
3.8 Ejercicios
- Construí el dual de:
- En el ejemplo de la pupusería, calculá el costo reducido de una "pupusa de espinaca" hipotética ($0.55, 50 g masa, 25 g queso, 0 g chicharrón). ¿Conviene introducirla?
- Resolvé la pupusería original con PuLP y reportá precios sombra y rangos de validez. Generá una recomendación de 1 página para el dueño.
- Verificá empíricamente la dualidad fuerte: resolvé un problema PL y su dual; mostrá que ambos óptimos son iguales.
- Si subís (queso) de 2000 a 2500, ¿cuánto cambia ? (Asumí que el rango lo permite.)
- Construí un caso donde un precio sombra es negativo. ¿Qué significa?
3.9 Para profundizar
- Bertsimas & Tsitsiklis, Introduction to Linear Optimization, cap. 4-5.
- Williams, Model Building in Mathematical Programming — joya práctica con casos reales.
- Anderson, Sweeney & Williams, An Introduction to Management Science — orientado a admin/negocios.
- Siguiente capítulo: Programación entera y problemas de redes.
3.10 Mini-proyecto integrador
🏗️ Avance del proyecto — Análisis dual
Continuación.
Entregables (cap. 3):
- Calculá precios sombra de tu solución.
- Calculá costos reducidos de cualquier variable no usada.
- Identificá rango de validez de cada precio sombra.
- Generá una recomendación de 1 página para el "cliente" con:
- Solución óptima propuesta.
- Cuáles restricciones son críticas (saturadas).
- Cuáles recursos comprar más, hasta qué precio.
- Cuál parámetro monitorear (el de rango más estrecho).
Criterio: un gerente no técnico puede leerlo y tomar 3 decisiones concretas.
Definiciones nuevas: problema dual, dualidad débil, dualidad fuerte, teorema de holgura complementaria, precio sombra (variable dual), costo reducido, análisis de sensibilidad, rango de validez, base óptima, restricción activa, restricción no activa.