Sistema de Simulación de Tráfico Multi-Agente
El Sistema de Simulación de Tráfico Multi-Agente es una sofisticada simulación de gestión de tráfico construida para modelar el comportamiento de vehículos autónomos en un entorno urbano complejo. Desarrollado como parte de mi curso de IA en el Tecnológico de Monterrey, este proyecto demuestra la intersección de inteligencia artificial, gráficos por computadora y arquitectura de sistemas distribuidos.
La simulación cuenta con vehículos autónomos (agentes) que navegan a través de un entorno de ciudad basado en cuadrícula lleno de carreteras, semáforos, obstáculos y puntos de destino. Cada vehículo calcula independientemente rutas óptimas, toma decisiones en tiempo real para evitar colisiones, cambia de carril cuando es necesario y obedece las señales de tráfico, todo mientras se visualiza en un entorno 3D interactivo.
Características Clave y Aspectos Técnicos
01. Búsqueda de Ruta Inteligente con Memoización
El núcleo de la inteligencia de cada vehículo radica en su algoritmo de búsqueda de rutas. Cada agente de automóvil utiliza Búsqueda en Amplitud (BFS) para calcular la ruta más corta desde su posición actual hasta su destino asignado aleatoriamente.
- Almacenamiento en Caché de Rutas: Las rutas se almacenan en un diccionario memo global con una clave que combina posición de inicio y destino.
- Ganancias de Rendimiento: El sistema rastrea aciertos vs. fallos de memoización, mostrando ahorros computacionales significativos mientras se ejecuta la simulación.
- Recalculación Dinámica: Cuando los vehículos cambian de carril, se calculan nuevas rutas desde la nueva posición y se almacenan en caché para uso futuro.
02. CautionScheduler Personalizado para Prevención de Colisiones
Uno de los aspectos más desafiantes fue prevenir colisiones en las intersecciones. Desarrollé un programador personalizado que gestiona el orden de activación de agentes basado en la conciencia espacial de 'zonas de peligro'.
- Detección de Cuadros de Peligro: El programador identifica puntos de intersección y áreas de fusión de carriles como cuadros de peligro.
- Activación Basada en Prioridad: Los vehículos en zonas de peligro se activan primero, junto con los vehículos que están adelante de ellos.
- Búferes Pre-Peligro: Los vehículos que se acercan a las zonas de peligro se retienen para mantener distancias de seguimiento seguras.
03. Comportamiento Avanzado de Vehículos
Cada vehículo exhibe un comportamiento autónomo realista:
- Cumplimiento de Semáforos: Los autos detectan cuando están en una celda de semáforo y se detienen cuando la luz está en rojo.
- Cambio de Carril Dinámico: Cuando se atascan detrás de otro vehículo por más de un paso, los autos intentan cambiar de carril.
- Evitación de Colisiones: Los vehículos verifican las celdas adyacentes antes de moverse y recalculan rutas cuando se detectan obstáculos.
04. Visualización 3D en Tiempo Real con WebGL
La simulación cuenta con un sofisticado sistema de visualización 3D construido con WebGL:
- Sombreado Phong Personalizado: Se implementaron shaders de vértices y fragmentos para iluminación realista y propiedades de materiales.
- Interpolación Suave: Los movimientos de los vehículos se interpolan durante 200ms para un movimiento fluido entre celdas de la cuadrícula.
- Semáforos Dinámicos: Los semáforos emiten un brillo rojo/verde usando colores de emisión en el shader.
05. Arquitectura REST API con Flask
El backend expone una API REST limpia que separa la lógica de simulación de la visualización. Los endpoints clave incluyen /init, /getCars, /getTrafficLights, /getBuildings, /getRoads y /update.
- Arquitectura Desacoplada: La simulación se ejecuta independientemente de la visualización.
- Actualizaciones en Tiempo Real: El frontend consulta actualizaciones cada 10 cuadros manteniendo animaciones suaves.
06. Representación de la Ciudad Basada en Grafos
El mapa de la ciudad se representa como un grafo de adyacencia dirigido que se construye automáticamente desde un archivo de texto:
- Análisis de Mapa de Texto: Carreteras, semáforos, obstáculos y destinos se codifican con caracteres ASCII.
- Generación de Grafos: Un recorrido BFS construye la estructura del grafo, detectando movimientos válidos y cambios de carril.
07. Recopilación Integral de Datos
El sistema rastrea métricas extensas de simulación:
- Conteo de vehículos activos a lo largo del tiempo y total de vehículos que alcanzaron exitosamente sus destinos.
- Distribución del conteo de pasos mostrando cuántos pasos tomaron los vehículos para alcanzar sus destinos.
- Eficiencia de memoización rastreando aciertos de caché vs. fallos.
Desafíos y Soluciones
01. Prevención de Bloqueos en Intersecciones
Las implementaciones iniciales causaban que los vehículos colisionaran o se bloquearan en las intersecciones cuando múltiples autos intentaban ocupar la misma celda simultáneamente. La solución fue desarrollar el CautionScheduler que identifica zonas de peligro de intersección en la inicialización y gestiona el orden de activación de agentes.
02. Lógica de Cambio de Carril
Cuando los vehículos se quedaban atascados detrás de tráfico más lento, esperarían indefinidamente, creando atascos de tráfico poco realistas. Implementé comportamiento inteligente de cambio de carril que se activa después de que un vehículo ha estado detenido por más de un paso.
03. Optimización de Rendimiento
Recalcular rutas con BFS para cada vehículo en cada paso era computacionalmente costoso. El sistema de memoización almacena en caché las rutas calculadas, y dado que muchos vehículos viajan entre los mismos pares de inicio-destino, esto redujo significativamente los cálculos redundantes.
04. Animación 3D Suave
La simulación discreta basada en cuadrícula causaba movimientos entrecortados de vehículos en la visualización 3D. Implementé interpolación del lado del cliente donde las posiciones de los vehículos se animan suavemente durante 200ms entre celdas de la cuadrícula.
Resultados e Impacto
- Coordinación de Agentes Autónomos: Múltiples vehículos navegan independientemente mientras evitan colisiones.
- Patrones de Tráfico Realistas: Los semáforos crean patrones de parada naturales, y el cambio de carril reduce la congestión.
- Eficiencia de Rendimiento: La memoización reduce la sobrecarga computacional al almacenar en caché rutas de uso frecuente.
- Arquitectura Escalable: El diseño de API REST permite que la simulación se ejecute independientemente de la visualización.