Diseñar una Supply Chain sin proveedor en la Tierra: optimizando el sistema alimentario de una misión a Marte con Investigación de Operaciones

Mars to Table — MILP Optimization

Un modelo MILP en Python + PuLP que convierte la resiliencia alimentaria en una variable matemática — inspirado en el desafío Mars to Table de la NASA.

Python PuLP · CBC MILP Supply Chain Operations Research

¿Cómo diseñarías una supply chain si tu proveedor estuviera a millones de kilómetros? Sin entregas urgentes, sin proveedores alternativos, sin inventario infinito. Y si el sistema falla, no puedes llamar y pedir más.

Ese es el problema real detrás de cualquier misión de larga duración a Marte, y el que me llevó a construir un caso de estudio inspirado en el desafío Mars to Table de la NASA. Pero en lugar de preguntar "¿qué cultivo produce más?", cambié la pregunta a una de diseño de cadena de suministro:

Pregunta central: ¿cuál es el portafolio óptimo de alimentos que minimiza la dependencia de la Tierra, respetando nutrición, agua, área cultivable, producción y diversidad de especies?

En cuanto se plantea así, el problema deja de ser agrícola. Se convierte en Investigación de Operaciones.

Modelo
MILP en Python + PuLP, resuelto con el solver CBC
Escala
18 candidatos × 16 semanas ≈ 300 variables, 700 restricciones
Trade-off
K especies mínimas conecta eficiencia con resiliencia

El desafío Mars to Table

La NASA propuso Mars to Table como un desafío abierto de ingeniería de sistemas alimentarios: diseñar cómo alimentar a una tripulación durante una misión de larga duración a Marte con la mínima dependencia de reabastecimiento desde la Tierra. La mayoría de las respuestas al desafío se centran en agronomía — qué especie cultivar, con qué rendimiento por metro cuadrado. Yo quise abordarlo como se aborda un problema de diseño de red de suministro: no "¿qué cultivo rinde más?", sino "¿qué combinación de fuentes de alimento, en qué cantidad y en qué momento, minimiza el riesgo de depender de un proveedor a 225 millones de kilómetros?".

1

El modelo: un MILP de portafolio para 18 candidatos

Construí un modelo de Programación Lineal Entera Mixta (MILP) en Python con PuLP y el solver CBC, sobre una misión de referencia:

  • 4 tripulantes, 16 semanas de planificación
  • 13 cultivos fotosintéticos + 5 fuentes alternativas de proteína
  • Restricciones de calorías (2.100 kcal/persona/día) y proteína (60 g/persona/día)
  • Área cultivable máxima (100 m²) y consumo máximo de agua diario (2.000 L/día)
  • Ciclos de maduración por especie (nada se cosecha antes de completar su ciclo)
  • Variables binarias de activación por candidato y una restricción de diversidad mínima
  • Dependencia decreciente de suministros desde la Tierra a lo largo de la misión

Las 18 fuentes de alimento evaluadas

El portafolio candidato combina cultivos fotosintéticos tradicionales con fuentes de proteína alternativa, cada una con su propio perfil de rendimiento, agua y ciclo de maduración:

GrupoCandidatosParámetro distintivo
Cultivos fotosintéticos (13) hortalizas de hoja, tubérculos, leguminosas y cereales del set de datos del desafío rendimiento de proteína/calorías por m², ciclo de maduración en días
Grillo (Acheta domesticus) proteína alternativa ≈4.500 kcal/kg
Tenebrio (Tenebrio molitor) proteína alternativa ≈5.500 kcal/kg
Micoproteína (tipo Quorn) proteína alternativa ≈1.100 kcal/kg
Hongo ostra (Pleurotus ostreatus) proteína alternativa ≈330 kcal/kg
Carne cultivada (in-vitro) proteína alternativa ≈2.500 kcal/kg

Las densidades calóricas de las proteínas alternativas no vienen en el dataset original: se estimaron a partir de literatura (Finke 2002, USDA FoodData Central, FAO), documentado en docs/assumptions.md del repositorio.

Variables de decisión

Para cada candidato i y semana t:

Formulación x[i,t] ≥ 0 # producción diaria de i en la semana t y[i] ∈ {0,1} # 1 si el candidato i entra en el portafolio δ_prot[t], δ_kcal[t] ≥ 0 # déficit cubierto por suministro desde la Tierra

Función objetivo

Minimiza dependencia de la Tierra como objetivo dominante, y usa el consumo de agua como criterio de desempate:

Objetivo min w_E · EarthDependency + w_W · TotalWater EarthDependency = Σδ_prot / d_prot + Σδ_kcal / d_kcal TotalWater = Σ (agua por m² · área) + Σ (agua por kg producto)

Restricciones del sistema

Además del balance nutricional semana a semana, el modelo impone seis restricciones estructurales que reflejan las limitaciones físicas reales de un hábitat marciano:

RestricciónQué limita
Área de cultivo Σ área usada por los cultivos ≤ 100 m² cada semana
Presupuesto de agua Σ agua consumida (cultivos + proteínas alternativas) ≤ 2.000 L/día
Capacidad de biorreactor Σ biomasa de proteína alternativa ≤ 5 kg/día
Ciclo de maduración x[i,t] = 0 mientras la especie i no complete su ciclo de crecimiento
Activación Big-M x[i,t] ≤ M · y[i] — solo produce lo que fue seleccionado en el portafolio
Capacidad de suministro terrestre δ[t] ≤ α(t) · demanda, con α(t) decreciendo linealmente de 100% (semana 1) a 0% (semana 16)

Esta última restricción es clave para el realismo del modelo: obliga a la tripulación a volverse autosuficiente progresivamente, en vez de asumir que el sistema productivo funciona a plena capacidad desde el primer día.

La restricción que convierte resiliencia en matemática

Definí K como el número mínimo de especies activas en el portafolio:

Restricción de diversidad Σ y[i] ≥ K ∀ i ∈ candidatos (18 en total)
Eficiencia

K bajo

Menor dependencia de la Tierra y menos agua consumida. Pero si una especie falla, no hay respaldo: la nutrición colapsa.

Resiliencia

K alto

Más especies activas absorben la pérdida de una cosecha. El costo: más agua y área para sostener la misma nutrición.

Por qué importa: resolviendo el modelo para K = 1, 3, 5, 7, 9, 11, 13, 15 se obtiene una curva de trade-off entre eficiencia y resiliencia. La solución de menor costo casi nunca es la más robusta ante la pérdida de una cosecha.

Trade-off Eficiencia ↔ Resiliencia

MILP · PuLP · CBC
Diversidad mínima (K) 5
42%
Dependencia Tierra
↓ óptimo
1,840
Agua L/día
+12% vs K=1
78
Área m²
+24% vs K=1
7
Especies activas
portfolio

Curva de trade-off: Dependencia de la Tierra vs Diversidad

K=1 K=3 K=5 K=9 K=13 K=15 0% 50% 100% Diversidad mínima (K) Dependencia Tierra

Portafolio de especies activas

Implementación en Python (extracto)

Python · PuLP prob = pulp.LpProblem(f"Mars_to_Table_K{min_species}", pulp.LpMinimize) earth_dependency = ( pulp.lpSum(delta_prot[t] for t in weeks) / d_prot + pulp.lpSum(delta_kcal[t] for t in weeks) / d_kcal ) prob += w_E * earth_dependency + w_W * water_terms, "Objective" # Restricción de diversidad (resiliencia como variable) prob += pulp.lpSum(y[i] for i in all_ids) >= min_species, "Diversity" # Activación Big-M: solo produce si el candidato fue seleccionado for i in all_ids: for t in weeks: prob += x[(i, t)] <= BIG_M * y[i], f"BigM_{i}_t{t}"
2

Resultados y métricas

El modelo resultante tiene un tamaño manejable para CBC pero suficientemente realista para el análisis de trade-offs:

MétricaValor
Candidatos totales18 (13 cultivos + 5 proteínas alternativas)
Horizonte de planificación16 semanas
Variables aproximadas~300
Restricciones aproximadas~700
Escenarios de diversidad evaluadosK ∈ {1, 3, 5, 7, 9, 11, 13, 15}

