
El problema
Los semáforos de tiempo fijo repiten el mismo ciclo aunque una avenida esté saturada y la otra vacía. Quise probar si un agente que observa el tráfico en tiempo real decide mejor cuándo cambiar de fase, en un cruce real de Toluca: Venustiano Carranza y Blvd. Pino Suárez, con los aforos del estudio Quivera (UAEM, 2022).
Qué construí
Soy el autor principal del repositorio: 28 commits y 4,911 líneas añadidas. Una compañera construyó la red y las rutas de SUMO (4 commits, 1,137 líneas).
- Un envoltorio de TraCI que conecta Python con la simulación de SUMO.
- Dos entornos de Gymnasium. El semáforo decide entre mantener o cambiar de fase (2 acciones, con verde mínimo de 15 s y amarillo de 3 pasos). El vehículo decide entre frenar, mantener o acelerar (3 acciones). Cada uno observa 6 valores.
- Una recompensa que penaliza la espera, la cola y los cambios prematuros, y premia los vehículos en movimiento. La ajusté en varias iteraciones.
- Un pipeline de entrenamiento de 3 etapas con PPO de Stable-Baselines3.
- Un evaluador que corre 6 escenarios, con 5 episodios cada uno, contra el semáforo de tiempo fijo de SUMO.
- Un dashboard con Three.js publicado en Netlify.
Arquitectura
Resultados
Espera promedio en la intersección, según la evaluación del proyecto:
| Escenario | Espera promedio | Mejora contra tiempo fijo |
|---|---|---|
| Semáforo de tiempo fijo | 303.3 s | — |
| Solo el semáforo con IA | 192.6 s | 36.5% |
| Solo los vehículos con IA | 161.9 s | 46.6% |
| Sistema completo | 66.2 s | 78.2% |
| Hora pico | 82.1 s | 72.9% |
| Tráfico desbalanceado | 78.4 s | 74.1% |
Con el sistema completo el flujo bajó de 1,924 a 1,811 vehículos por hora: hay menos espera, pero pasan menos autos.
Cómo leer estos números. Salen de una sola corrida determinista, porque SUMO usa su semilla por defecto, y los CSV de resultados no están en el repositorio. Para tomarlos como definitivos falta repetir la evaluación con varias semillas y corregir los puntos de la sección siguiente.
Límites conocidos
- La geometría es sintética: un cruce de 4 brazos de 200 m con solo flujos rectos. Los carriles sí son los reales.
- El entorno usa el índice de fase 2 para el verde de Carranza, pero la red de SUMO tiene 8 fases y ese verde es la fase 4. Hay que corregirlo y volver a evaluar.
- El agente vehículo controla 1 vehículo a la vez.
- Los dos agentes se entrenaron por separado. La etapa de ajuste conjunto existe en el pipeline, pero no se invoca desde
main.py. - Los 35 tests usan un simulador falso y hoy no corresponden al entorno: esperan una observación de 9 valores y el entorno produce 6. No hay CI.