В этом посте я расскажу об одном из моих любимых курсовых проектов в университете.

В 2019 году мы прошли курс «Имитационное моделирование». Домашние задания были реализованы в AnyLogic — программном обеспечении, позволяющем моделировать как работу фуд-корта, так и поведение пассажиров в метро.

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

Однако до уровня обслуживания пассажиров, как в Москве, было далеко. Тогда мне пришла в голову идея воссоздать один из маршрутов и попытаться улучшить его работу. Справедливости ради надо отметить, что городская управа Калуги в те годы тоже предприняла попытку развиваться в этом направлении: у воронежской компании «ДорМостПроект» была заказана программа комплексного развития транспортной инфраструктуры города. Однако этот проект был реализован лишь частично :)

Примечание: сложность его реализации, небольшой опыт имитационного моделирования и ограничения бесплатной версии AnyLogic заставили меня выбрать для моделирования только один из маршрутов — троллейбусный маршрут №1 (оператора МУП ГЭТ УКТ), которым я часто пользуюсь при возвращение домой с вокзала.

Исходные данные

Имеется 22 остановочных пункта, между которыми курсируют троллейбусы с известной интенсивностью λ. Известно также количество транспортных единиц, закрепленных за этим маршрутом, — 7 троллейбусов вместимостью до 40 человек (данные актуальны на момент завершения курсового проекта).

Также имеется 22 автобусные остановки, на которые приходят пассажиры с известной интенсивностью β и ждут прибытия троллейбуса. Сделаем допущение, что люди сразу выстраиваются в очередь (хотя обычно люди стоят на остановке в произвольном порядке, но посадка происходит только через переднюю дверь троллейбуса, и поэтому единая очередь все же образуется). Дисциплина очереди — FIFO (First in — first out).

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

Открытые наборы данных

Количество транспортных средств, закрепленных за маршрутами, временные интервалы прибытия на остановки, а также названия всех остановочных пунктов и их географические координаты (долгота и широта) были взяты из реестра муниципальных маршрутов.

Количество мест для пассажиров в каждом троллейбусе будем считать равным 40 (число ориентировочное, так как количество мест во всех троллейбусах 26, а стоячие места измерить сложно)

Экспериментальные данные

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

Отдельное спасибо водителю, который позволил мне оплатить только одну поездку, а также рассказал пару интересных историй о калужском транспорте :)

Исследование зависимости выходных переменных от входных переменных

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

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

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

Законы о распространении

Разумно представить пассажиропоток как простейший поток событий. В реальности пассажиры на остановке появляются поодиночке и независимо друг от друга примерно с одинаковой интенсивностью в определенные периоды суток. Отсюда следует, что течение обладает свойствами обыкновенности, отсутствия последствий и стационарности. В таком потоке интервалы между событиями имеют экспоненциальное распределение, а вероятности их количества на интервал поезда имеют распределение Пуассона. Если N — случайная величина (количество пассажиров в точке), то вероятности ее значений n определяются по формуле:

где 𝑎 — параметр распределения.

Интервалы между прибытиями троллейбусов являются случайными величинами. Троллейбусные потоки на маршрутах можно считать наиболее простыми, если интервалы более 5 минут (что верно в нашем конкретном случае), т. е. отсутствует последействие. В соответствии с этим интервалы между автомобилями распределяются по экспоненциальному закону вида:

где 𝜆 – средняя интенсивность потока троллейбусов.

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

Моделирование в среде AnyLogic

Рассмотрим структуру и основные компоненты получившейся модели.

Верхним уровнем иерархии в модели является корневой активный объект «Главный». Содержит ГИС-карту, на которой отмечены все остановки транспорта. Они связаны маршрутами ГИС.

«Главная» содержит все точки остановки. Для наглядности они также наложены на карту в виде регионов ГИС.

К сожалению, моих знаний об AnyLogic, полученных в домашних и лабораторных работах, оказалось недостаточно, чтобы понять, как построить такую ​​модель. Слава богу, что есть на свете статьи Елисеева и Липенкова:

