Fundamentos de Investigación de Operaciones

"La IO no inventa la decisión correcta — la encuentra entre todas las matemáticamente posibles."

Qué vas a aprender en este capítulo

Antes de tocar Simplex o Excel Solver, hay que modelar el problema: traducir una situación verbal ("quiero maximizar mi ganancia con estos recursos") en una estructura matemática que una computadora pueda procesar. Este capítulo cubre:

  1. Qué es la IO y los problemas que ataca.
  2. La clasificación de modelos (te orienta para elegir qué técnica usar después).
  3. Las 6 fases de un estudio profesional.
  4. Formulación: del enunciado verbal a las ecuaciones, paso a paso, con un ejemplo de pupusería.
  5. Errores comunes que arruinan el modelo antes de empezar.

1.1 ¿Qué problema resuelve la IO?

💡 Intuición

Tenés una pupusería con dos productos: pupusa de queso (0.50cadauna)ypupusarevuelta(0.50 cada una) y pupusa revuelta (0.65). Cada queso usa 50 g de masa y 30 g de queso. Cada revuelta usa 50 g de masa, 20 g de queso y 30 g de chicharrón. Por día tenés 5 kg de masa, 2 kg de queso y 1.5 kg de chicharrón.

¿Cuántas de cada una hacés para maximizar tus ingresos del día?

Tu primer impulso es intuitivo: "hago revueltas, pagan más". Pero las revueltas consumen más recursos. Tal vez hago una mezcla. ¿Cuál? La respuesta no es obvia.

La IO formula esto matemáticamente y te da el óptimo exacto, no una corazonada. Ese es su valor.

Casos reales donde se aplica:

  • Producción: cuánto fabricar de cada producto con recursos limitados.
  • Logística: rutas óptimas de reparto (Google Maps, Amazon Last Mile).
  • Finanzas: portafolio óptimo dado riesgo y rendimiento.
  • Recursos humanos: asignación de turnos minimizando costos.
  • Energía: despacho económico de centrales.
  • Salud: programación de quirófanos.

📜 Historia

En 1939, el Reino Unido enfrentaba un problema brutal: cómo desplegar sus radares, cazas y baterías antiaéreas para defender la isla. Formaron equipos de matemáticos, físicos y biólogos para responder con modelos cuantitativos. Bautizaron la disciplina Operations Research.

En 1947, George Dantzig publicó el método Simplex, un algoritmo para resolver programas lineales. Es uno de los algoritmos más importantes del siglo XX: hizo posible resolver problemas que antes requerían cálculos manuales de meses.

En la actualidad, IO es el motor matemático detrás de logística (UPS, FedEx ahorran cientos de millones al año con IO), supply chain (Walmart, Amazon), finanzas (portafolios cuánticos) y energía (mercados eléctricos).

1.2 Anatomía de un modelo de optimización

📐 Fundamento

Todo modelo de IO tiene tres partes:

1. Variables de decisión

Las cantidades que vos controlás. En la pupusería: x1x_1 = cantidad de pupusas de queso, x2x_2 = cantidad de revueltas.

2. Función objetivo

Una expresión que maximizás o minimizás. Es función de las variables.

Pupusería: maxZ=0.50x1+0.65x2\max Z = 0.50 , x_1 + 0.65 , x_2 (ingresos del día).

3. Restricciones

Limitaciones que las variables deben cumplir. Pueden ser:

  • Recursos limitados: 50x1+50x2500050 x_1 + 50 x_2 \leq 5000 (masa en g).
  • Demanda mínima: x130x_1 \geq 30 (al menos 30 pupusas de queso).
  • No negatividad (siempre): x1,x20x_1, x_2 \geq 0.
  • Tecnológicas: x23x1x_2 \leq 3 x_1 (no más de 3 revueltas por queso).

Forma estándar

$$ \begin{aligned} \max ; & Z = c_1 x_1 + c_2 x_2 + \cdots + c_n x_n \ \text{s.a.} ; & a_{11} x_1 + \cdots + a_{1n} x_n \leq b_1 \ & a_{21} x_1 + \cdots + a_{2n} x_n \leq b_2 \ & \vdots \ & x_j \geq 0 \text{ para todo } j \end{aligned} $$

En notación matricial: maxcTx\max c^T x sujeto a AxbAx \leq b, x0x \geq 0.

Estandarizar antes de resolver es clave: los algoritmos esperan esta forma. Más detalle en cap. 2.

1.3 Tipos de problemas

📐 Fundamento

La técnica correcta depende del tipo del modelo:

Característica Tipo Técnica
Función objetivo y restricciones lineales, xRx \in \mathbb{R} Programación lineal Simplex
Igual, pero xZx \in \mathbb{Z} Programación entera Branch & Bound
Mezcla: algunas xx enteras, otras continuas MIP (Mixed Integer) Branch & Bound + LP relajado
x{0,1}x \in {0, 1} Binaria caso especial de entera
Objetivo o restricciones no lineales Programación no lineal gradient descent, Newton
Múltiples objetivos Multi-objetivo Pareto, ponderación
Datos con incertidumbre Estocástica escenarios, recourse
Decisiones en el tiempo Dinámica DP, Markov decision processes

En este libro cubrimos lineal, entera y estocástica básica. Lo demás es electivas de posgrado.

1.4 Las 6 fases de un estudio de IO

🛠️ Aplicado

Un estudio profesional sigue estas fases. Las fases 1 y 6 son las más importantes: si las hacés mal, el resto no importa.

1. Definir el problema (la fase descuidada)

Hablás con stakeholders, mediciás procesos, leés contratos. Salida: un documento de 1-2 páginas que define:

  • Quién está afectado.
  • Qué se quiere optimizar (ingresos, costos, tiempo).
  • Qué controla vs. qué viene fijo.
  • Qué restricciones legales/operativas existen.
  • Qué pasa si no se hace nada (baseline).

2. Construir el modelo

Variables, objetivo, restricciones. Validás con el cliente: "¿este planteo refleja tu negocio?".

3. Recolectar datos

A menudo el paso más caro: aija_{ij}, bib_i, cjc_j no aparecen mágicamente. Estimás con datos históricos, mediciones, entrevistas.

4. Resolver

Software: Solver (Excel), scipy.optimize.linprog, PuLP, Pyomo, Gurobi, CPLEX. Comparás el modelo simple vs. una versión más completa para detectar bugs.

5. Análisis de sensibilidad

¿Qué pasa si un parámetro cambia? Si tu solución colapsa cuando cambia 1 %, no es robusta. Más detalle en cap. 3.

6. Implementar y monitorear

La solución hay que convertirla en acciones concretas + medir si los resultados predichos se cumplen. Si no, se reformula. Es un ciclo iterativo.

Lección clave: la matemática es ~30 % del trabajo. El resto es definición, datos, comunicación, implementación.

1.5 Ejemplo trabajado — Formulación completa

📝 Ejemplo trabajado

Enunciado: La pupusería La Esquina produce dos tipos de pupusa.

Recurso Queso (por pupusa) Revuelta (por pupusa) Disponible/día
Masa 50 g 50 g 5000 g
Queso 30 g 20 g 2000 g
Chicharrón 0 g 30 g 1500 g
Precio venta 0.500.50 0.65

Por contrato con la cooperativa, debe producir al menos 30 pupusas de queso/día.

Modelado:

  1. Variables:

    • x1x_1 = pupusas de queso/día (x10x_1 \geq 0, en principio entero pero relajamos a continuo).
    • x2x_2 = pupusas revueltas/día.
  2. Objetivo: maximizar ingresos.

maxZ=0.50x1+0.65x2\max Z = 0.50 \, x_1 + 0.65 \, x_2
  1. Restricciones:
    • Masa: 50x1+50x25000x1+x210050 x_1 + 50 x_2 \leq 5000 \Rightarrow x_1 + x_2 \leq 100.
    • Queso: 30x1+20x2200030 x_1 + 20 x_2 \leq 2000.
    • Chicharrón: 30x21500x25030 x_2 \leq 1500 \Rightarrow x_2 \leq 50.
    • Contrato: x130x_1 \geq 30.
    • No negatividad: x1,x20x_1, x_2 \geq 0.

Modelo completo:

$$ \begin{aligned} \max ; & Z = 0.50 x_1 + 0.65 x_2 \ \text{s.a.} ; & x_1 + x_2 \leq 100 \ & 30 x_1 + 20 x_2 \leq 2000 \ & x_2 \leq 50 \ & x_1 \geq 30 \ & x_1, x_2 \geq 0 \end{aligned} $$

En el próximo capítulo lo resolvemos. Spoiler: x1=40x_1 = 40, x2=40x_2 = 40, $Z = $46.00$.

1.6 Modelo en Python — preview

🛠️ Aplicado

Resolvemos el modelo de la pupusería con scipy.optimize.linprog:

from scipy.optimize import linprog

# linprog MINIMIZA, así que negamos el objetivo para maximizar.
c = [-0.50, -0.65]                 # coeficientes objetivo

# Ax <= b
A_ub = [
    [ 1,  1],                       # masa
    [30, 20],                       # queso
    [ 0,  1],                       # chicharrón
    [-1, 0],                        # x_1 >= 30  →  -x_1 <= -30
]
b_ub = [100, 2000, 50, -30]
bounds = [(0, None), (0, None)]

res = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method='highs')
print(res)
# x = [40, 40], -fun = 46.00

Para problemas grandes: Pyomo (más expresivo) o PuLP (más simple). Para problemas industriales: Gurobi o CPLEX (comerciales, mucho más rápidos).

1.7 Errores comunes

⚠️ Trampa común

Confundir "objetivo del problema" con "objetivo del modelo". El cliente dice "queremos vender más". ¿Vender más unidades? ¿Vender más en dólares? ¿Vender más a clientes nuevos? Cada interpretación lleva a un modelo distinto y a una solución distinta.

Tip: preguntá hasta que la respuesta sea medible y única. Escribilo en el documento de la fase 1 y hacé que el cliente firme. Sin eso, te van a culpar de "haber optimizado lo equivocado".

⚠️ Trampa común

Olvidar la no-negatividad. Olvidar xj0x_j \geq 0 es un error clásico en parciales: el modelo "permite" producir cantidades negativas, lo cual no tiene sentido físico, y el algoritmo devuelve resultados aparentemente correctos pero absurdos.

Tip: la no-negatividad casi siempre aplica. Excepción: si tu variable representa una diferencia (puede ser negativa) o un flujo neto (positivo en una dirección, negativo en la otra).

⚠️ Trampa común

Modelar a la perfección antes de resolver. "Voy a incluir todas las restricciones reales del negocio: vacaciones, mantenimiento, demanda estacional, costos variables por turno..." → terminás con un modelo con 5000 restricciones que nadie entiende ni puede validar.

Tip: empezá con el modelo más simple que represente el 80 % del problema. Resolvelo. Validá con el cliente. Después agregás complejidad. Iterar siempre gana a intentar perfecto al primer tiro.

1.8 Resumen visual

   Problema verbal del cliente
            │
   ┌────────▼────────┐
   │ Fase 1: definir │   ← descuidada por los novatos, decisiva
   └────────┬────────┘
            │
   ┌────────▼────────┐
   │ Variables       │
   │ Objetivo        │   ← modelo matemático
   │ Restricciones   │
   └────────┬────────┘
            │
   ┌────────▼────────┐
   │ Recolectar      │   ← más caro de lo esperado
   │ datos           │
   └────────┬────────┘
            │
   ┌────────▼────────┐
   │ Resolver        │   ← Simplex (cap. 2)
   └────────┬────────┘
            │
   ┌────────▼────────┐
   │ Sensibilidad    │   ← cap. 3
   └────────┬────────┘
            │
   ┌────────▼────────┐
   │ Implementar     │   ← devolverlo a la realidad
   │ + monitorear    │
   └─────────────────┘

1.9 Ejercicios

  1. Una panadería produce pan dulce (P) y pan francés (F). Por hornada usa 2 kg harina + 1 hora horno para P, y 1.5 kg harina + 0.5 h horno para F. Tiene 50 kg de harina y 30 h de horno/día. P se vende 4/unidad,Fa4/unidad, F a 3. Formulá el modelo (no lo resolvás todavía).
  2. Identificá las variables de decisión, objetivo y restricciones del siguiente caso: "Un microbús tiene 25 asientos. Asignar asalariados (tarifa 0.25)oestudiantes(tarifa0.25) o estudiantes (tarifa 0.15) según política: al menos 5 estudiantes, no más de 20 asalariados".
  3. Clasificá: una empresa quiere asignar 8 ingenieros a 8 proyectos (cada uno a un proyecto). ¿Qué tipo de problema es? ¿Lineal, entera, binaria?
  4. Para tu carrera (sistemas, civil, industrial, admin), pensá en un problema real de tu campus o ciudad que pueda formularse como optimización. Listá variables, objetivo, 3 restricciones. No hace falta resolverlo.

1.10 Para profundizar

1.11 Mini-proyecto integrador

🏗️ Proyecto del libro — Tu primer estudio de IO

Alcance: durante todo el libro vas a aplicar las técnicas a un problema real de tu vida o entorno. En este capítulo solo lo definís.

Entregables (cap. 1):

  1. Caso elegido — 1 párrafo describiendo el problema. Ejemplo: "Optimizar mi ruta semanal entre clases, gimnasio y trabajo minimizando tiempo total de viaje".
  2. Stakeholders — quién decide, quién se beneficia, quién paga.
  3. Variables candidatas — lista preliminar.
  4. Objetivo medible — una métrica con unidades (no "ser eficiente"; sí "minimizar km/semana").
  5. 3-5 restricciones que reconozcas.
  6. Plan de datos — qué necesitás medir/buscar.

Criterio de éxito: otro estudiante lee tu doc y puede continuar el modelo sin entrevistarte.

Tiempo estimado en este capítulo: 1-2 horas. Resto del libro: avanzarás un cap. de este proyecto en cada capítulo.


Definiciones nuevas: Investigación de Operaciones, modelo de optimización, variables de decisión, función objetivo, restricciones, programación lineal, programación entera, programación no lineal, optimización estocástica, fases de un estudio de IO, no-negatividad, análisis de sensibilidad.