AI-система управления трафиком и оптимизация светофоров
Светофорная оптимизация — классическая задача MARL: каждый перекрёсток — агент, который видит локальный трафик и адаптирует фазы. CityFlow и SUMO — открытые симуляторы с Python API. Реальные внедрения (Hangzhou, Saudi Arabia) показывают -15–30% к среднему времени ожидания.
Почему RL превосходит фиксированные фазы
Фиксированные циклы работают хорошо при предсказуемом потоке. Адаптивные системы (SCOOT, SCATS) требуют ручной калибровки. RL агент оптимизирует напрямую под трафик без ручного тюнинга и адаптируется к аномалиям (ДТП, дожди, мероприятия).
Задача: N перекрёстков, у каждого K фаз (направлений). Агент выбирает текущую фазу и длительность → минимизация суммарного времени ожидания.
CityFlow — среда симуляции
import cityflow
# конфигурация города из JSON (дороги, перекрёстки, трафик)
eng = cityflow.Engine('config.json', thread_num=4)
# состояние перекрёстка
lane_vehicles = eng.get_lane_vehicle_count() # машин в каждой полосе
lane_waiting = eng.get_lane_waiting_vehicle_count()
current_phase = eng.get_current_phase(intersection_id)
# действие: сменить фазу
eng.set_tl_phase(intersection_id, new_phase)
eng.next_step()
Gym-совместимая среда
class TrafficEnv(gym.Env):
def __init__(self, n_intersections, config_path):
self.n = n_intersections
self.eng = cityflow.Engine(config_path)
# observation per intersection: vehicle counts + waiting + phase
obs_dim = 12 + 12 + 8 # 12 подъездных полос, 8 фаз
self.observation_space = spaces.Box(
low=0, high=100, shape=(n_intersections, obs_dim))
# action: выбор фазы для каждого перекрёстка
self.action_space = spaces.MultiDiscrete([8] * n_intersections)
def step(self, actions):
for i, action in enumerate(actions):
self.eng.set_tl_phase(f'intersection_{i}', int(action))
# несколько шагов симуляции на одно решение агента
for _ in range(self.control_interval): # 10–30 сек
self.eng.next_step()
obs = self._get_obs()
reward = -self.eng.get_average_travel_time() # минимизируем ATT
return obs, reward, False, False, {}
MARL алгоритмы для трафика
Independent DQN (InDQN): Каждый перекрёсток — независимый DQN агент. Другие агенты — часть среды. Простейший baseline, часто работает неплохо.
Cooperative Light (CoLight): Attention mechanism для учёта соседних перекрёстков. Агент перекрёстка i внимательно смотрит на соседей j:
class CoLightAttention(nn.Module):
def forward(self, own_obs, neighbor_obs):
# own_obs: [batch, obs_dim]
# neighbor_obs: [batch, n_neighbors, obs_dim]
query = self.q_proj(own_obs).unsqueeze(1)
keys = self.k_proj(neighbor_obs)
values = self.v_proj(neighbor_obs)
attention = F.softmax(
torch.bmm(query, keys.transpose(1,2)) / math.sqrt(self.d_k), dim=-1
)
context = torch.bmm(attention, values).squeeze(1)
return self.output_proj(torch.cat([own_obs, context], dim=-1))
MPLight: Сочетает pressure-based feature engineering (queue pressure) с MARL. Лучшие результаты на CityFlow benchmarks.
Reward Engineering
def compute_reward(self, intersection_id):
# вариант 1: queue length (простой)
queue = sum(self.eng.get_lane_waiting_vehicle_count()[lane]
for lane in self.intersection_lanes[intersection_id])
return -queue
# вариант 2: pressure (разница очередей)
incoming = sum incoming lane queues
outgoing = sum outgoing lane queues
return -(incoming - outgoing) # "pressure"
# вариант 3: average travel time (глобальная метрика)
return -self.eng.get_average_travel_time()
Pressure-based reward работает лучше queue length: учитывает downstream congestion.
Интеграция с реальными контроллерами
SCATS/SCOOT совместимость: Большинство городских сетей используют SCATS (Australia) или SCOOT (UK). RL решение должно формировать сигналы в формате этих систем.
NTCIP протокол: National Transportation Communications for ITS Protocol. Управление светофорами через SNMP. RL агент → NTCIP команды.
OpenTMS: Открытый стандарт для traffic management. REST API для получения состояния + управления.
Actuated control fallback: При отказе RL (сетевой сбой, аномальный трафик) — автоматический переход на actuated control (детекторы транспорта).
Данные и мониторинг
Источники данных:
- Видеодетекторы (перекрёстки с камерами) → очереди в реальном времени
- Индуктивные петли → точный подсчёт
- GPS флот (такси, автобусы) → travel time feedback
- Connected Vehicles (V2X/C-V2X) → proactive optimization
KPI мониторинг:
- Average Travel Time (ATT) — основная метрика
- Queue length per lane
- Number of stops per vehicle
- Throughput (vehicles/hour/intersection)
Сравнение с baseline (фиксированные фазы): целевое улучшение ATT -20% для смешанного трафика.
Масштабирование
Hierarchical control:
- Микроуровень: отдельные перекрёстки (MARL агенты)
- Макроуровень: arterial coordinator для зелёной волны
- Мета-уровень: citywide traffic management (demand prediction + signal coordination)
Graph Neural Networks: Дорожная сеть как граф → GNN для propagation информации. Агент перекрёстка i получает embeddings от всех перекрёстков через k-hop neighbourhood.
Сроки: 12–24 недели
RL агент в CityFlow на одном перекрёстке — 4 недели. Координированная MARL система для района (20–50 перекрёстков) с attention — 12 недель. Реальное внедрение с интеграцией в городскую инфраструктуру — 20–24 недели.







