René Cano
Todos los proyectos

Núm. 11er lugar · Expo Ingenierías 2026

UrbanMind X

Control de semáforos con aprendizaje por refuerzo

Mi rol
Autor principal (con una compañera en la red de SUMO)
Periodo
May – jun 2026
Portada del dashboard de UrbanMind X: el título «UrbanMind·X» sobre una ciudad de bloques iluminados en 3D, con el lema «Una ciudad que aprende a despejarse sola».

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

Diagrama de arquitectura: los aforos y la red del cruce alimentan a SUMO; un envoltorio de TraCI conecta SUMO con dos entornos de Gymnasium, uno para el semáforo y otro para el vehículo; cada entorno entrena un agente PPO; un evaluador compara 6 escenarios contra el semáforo de tiempo fijo y publica los resultados en un dashboard con Three.js.

Resultados

Espera promedio en la intersección, según la evaluación del proyecto:

EscenarioEspera promedioMejora contra tiempo fijo
Semáforo de tiempo fijo303.3 s—
Solo el semáforo con IA192.6 s36.5%
Solo los vehículos con IA161.9 s46.6%
Sistema completo66.2 s78.2%
Hora pico82.1 s72.9%
Tráfico desbalanceado78.4 s74.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.

Links