Как Создать Многоагентную Транспортную Модель

Привет, Хабр! Давайте представим, что у нас есть задача построить новую дорогу.

Можно построить автомагистраль с двумя полосами движения в каждую сторону, но что, если этого недостаточно? Или, наоборот, окажется, что одной полосы хватило бы, но для реализации проекта пришлось купить много земельных участков? В обоих случаях принятое решение будет неэффективным.

Чтобы свести к минимуму такие риски, специалисты по транспортному планированию обращаются за помощью к компьютерному моделированию.

Эта статья представляет собой небольшой экскурс в мир мультиагентного моделирования.



Как создать многоагентную транспортную модель

Используя модель, являющуюся копией реальной транспортной системы, можно оценить необходимую пропускную способность на каждом участке проектируемой дороги, попробовать разные варианты маршрутизации или, например, оценить срок окупаемости проекта, если речь идет о транспортной системе.

платная дорога в рамках государственно-частного партнерства.

Но можно решить и другие важные задачи: как организовать оптимальные маршруты общественного транспорта и рассчитать потенциальную выручку операторов, как оценить наличие дефицита парковочных мест в конкретном районе и многие другие.

Самое интересное, что в эпоху свободного программного обеспечения построить такую модель может каждый! Одним из наиболее распространенных инструментов мультиагентного моделирования является программа с открытым исходным кодом.

MATSim (многоагентное транспортное моделирование) .

MATSim моделирует поведение отдельных агентов.

Агент — это компьютерное представление отдельного жителя реального мира.

Каждый такой агент имеет ежедневный план, на основе которого он переходит от одного вида деятельности к другому (например, дом-работа-дом, дом-институт-работа-дом, дом-магазин-работа1-работа2-дом и т. д. ), создавая таким образом спрос на дорожную инфраструктуру.

Схематичное изображение плана на день выглядит примерно так:

Как создать многоагентную транспортную модель

Для создания реалистичных планов агентов, которые будут отражать реальное поведение людей в течение суток, принимается общая численность агентов-резидентов, их расселение, места работы, учебы, расположение магазинов, торговых центров, вокзалов и других мест деятельности.

в учетную запись.

Для проверки спроса модель также калибруется на основе полевых исследований: распознавания и подсчета потоков камер видеонаблюдения и дронов с помощью нейросети или, например, ручных измерений интенсивности движения на дорогах.



Как создать многоагентную транспортную модель

В ходе моделирования агенты распределяются по сети, имитируя реалистичное поведение человека: выполняя задуманное, автомобили занимают место на дороге и парковочные места, пользователи общественного транспорта занимают места в автобусе, а также взаимодействуют между собой и, в случае одновременного выбора одной дороги несколькими агентами возникают пробки и заторы.

Все как в реальном мире! После завершения моделирования оценивается выполнение ежедневных планов агентов, называемое скорингом.

Агент приобретает единицы полезности в процессе выполнения деятельности и теряет их при перемещениях.

Соответственно, агенты, оказавшиеся в пробке, теряют больше единиц полезности, чем агенты, движущиеся по свободным дорогам.

После каждой итерации некоторые агенты перестраивают свой план на основе информации о нагрузке на дорожную сеть таким образом, чтобы улучшить свою производительность: агенты могут изменить время отправления, изменить вид транспорта или изменить маршрут. Остальные агенты придерживаются своих предыдущих планов, которые хранятся в памяти программы.

В идеале после моделирования должно быть достигнуто равновесие Нэша, то есть ситуация, в которой ни один агент не может улучшить свое положение, не ухудшая положение других агентов.

Обычно именно такая ситуация складывается со временем на дорогах города, учитывая ежедневное переосмысление его жителями опыта предыдущего дня.

Для этого в рамках одного сценария проводится не менее 200 итераций.

Весь цикл работы MATSim выглядит примерно так:

Как создать многоагентную транспортную модель



От теории к практике!

Для запуска первого скрипта нам понадобится Intellij IDEA (или Eclipse) с Java 1.8 на борту.

Открыть IDE, клонировать Репозиторий MATSim с github, и наш первый скрипт готов к запуску! Это так просто.

Но давайте сначала посмотрим, какие входные файлы мы используем.

Для самой простой симуляции их три: сеть, планы, конфиг.



Сеть

Сетевой файл представляет сеть, по которой перемещаются агенты.

Он состоит из узлов и ребер/ссылок.

Для каждого звена указываются различные атрибуты: тип, длина участка, пропускная способность, максимальная скорость, количество полос, наличие одностороннего движения, разрешенные виды транспорта и т.д.

Как создать многоагентную транспортную модель

Создавать меш города вручную сложно, непрактично и неэффективно.

Например, наша сеть в Санкт-Петербурге состоит из 26 тысяч узлов и 46 тысяч каналов.

Но есть и хорошие новости.

Сетку можно преобразовать из OpenStreetMap, а затем отредактировать с помощью JOSM, который также имеет открытый исходный код.

Планы

Файл планов представляет собой структурированное представление ежедневных планов агентов.

В исходном сценарии у нас есть 100 агентов, которые утром (end_time="05:59") уезжают на машине (mode="car") из дома (type="h", link="1") на работу ( type=”w”, link="20"), после чего через некоторое время (длительность="02:30") возвращаются домой.



Как создать многоагентную транспортную модель



Конфигурация

Наконец, в файле конфигурации указаны все необходимые настройки для запуска сценария.

MATSim состоит из модулей, которые можно настраивать, добавлять или удалять по мере необходимости.

Многие настройки в конфиге интуитивно понятны, но вы также всегда можете заглянуть в т.н.

МАТСим Книга .

Сейчас мы рассмотрим только два модуля.

В модуле planCalcScore задаются параметры скоринга: например, за опоздание (lateArrival) агент получает штраф в размере 18 единиц.

полезность в час (соответственно, опоздание на 10 минут эквивалентно потере 3 единиц полезности); выполнение некоторой деятельности (например, выполнение работы) приносит 6 единиц полезности в час, а поездка на автомобиле имеет затраты в размере тех же 6 единиц полезности в час.

Чтобы найти реалистичные параметры оценки, чаще всего используются социальные опросы для анализа «стоимости» времени».

Модуль стратегии настраивает параметры перепланирования, например, какая доля агентов (ModuleProbability) попробует новый маршрут (ReRoute) во время следующей итерации.



Как создать многоагентную транспортную модель

Таким образом, цель моделирования — помочь агенту добраться из точки А в точку Б с наименьшими затратами.



Запуск сценария

Пришло время открыть раннер RunMatsim и запустить наш первый сценарий! Результаты моделирования будут расположены в папке вывода в корне проекта.

Основные файлы для визуализации — сеть и события.

Файл событий содержит посекундную информацию обо всех действиях каждого агента, поэтому на основе этого файла можно восстановить полную картину перемещения всех агентов.

Вы можете визуализировать результаты, используя С помощью .

Для более показательных результатов я увеличу количество агентов до 500. Вот как выглядит распределение 500 агентов после первой итерации.



Как создать многоагентную транспортную модель

В начале итерации агенты рассчитывали кратчайший путь, используя Дейкстра , в результате чего интенсивность трафика на одном участке сети превысила ее пропускную способность, что привело к возникновению пробок.

А что, если дать им возможность попробовать разные маршруты?

Как создать многоагентную транспортную модель

После 200 итераций (~5 минут) агенты перераспределились по сети, уровень нагрузки на канал теперь не превышает 0,5, а среднее время в пути для всех агентов уменьшилось на 14% (5 минут).

Ура, мы преодолели пробку! О, если бы все было так просто! В действительности транспортные системы гораздо сложнее.

В следующих статьях я расскажу, как я участвовал в разработке моделей Санкт-Петербурга и других городов и как мы решали практические задачи на реальных кейсах.

Scientia potentia est!

Как создать многоагентную транспортную модель

Автор — Андрей Коломацкий, транспортный аналитик OTSLab. Теги: #Транспорт #открытый код #java #Урбанизм #учебные материалы #урбанистика #транспортное моделирование #MATSim

Вместе с данным постом часто просматривают: