Saltar al contenido
INVESTIGACIÓN DE OPERACIONES · UNAB 2026 · CAPÍTULO 01

Cubrir 500 clientescon el costo mínimo posible.

Un problema NP-difícil del paper de Karp (1972), resuelto con dos métodos opuestos: Branch & Bound exacto y un Algoritmo Genético. El resultado: 83 veces más rápido a cambio de un costo apenas 1.61 % mayor.

$49,988
PLE Branch & Bound · 600.96 s
22 / 23
antenas activadas · exacto / GA
7.23 s
Algoritmo Genético
Ver el paper completo
NICOLÁS MORENO · JULIAN ARTEAGA · MAYO 2026
CAPÍTULO 02 · EL PROBLEMA

500 antenas. 500 clientes. 250,000 decisiones binarias.

Cada cliente debe ser cubierto por al menos una antena. Cada antena tiene un costo. El objetivo: activar el subconjunto más barato que cubra a todos.

Es una instancia clásica del Set Cover Problem, uno de los 21 problemas NP-difíciles de Karp. El espacio de búsqueda es de 2^500 ≈ 3.27 × 10^150 subconjuntos posibles; más combinaciones que átomos en el universo observable.

La matriz de cobertura A ∈ {0,1}500×500 tiene una densidad del 9.99%: cada cliente queda en el radio de cobertura de entre 32 y 70 antenas. Los costos oscilan entre $ 2.000 y $ 3.998.

j = 1j = 500
Matriz de cobertura · sub-muestra 60×609.99% densidad · 24.971 unos
CubreNo cubre
sub-muestra 60×60 · proyección 8.33× del original
Total unos0celdas con cobertura
Cobertura promedio0,00rango: 32–70 antenas
Costo medio$ 0σ $ 593
Espacio de búsqueda··≈ 3.27 × 10¹⁵⁰
CAPÍTULO 03 · MODELO MATEMÁTICO

Una sola desigualdad, repetida 500 veces.

El modelo es de los más limpios de la literatura. Una función objetivo lineal, quinientas restricciones de cobertura, y la condición de binariedad sobre las variables de decisión.

Lo simple del enunciado contrasta con su dureza computacional: la integralidad es la que rompe la convexidad y dispara el costo del Branch & Bound.

Variables

500 binarias xj

Una por cada antena candidata. Vale 1 si la antena se activa, 0 en caso contrario. El cromosoma del algoritmo genético es exactamente este vector.

Restricciones

500 de cobertura · 500 de binariedad

Cada cliente queda forzado a recibir al menos una antena que lo cubra. La binariedad es la fuente del salto NP-difícil sobre la versión relajada.

LP relajada (cota inferior): $ 27.860 · Gap de integralidad: 79.43%

CAPÍTULO 04 · MÉTODO EXACTO · PROGRAMACIÓN LINEAL ENTERA

Diez minutos. Veintidós mil nodos. La mejor solución entera que MATLAB encontró antes de agotar el tiempo.

MATLAB intlinprog resuelve el problema con Branch and Bound. Relaja la condición de binariedad, resuelve el LP, ramifica sobre la variable fraccionaria más prometedora y descarta toda rama cuya cota inferior supere a la mejor entera ya encontrada.

Con un presupuesto de 600s el solver exploró 22,632 nodos.

Lectura matemática

min cᵀx · s.a. Ax ≥ 1 · x ∈ {0,1}⁵⁰⁰

Exploración B&B22,632 nodos · 600.96s · gap 0.385%
Esquemático · top 25 nodos
ramas que pueden mejorarramas descartadasmejor entera encontrada
Árbol Branch and Bound · 22,632 nodos explorados en 600.96sx₂₈₃ = 1fix x₁₉₆x₄₄ = 1x₄₄ = 0LP relajada · cota inicial$27,859.93$31,402$32,210$33,118$38,710$41,025$44,902$40,108$43,544$42,887$45,201$46,330$47,902$50,440$48,118$49,605$48,544$49,210$51,002$52,418$50,772$49,988mejor entera · IntegerFeasible$51,114$50,181$53,420peor explorada · podada
Status
IntegerFeasible
no certificado óptimo
Costo
$ 49.988
mejor entera
|S| Antenas
22
activadas
Tiempo
600,96s
límite 600s
Nodos B&B
22.632
explorados
Gap residual
0,386%
brecha con la cota dual
CAPÍTULO 05 · ALGORITMO GENÉTICO

Una población. Ciento cincuenta soluciones candidatas. Evolución hacia el costo mínimo.

El método metaheurístico no garantiza la solución óptima. A cambio, explora el espacio combinatorio en segundos en lugar de minutos. La pregunta no es si llega al óptimo: es qué tan cerca llega y a qué costo.

Flujo del algoritmo · 7 etapas

Cada generación: evaluar fitness, seleccionar padres, cruzar, mutar, reparar, conservar élite, parar si estancamos.

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
ETAPA 1 DE 7

Inicialización

Población inicial de 150 cromosomas binarios. Cada cromosoma representa un subconjunto S de antenas candidatas. La semilla queda fija para que el resultado sea reproducible.

Esquema
Parámetro
pop = 150
ETAPA 2 DE 7

Evaluación

Función de fitness penalizada: costo total de S más una multa por cada cliente sin cubrir. Empuja la búsqueda hacia soluciones factibles.

Esquema
Parámetro
fitness = Σc + λ · faltantes
ETAPA 3 DE 7

Selección

Torneo binario. Se enfrentan dos cromosomas al azar y gana el de menor fitness. Mantiene presión para mejorar sin perder diversidad al inicio.

Esquema
Parámetro
torneo k = 2
ETAPA 4 DE 7

Cruce

Recombinación uniforme con probabilidad 0.9. Cuando ocurre el cruce, cada gen del hijo se hereda del padre A o del padre B con la misma probabilidad.

Esquema
Parámetro
p_c = 0.9
ETAPA 5 DE 7

Mutación

Bit-flip adaptativo. Empieza alta para explorar el espacio y baja para refinar la mejor solución. No se aplica al élite, para no dañar el frente ya pulido.

Esquema
Parámetro
p_m: 3% → 0.5%
ETAPA 6 DE 7

Elitismo

Las tres mejores soluciones pasan intactas a la siguiente generación, sin cruce ni mutación. Esto garantiza que el mejor costo nunca empeora entre generaciones.

Esquema
Parámetro
elite = 3
ETAPA 7 DE 7

Estancamiento

Si la mejor solución no mejora durante 80 generaciones seguidas, el algoritmo se detiene. Ahorra evaluaciones cuando la búsqueda ya está estable.

Esquema
Parámetro
paciencia = 80 gens
Paciencia
00 / 80
generaciones sin mejora
Hiperparámetros
Población
150
Generaciones (máx.)
500
Prob. cruce p_c
0.9
Prob. mutación p_m
3% → 0.5%
Elitismo
3
Criterio de parada
estancamiento 80 gens
Convergencia (gen)
95
Semilla
13
Resultado · seed 13
Costo
$ 50.795
mejor encontrada
|S| Antenas
23
activadas
Tiempo
7,23s
speedup ×83
Gap vs ILP
+1,61%
distancia al mejor entero

“Mejor semilla. seed 13. Convergió en gen 95.”

Bitácora de corridas · 5 semillas
CAPÍTULO 06 · CONVERGENCIA

La curva cae rápido. Después se queda quieta.

El GA hace la mayor parte del trabajo en las primeras 95 generaciones. Después solo refina. A los 175 detecta estancamiento y se detiene.

Mejor fitness vs generaciónseed 13
Costo del GA por generación · convergencia en gen 95$52k$55k$60k$70kgen 0gen 50gen 95convergenciagen 175estancamientoCosto · COPGeneración$ 50.795mínimo del GAdescenso rápidomeseta · sin mejora↑ generación 0 · pob. aleatoria · costo ≈ $78.4k↘ ~70% del trabajo en las primeras 50 gens→ después del gen 95 nada cambia
Convergencia
95
Semilla
13
Tiempo
7,23s
Población
150

CAPÍTULO 07 · COMPARACIÓN

Dos métodos. Una respuesta práctica.

La diferencia se ve mejor con baseline-zoom. En escala completa, ambos costos parecen idénticos. La verdad está en el delta.

Costo
PLE · ILP$ 49.988
GA$ 50.795
|S|
PLE · ILP22 antenas
GA23 antenas
Tiempo
PLE · ILP600,96 s (10 min)
GA7,23 s
Gap
PLE · ILPref (0,386 % residual)
GA+1,61 %
Garantía
PLE · ILPIntegerFeasible
GAsin garantía

Costo · baseline-zoom desde $ 49.000

Comparación de costo PLE vs GA · baseline-zoom desde $49,000$49,5k$50,0k$50,5k$51,0k$49,988PLE · ILP$50,795GA+$807 · +1.61 %delta de costo
$ 49.000baseline$ 51.500

Eje Y truncado para revelar el delta real. No empieza en cero.

Speedup

83×

más rápido

El GA termina en 7,23 s. El PLE necesita los 10 minutos completos y aun así no garantiza el óptimo.

  • CardinalidadPLE 22·GA 23

    el GA usa 1 antena extra

  • Tiempo600 s·7.23 s

    GA es 83× más rápido

  • GarantíaIntegerFeasible·sin certificación formal

    el PLE acota la brecha a 0.386 %

Delta de costo

+$807

+1,61 %

Para producción a escala, la elección es obvia. El PLE fija el techo de calidad; el GA decide en segundos.

CAPÍTULO 08 · ROBUSTEZ

Cinco semillas. CV de 0.46%. El GA es estable.

Ejecutamos el mismo GA cinco veces, cambiando solo la semilla aleatoria. Mismo instance, mismos hiperparámetros, distintos puntos de partida en la búsqueda.

Cada corrida es una muestra independiente. El coeficiente de variación mide cuánto varía el resultado frente a la media. Por debajo del 1% se considera muy estable.

Distribución · 5 semillas · gap vs PLE-ILP

Δ best ($50.253) ↔ worst ($50.795) = $542 · 0,55 pp

Dot plot · gap del GA por semilla vs PLE-ILPPLE · ILP $49,988S1 · seed 7$50.253 · +0,53%S2 · seed 13$50.795 · +1,61%S3 · seed 42$50.253 · +0,53%S4 · seed 100$50.366 · +0,76%S5 · seed 999$50.546 · +1,12%
0.0 %1.0 %2.0 %

Media μ

$ 50.443

costo promedio de las 5 corridas

Desviación σ

$230,6

dispersión absoluta

CV

0,46 %

dispersión relativa · σ / μ

vs PLE · 0,386% residual

El coeficiente de variación es 0,46 %. En lenguaje plano: si se vuelve a correr el GA, la respuesta apenas se mueve.

CAPÍTULO 09 · CIERRE

Honestidad metodológica:

el exacto no es óptimo,

el genético no es perfecto.

Cada uno sirve para algo distinto.

Cuándo usar el PLE · ILP

Cuando puedes esperar y necesitas saber el mejor resultado posible.

  • Benchmark de calidad. Fija el techo de lo posible.
  • Certificación: el residual del 0.386% mide qué tan cerca estás del óptimo verdadero.
  • Validación de heurísticas nuevas antes de pasarlas a producción.

No en producción si hay timeout.

Cuándo usar el GA

Cuando el tiempo manda y un gap del 1 a 2 % es aceptable.

  • Producción a escala. Cuando el problema crece y el tiempo de respuesta es la restricción.
  • Decisiones rápidas: 7.23 s vs 10 min cambia el flujo operativo.
  • Sensibilidad alta a tiempo. Acepta el 1 a 2 % de gap como costo del realismo.

83× más rápido · CV 0.46 %

El mejor algoritmo no existe; existe el algoritmo que resuelve tu restricción más cara.
Nicolás Moreno + Julian ArteagaUNAB 2026
Ver el código en MATLAB