Данное приложение представляет собой систему планирования дорожного трафика, использующую методы обучения с подкреплением для решения проблемы максимизации пропускной способности сети. Система предназначена для анализа и оптимизации потоков транспортных средств в сложных городских условиях, что позволяет улучшить эффективность дорожной инфраструктуры и снизить время в пути для пользователей.
Для работы с дорожным трафиком использовался симулятор SUMO (https://github.com/eclipse-sumo/sumo) версии 1.23.0.
Генерация основана на Пуассоновских потоках, интенсивности которых задаются с помощью simulation_parameters_generator.py. Перед началом генерации Пуассоновских потоков происходит генерация малого инициализирующего трафика, который задаёт начальное состояние симуляции.
Формирование светофорных групп реализовано с помощью обхода графа в ширину, в ходе которого каждый узел проверяется является ли он перекрёстком и в случае, если данный узел является перекрёстком, то он добавляется в текущую светофорную группу. Светофорам, которые не вошли в светофорные группы, назначается статическое управление
Пространство наблюдений для одного светофорного объекта состоит из следующих признаков:
- Плотность автомобилей на каждой из двух полос
- Заполненность каждой полосы автомобилями, которые находятся в пробке
- Номер текущей светофорной фазы
- Текущая длительность фазы
- Сигнал о том, текущая длительность фазы меньше 15 секунд, больше 60 секунд или находится в промежутке от 15 до 60 секунд
- Текущее количество пропущенных автомобилей через перекрёсток
Полное пространство наблюдений состоит из 4 светофоров.
Пространство действий состоит из вектора с 4 элементами, каждый из которых равен либо 0, либо 1. Если значение равно 0, значит, текущий светофорный объект не должен переключать текущую фазу, а если равен 1, то следует переключиться на следующую светофорную фазу.
Награда для одного светофорного объекта состоит из следующей суммы:
- Сумма количества автомобилей на каждой полосе, делённое на длину полосы и взятое со знаком минус
- Количество пропущенных автомобилей за последний шаг
- Линейный штраф за переключение текущей светофорной фазы, если её длительность меньше 15 или больше 60 секунд.
Награда за светофорную группу рассчитывается суммированием награды для каждого светофорного объекта.
- Склонируйте репозиторий с помощью следующей команды:
https://github.com/moevm/Car-Traffic-RL-Scheduler.git
- Перейдите в директорию с приложением:
cd Car-Traffic-RL-Scheduler
- Запустите скрипт run-docker.sh, который сделает образ приложения, а затем запустит контейнер на основе данного образа в режиме обучения:
sh run-docker.sh train.sh
- Если Вам необходимо запустить систему в режиме оценки обученного агента, то запустите контейнер следующих образом:
sh run-docker.sh evaluate.sh
- Склонируйте репозиторий следующим образом:
git clone https://github.com/moevm/Car-Traffic-RL-Scheduler.git
- Перейдите в директорию с кодом проекта:
cd Car-Traffic-RL-Scheduler/src
- Создайте переменную окружения и активируйте её:
python3 -m venv .venv && source .venv/bin/activate
- Установите необходимые зависимости:
pip -r requirements.txt
-
Сгенерируйте карту с помощью netgenerate из пакета SUMO так, чтобы каждый светофорный объект имел не более 6 фаз, каждый узел имел от 1 до 4 соседей включительно и каждое ребро имело 2 полосы в одном направлении. Сгенированная карта должна храниться в директории configs.
-
Сгенерируйте конфигурационный файл в папку configs/simulation_parameters помощью simulation_parameters_generator.py. Справку можно просмотреть с помощью следующей команды:
python3 simulation_parameters_generator.py --help
- Запустите обучение или оценку агента с помощью main.py. Справку можно просмотреть с помощью следующей команды:
python3 main.py --help