https://cyberleninka.ru/article/n/o-modeli-gorodskogo-passazhirskogo-transporta-modelirovanie-logiki-passazhira/viewer

http://simulation.su/files/immod2013/material/immod-2013-2-179-183.pdf

https://www.anylogic.ru/resources/articles/modelirovanie-passazhirskogo-avtobusnogo-marshruta-v-anylogic/

К сожалению, готовых моделей для AnyLogic, прикрепленных к этим публикациям, не было, но общие идеи, как смоделировать работу троллейбусов и депо, сильно облегчили мне жизнь. (Правда, модель полностью заработала только в ночь перед итоговой презентацией курсового проекта после пары бессонных ночей из-за моментов, связанных с программированием и отсутствия хорошей документации и примеров, как, например, Python)

Агент типа Станция представляет собой схему автобусной остановки (см. рис. ниже). Троллейбусы прибывают через блок enter1, после чего через блок dropoff высаживаются пассажиры, которые хотели доехать до этой остановки. С помощью delay моделируется время выхода из транспорта. Затем с помощью пикапа пассажиры заходят в троллейбус до тех пор, пока вся остановка не опустеет, либо в транспорте не останется сидячих и стоячих мест. С помощью delay1 моделируется время, затрачиваемое на посадку. Приземлившись через блок moveTo, троллейбус отправляется на следующую остановку. Через enter2 пассажиры подходят к остановке и встают в очередь в блоке queue.

Ниже представлена ​​схема устройства троллейбусного депо:

Водители идут на работу через блок sourceT и садятся за руль в блоке seize (ресурс Bus_1 захватывается из блок resourcePool1).

Драйвер (тип агента драйвера) имеет четыре свойства:

Пассажир — количество пассажиров внутри троллейбуса.

Кругов — количество кругов, оставшихся до конца рабочей смены.

Route_start — время начала следующего круга маршрута.

Обслужено_пассажиров — количество пассажиров, перевезенных за данный круг маршрута.

пассажир (типа Passanger) имеет параметр Bus_stop_want , указывающий желаемый пункт назначения для этого человека.

На рисунке выше показана схема двух последних остановок. Левая половина по устройству такая же, как и остальные упоры и вынесена отдельно только для удобства работы с индексацией. С правой стороны схема работы конечной остановки. Все остальные пассажиры покидают транспорт через блок dropoff16. Затем в блоке selectOutput8 происходит выбор дальнейшего поведения, если смена машиниста подошла к концу, то через moveTo2 он возвращается в депо, иначе ждет около 5 минут и снова начинает движение по маршруту.

График норм прихода пассажиров на остановки реализуется через блоки Расписание. Аналогичным образом задается интенсивность движения на дороге между остановками.

Результаты симуляции

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

Видео демонстрация модели

Ниже приведены выходные параметры, которые мы хотели измерить.

Стоило дать названия вместо сухих item2, item9, но времени катастрофически не хватало :)

Улучшение конфигурации троллейбусного маршрута

Структурный синтез

Попробуем улучшить качество обслуживания пассажиров, изменив структуру нашей системы: увеличим количество троллейбусов, курсирующих по маршруту, на 2 (один дополнительный запускаем в 11:00, другой — в 16:30).

В результате нам удалось сократить среднее время ожидания троллейбуса почти на 4 минуты, а вероятность не обслуженного снизилась примерно на 21%.

Параметрический синтез

Попробуем улучшить качество обслуживания пассажиров, настроив следующие параметры нашей системы: увеличить количество мест в троллейбусах, курсирующих по маршруту, на 20 (например, это возможно при покупке новой, более вместительной модели), а также сократить время посадки на 10 секунд (например, можно поставить кондуктора, так как именно этот маршрут на данный момент работает без кондуктора и проход только через парадную)

В результате нам удалось сократить среднее время ожидания троллейбуса на 1 минуту, а вероятность не обслуженного снизилась примерно на 15%.

Заключение

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

Github с курсовой: https://github.com/malynkovsky/Kaluga_transport_simulation

LinkedIn: https://www.linkedin.com/in/malynkovsky/

Telegram-канал автора: