Cómo crear un modelo de transporte multiagente

Hola Habr!

Imagine que tenemos la tarea de construir un nuevo camino. Puede construir una carretera con dos carriles en cada dirección, pero ¿qué pasa si esto no es suficiente? O, por el contrario, resulta que una franja sería suficiente, pero para la implementación del proyecto fue necesario comprar muchas parcelas. En ambos casos, la decisión será ineficaz. Para minimizar tales riesgos, los planificadores de transporte recurren al modelado por computadora en busca de ayuda. Este artículo es una breve digresión al mundo del modelado multiagente.



Usando el modelo, que es una copia del sistema de transporte real, puede estimar el rendimiento necesario en cada sección de la carretera proyectada, probar diferentes opciones de rastreo o, por ejemplo, estimar el período de recuperación de un proyecto si se trata de una carretera de peaje en el marco de una asociación público-privada. Pero se pueden resolver otras tareas importantes: cómo organizar rutas de transporte público óptimas y calcular los ingresos potenciales de los operadores, cómo evaluar la presencia de escasez de espacios de estacionamiento en un área en particular y muchos otros.

¡Lo más interesante es que cualquiera puede construir un modelo similar en la era del software libre!

Una de las herramientas de modelado multiagente más comunes es el código abierto.MATSim (Simulación de transporte multiagente) .

MATSim simula el comportamiento de agentes individuales. Un agente es una representación informática de un individuo en el mundo real. Cada uno de estos agentes tiene un plan diario, en base al cual se mueve de una actividad a otra (por ejemplo, hogar-trabajo-hogar, hogar-instituto-trabajo-hogar, hogar-tienda-trabajo1-trabajo2-hogar, etc.), creando De ahí la demanda de infraestructura vial. Una representación esquemática del plan diario se ve así:

imagen

Para crear planes realistas para los agentes que reflejen el comportamiento real de las personas durante el día, se tiene en cuenta el número total de agentes residentes, su reasentamiento, lugares de trabajo, estudio, ubicación de tiendas, centros comerciales, estaciones de tren y otros lugares de actividad. Para validar la demanda, el modelo también se calibra en base a encuestas de campo: reconocimiento y cálculo de los flujos de cámaras de vigilancia y drones utilizando una red neuronal o, por ejemplo, mediciones manuales de intensidad en carreteras.

imagen

Durante la simulación, los agentes se distribuyen a través de la red, imitando el comportamiento realista de las personas: implementando su plan, los automóviles ocupan un lugar en la carretera y espacios de estacionamiento, los usuarios del transporte público toman lugar en el autobús y también interactúan entre sí y, si muchos agentes seleccionan una carretera a la vez, se crean embotellamientos y congestión. ¡Todo es como en el mundo real!

Una vez que se completa la simulación, se realiza una evaluación del cumplimiento de los planes diarios de los agentes, llamado puntaje. El agente adquiere unidades de utilidad en el proceso de actividad y las pierde durante el movimiento. En consecuencia, los agentes atrapados en un embotellamiento pierden más unidades de servicios públicos que los agentes que se mueven por las carreteras libres.

Después de cada iteración, algunos agentes reconstruyen su plan en función de la información sobre la carga de la red de carreteras para mejorar su rendimiento: los agentes pueden cambiar la hora de salida, cambiar el modo de transporte o cambiar la ruta. Los agentes restantes se adhieren a sus planes anteriores, que se almacenan en la memoria del programa.

Idealmente, después de la simulación, se debe lograr un equilibrio de Nash, es decir, una situación en la que ningún agente pueda mejorar su posición sin empeorar la posición de otros agentes. Por lo general, esta es la situación que se desarrolla con el tiempo en las carreteras de la ciudad, dado el replanteamiento diario de la experiencia del día anterior por parte de sus residentes. Para esto, se realizan al menos 200 iteraciones en el marco de un escenario. Todo el ciclo de trabajo de MATSim se ve así:

imagen

¡De la teoría a la práctica!


Para ejecutar el primer escenario, necesitamos Intellij IDEA (o Eclipse) con Java 1.8 a bordo.
¡Abrimos el IDE, clonamos el repositorio MATSim del github y nuestro primer escenario está listo para ejecutarse! Tan sencillo. Pero primero veamos qué archivos de entrada usamos. Para la simulación más simple, hay tres de ellos: red, planes, configuración.

Red


El archivo de red es la red en la que se mueven los agentes. Se compone de nodos y nodos / enlaces. Cada enlace tiene diferentes atributos: tipo, longitud del segmento, ancho de banda, velocidad máxima, número de carriles, tráfico unidireccional, modos de transporte permitidos, etc.

imagen

Crear una cuadrícula de ciudad manualmente es difícil, poco práctico e ineficiente. Por ejemplo, nuestra red de San Petersburgo consta de 26 mil nodos y 46 mil enlaces. Pero hay buenas noticias. La cuadrícula se puede convertir de OpenStreetMap y luego editar con JOSM, que también es de código abierto.

Planes


El archivo de planes es una representación estructurada de los planes diarios de los agentes. En el escenario inicial, tenemos 100 agentes que salen en automóvil (modo = "automóvil") por la mañana (end_time = "05:59") desde su casa (tipo = "h", enlace = "1") para trabajar (tipo = "W", enlace = "20"), después de lo cual después de un tiempo (dur = "02:30") regresan a casa.



Config


Finalmente, en el archivo de configuración, todas las configuraciones necesarias se configuran para ejecutar el script. MATSim consta de módulos que puede personalizar, agregar o eliminar según sea necesario.
Muchas de las configuraciones en el archivo de configuración son intuitivas, pero también siempre puede examinar el llamado. MATSim Book . Ahora consideraremos solo dos módulos.
En el módulo planCalcScore, se establecen parámetros de puntuación: por ejemplo, para llegadas tardías, el agente recibe una multa de 18 unidades. utilidad por hora (respectivamente, llegar tarde 10 minutos equivale a perder 3 unidades de utilidad); realizar alguna actividad (por ejemplo, realizar) aporta 6 unidades de utilidad por hora, y conducir un automóvil cuesta las mismas 6 unidades de utilidad por hora. Para buscar parámetros de puntaje realistas, las encuestas de opinión se utilizan con mayor frecuencia para analizar el "costo tiempo ".

En el módulo de estrategia, los parámetros de re-planificación se configuran, por ejemplo, qué porcentaje de los agentes (ModuleProbability) probará la nueva ruta (ReRoute) durante la próxima iteración.



Por lo tanto, el objetivo de la simulación es ayudar al agente a llegar del punto A al punto B al menor costo.

Script ejecutado


¡Es hora de abrir RunMatsim runner y ejecutar nuestro primer script!

Los resultados de la simulación estarán en la carpeta de salida en la raíz del proyecto. Los archivos principales para la visualización son redes y eventos. El archivo de eventos contiene información por segundo sobre todas las acciones de cada agente, por lo tanto, en función de este archivo, puede restaurar la imagen completa del movimiento de todos los agentes. Puede visualizar los resultados usando Via .
Para obtener resultados más representativos, aumentaré el número de agentes a 500. Así es como se ve la distribución de 500 agentes después de la primera iteración ...



Al comienzo de la iteración, los agentes calcularon la forma más corta usando DijkstraComo resultado, la intensidad del tráfico en una sección de la red excedió su rendimiento, se formó una congestión. Pero, ¿qué pasa si les das la oportunidad de probar diferentes rutas?



Después de 200 iteraciones (~ 5 minutos), los agentes se redistribuyeron a través de la red, el nivel de carga del enlace ahora no supera 0.5, y el tiempo de viaje promedio para todos los agentes disminuyó en un 14% (5 minutos). ¡Hurra, hemos superado el corcho!

¡Oh, si fuera así de simple! En realidad, los sistemas de transporte son mucho más complicados. En los siguientes artículos les contaré cómo participé en el desarrollo de modelos de San Petersburgo y otras ciudades y cómo resolvimos problemas prácticos en casos reales. Scientia potentia est!



Publicado por Andrey Kolomatsky, analista de transporte de OTSLab.

All Articles