App interactiva para resolver el planograma OXXO con tres modelos:
- PuLP MIQP (optimización exacta)
- Simulated Annealing (metaheurística)
- GRASP + Local Search (metaheurística)
-
Instalar dependencias:
pip install -r requirements.txt
-
Correr la app:
streamlit run app.py
-
Se abrirá automáticamente en el navegador en
http://localhost:8501
-
Sube los dos CSV desde la pantalla principal:
oxxo_1.csv(histórico de planogramas)ejemplo_planograma.csv(óptimo aprobado por OXXO)
-
Presiona "CORRER LOS 3 MODELOS" - toma entre 5 y 60 segundos.
-
Navega entre las tres pestañas:
- PLANOGRAMA: ve el refri renderizado para cada modelo, con switch entre Óptimo, PuLP, SA y GRASP. Hover en cada botella para ver detalles.
- COINCIDENCIA: métricas de qué tanto se parece cada modelo al óptimo OXXO real.
- EFECTIVIDAD: tabla comparativa con todas las métricas, distribución por familia y top 10 productos.
- Sube los archivos a un repo de GitHub.
- Ve a https://share.streamlit.io y conecta tu cuenta.
- "New app" → selecciona tu repo →
app.py→ Deploy.
planograma_streamlit/
├── app.py # App principal (Streamlit)
├── modelos.py # Lógica de los 3 modelos (PuLP, SA, GRASP)
├── visualizacion.py # Renderizado HTML del refrigerador
├── lalo_metaheuristicas.py # Código original de SA y GRASP (Lalo)
├── requirements.txt
└── README.md
- El óptimo OXXO se filtra automáticamente a: Refrescos · CF · DI · Tamaño 3.
- La geometría del refri (18 charolas, 3 puertas × 6 niveles, alturas irregulares 42/42/31.5/31.5/28/25 cm) se infiere del archivo
ejemplo_planograma.csv. - Fi,jx,jy = score basado en cuántas veces aparece el producto i en la posición (jx, jy) en el óptimo OXXO.
- El SA arranca con warm start desde el segmento BCO del óptimo (T₀=10, muy bajo).
- El PuLP usa los top 45 productos para mantener el modelo tratable (~6,500 variables).