Para cada escenario, el notebook registra dependencia de la Tierra, agua promedio consumida, área promedio usada, biomasa alternativa producida y número de especies activas. El patrón cualitativo es consistente con la intuición de supply chain: forzar más diversidad (K alto) generalmente exige más agua y área para sostener la misma nutrición, porque el solver ya no puede concentrarse en los candidatos más eficientes — el precio de la resiliencia.

Extensión de balance hídrico: más allá del MILP, el notebook aplica tasas de reciclaje de agua específicas por candidato y corre un análisis de sensibilidad entre 85% y 99% de eficiencia de reciclaje global, para cuantificar cuánta agua de reposición ("make-up water") necesitaría realmente el sistema ECLSS.
Grupo de candidatosTasa de reciclaje asumida
Cultivos hidropónicos (trigo, soya, papa, etc.)0.95 – 0.96
Microalgas / macrófitas acuáticas0.94
Cría de insectos (grillo, tenebrio)0.75
Micoproteína0.80
Hongo ostra0.65
Carne cultivada0.70

Qué es dato y qué es supuesto

Un modelo de OR responsable distingue explícitamente entre datos medidos y estimaciones de ingeniería. El repositorio documenta esto en docs/assumptions.md, clasificando cada parámetro por nivel de confianza:

ParámetroNivel de supuesto
Tamaño de tripulación, requerimiento calórico y proteicoBajo — estándares NASA / OMS-FAO
Horizonte de planificación (16 semanas)Medio — cubre el ciclo del cultivo más lento
Área máxima de cultivo, presupuesto de agua, capacidad de biorreactorAlto — estimaciones ilustrativas, deben validarse contra el diseño real del hábitat
Densidad calórica de proteínas alternativasMedia — derivada de literatura, no del dataset original

El modelo tampoco captura micronutrientes, fibra, palatabilidad ni variabilidad estocástica del rendimiento — limitaciones explícitas que el propio repositorio señala como líneas de trabajo futuro.

Por qué esto importa más allá de Marte

El mismo patrón — optimizar bajo escasez, sin proveedor de respaldo, con trade-offs explícitos entre costo y resiliencia — aparece en:

  • Diseño de redes de suministro (Supply Chain Design)
  • Optimización de inventario y ruteo
  • Sistemas de energía y operaciones sostenibles
  • Sistemas autónomos y logística espacial
No se trata simplemente de encontrar un máximo o un mínimo. Se trata de hacer explícitos los trade-offs, cuantificarlos y convertirlos en decisiones.
Trade-offs explícitos
no solo un óptimo, sino la curva completa de decisiones posibles
Reproducible
código abierto, formulación documentada paso a paso
Transferible
el mismo patrón aplica a supply chain, energía y logística

Revisa el modelo completo

mars-to-table-optimization

Formulación matemática completa, código fuente, notebook de Colab con el análisis de sensibilidad y escenarios.

Ver en GitHub →

Si fueras responsable de diseñar esta supply chain para Marte, ¿qué incorporarías primero? ¿Incertidumbre en rendimientos, fallas de cosecha, costos de energía, tiempo de tripulación, resupply desde la Tierra, u optimización multiobjetivo? Déjalo en los comentarios.

Entradas populares de este blog

Análisis ABC en Power BI con DAX.

Cómo Realizar One-Hot Encoding en Power BI.

Cómo Equilibrar Múltiples Productos con Pedidos a la Medida

Descubriendo el Poder de los Modelos de Clasificación en Machine Learning: Predicciones Precisas y Clasificaciones Sorprendentes

Target Encoding en Power BI: La Guía Definitiva Sin Data Leakage

Maximiza la rentabilidad de tu negocio: Cómo optimizar la selección de proveedores de mercancías.

Optimización del Inventario Multiproducto en Espacios Reducidos: Una guía para la eficiencia en gestión de stocks

El Desafío del Empaque en Contenedores: Optimizando Espacios en contenedores con Ingenio

¡Plan Desagregado de Producción como un jefe!

Domina tu Almacén sin arruinarte: El Juego del Modelo de Inventario Múltiproductos con Presupuesto ajustado