Каждый айтишник, который хоть раз стоял «на красном» на пустом перекрестке в три часа ночи, думал одно и то же: «Да я бы это за выходные пофиксил».
Я тоже так ненароком подумал. Потом начал разбираться, как устроено управление светофорами и выяснил кое-что интересное. Оказывается сама постановка задачи «как оптимизировать светофоры» при ближайшем рассмотрении рассыпается на глазах. Неочевидно, но это не задача оптимизации в том смысле, в котором мы привыкли. И самое обидное, что компьютер тут не главное бутылочное горлышко.
Давайте по порядку, потому что путь от «я исправлю это за выходные» до «а, вот почему до сих пор не пофиксили» это, честно, лучшая экскурсия по тому, чем реальная инженерия отличается от академической.

Наивная модель, которая живет у нас в головах
Когда мы говорим «оптимизировать работу светофора», в голове рисуется такая картинка: есть перекресток, на него едут машины, надо так расставить зеленые фазы, чтобы суммарное время ожидания было минимальным, как на анимации выше. Классическая задача управления.
Даже формула есть, ее вывел Фрэнк Уэбстер еще в 1958 году, и она до сих пор в учебниках:
1.5 · L + 5
C_opt = ─────────────
1 − Y
где C_opt — оптимальная длина цикла в секундах, L — суммарные потери на переключение фаз, Y — сумма коэффициентов загрузки по направлениям. Красиво, аналитически, а главное что работает.
Проблема в том, что эта формула оптимизирует один перекресток при известном и стабильном потоке, но как только вы ставите рядом второй светофор, начинается ад.
Немного математики: да, это NP-трудно, но дело не в этом
Стоит вам захотеть согласовать хотя бы десяток перекрестков в «зеленую волну», и вы попадаете в комбинаторный взрыв. Каждый светофор — это набор параметров (длина цикла, сдвиг фазы, распределение зеленого между направлениями), и они взаимозависимы. Сдвиг на одном перекрестке ломает волну на соседнем. Задача сетевой координации сигналов в общем виде NP-трудная. То есть пространство решений растет экспоненциально, точного решения для города на несколько тысяч перекрестков вы не получите никогда.
И вот тут первый поворот: это не то, что мешает. NP-трудность нас давно не пугает. Существуют эвристики, метаэвристики, приближенные алгоритмы, а с 80-х годов в реальных городах крутятся адаптивные системы вроде британской SCOOT и австралийской SCATS. Они собирают данные с индукционных петель в асфальте и подстраивают фазы почти в реальном времени.

То есть алгоритмы есть. Хорошие, и с математическими гарантиями. И все равно вы стоите на красном на пустом перекрестке. Почему?
Проблема, о которой не пишут: для кого оптимизировать
Любая оптимизация начинается с целевой функции. Напишите, что мы минимизируем и мы вместе подумаем над алгоритмом. И вот тут разговор обычно заканчивается, не начавшись, потому что варианты такие:
- Среднее время в пути для машин. Хорошо, но тогда мы душим пешеходов, им дают минимальный зеленый, и бабушка не успевает перейти шестиполосный проспект;
- Пропускная способность (машин в час). Отлично, оптимизируем и обнаруживаем, что «пропускная способность» и «время ожидания конкретного человека» тянут в разные стороны;
- Выбросы CO₂. Логично, половина выбросов на перекрестке приходится на разгон после остановки. Но минимум выбросов не равен минимуму времени в пути, и иногда это прямо конфликтует;
- Приоритет общественного транспорта. Автобус везет 40 человек, легковушка — одна или две. С точки зрения «людей в час» автобусу надо всегда давать зеленый. С точки зрения водителя за автобусом вы монстр;
- Справедливость. А это вообще как формализовать? Минимизировать максимальное ожидание? Тогда средние проседают. Классическая дилемма «утилитаризм против Роулза», только на асфальте.
То есть это не техническая проблема. У «оптимального» светофора нет объективного определения, потому что нет объективного определения «хорошо». Вы не оптимизируете функцию, остается только выбирать, чьи интересы важнее, и зашиваете этот выбор в секунды зеленого.

А теперь самое обидное: система сопротивляется
Допустим, вы все-таки договорились о целевой функции и нашли отличное решение. Разгрузили проспект, сделали красивую зеленую волну. Что происходит дальше?
Люди узнают, что по проспекту стало ехать быстрее, и начинают ездить по нему. Через неделю поток вырос ровно настолько, чтобы съесть весь ваш выигрыш. Это называется индуцированный спрос.
Это одна из самых устойчиво воспроизводимых закономерностей в транспортной науке. Жиль Дюрантон и Мэттью Тернер в своих работах сформулировали «фундаментальный закон дорожных заторов»: если вы добавляете пропускной способности на X%, то в итоге получаете примерно X% нового трафика.
А еще есть парадокс Браеса: бывают ситуации, когда добавление новой дороги (или, в нашем случае, «улучшение» перекрестка) делает хуже всем. Потому что каждый водитель эгоистично оптимизирует свой маршрут, и равновесие Нэша в этой игре может оказаться хуже, чем было до вашего вмешательства.
Вот в этом и суть. Светофор — это не задача управления. У вас нет пассивного объекта, которым вы рулите. У вас есть тысячи агентов, которые адаптируются к каждому вашему изменению и утаскивают систему в новое равновесие. Вы оптимизируете под вчерашний трафик, а к завтрашнему трафик уже перестроился под вашу оптимизацию. Цель убегает именно от вас, потому что реагирует на ваши действия. Теория управления такое не любит.

И тут на сцену выходит ИИ
Раз это игра тысяч адаптивных агентов в среде, которую невозможно описать замкнутой формулой, то звучит как идеальная работа для обучения с подкреплением, правда? Агент, среда, награда, миллион эпизодов, PROFIT.
За последние годы вышли буквально сотни статей, где RL-агент учится управлять светофорами и красиво уделывает фиксированные планы, в симуляторе. И вот тут прячется главный нюанс, о котором в пресс-релизах молчат. Модель, обученная в симуляторе, встречается с реальным перекрестком, где датчики врут, а поведение водителей не совпадает с моделью. И половина изящества осыпается.
Поэтому самый честный и заметный пример реального ИИ на светофорах — это не RL, который рулит перекрестком напрямую, а кое-что скромнее — Google Project Green Light. И он интересен именно тем, насколько он приземленный.
Green Light берет данные о поездках из Google Maps, моделирует потоки и выдает инженеру города рекомендации: вот здесь в непиковые часы можно снять четыре секунды с красного, а вот эти два соседних перекрестка не синхронизированы, синхронизируйте.
Инженер смотрит и решает, применять или нет. Внедрение на пять минут, на существующем железе, без новых датчиков. В 2026 проект живет примерно в двух десятках городов на четырех континентах, от Хайфы до Калькутты, Гамбурга и Бостона.
Заявленные цифры: до 30% меньше остановок и до 10% меньше выбросов на обработанных перекрестках.
А теперь — почему я привожу этот пример как иллюстрацию главного, о чем статья. Потому что если копнуть отзывы самих инженеров, всплывает ровно то, что мы обсуждали выше:
- Оказывается (внезапно), что эти проценты зависят от базы сравнения. В городах, где стояли старые фиксированные планы, не обновлявшиеся годами, любое вмешательство дает «вау-цифры». То есть это банальная цена запущенности;
- В Манчестере инженеры регулярно игнорировали рекомендации Google. Дело в том, что алгоритм, который однобоко минимизирует остановки, всего контекста не знает;
- В Сиэтле одну из рекомендаций откатили из-за того, что на практике «не дала чистого выигрыша».
Видите? Даже лучший на сегодня ИИ-продакшен на этой задаче упирается ровно в те же две стены: у задачи нет единственной целевой функции (Манчестер оптимизирует не то, что оптимизирует Google), и выигрыш часто оказывается платой за то, что раньше просто никто не занимался базовой настройкой.
ИИ здесь работает, но работает как очень хорошо информированный ассистент, а решение остается за живым инженером, знающим, что вот на этой улице школа, а вот тут автобусный маршрут. Это, кстати, довольно точная метафора того, куда ИИ вообще сейчас применим: «дай человеку суперзрение в задаче, которую все равно определяет человек».
Так в чем же настоящее бутылочное горлышко
Возвращаемся к началу, так почему же светофоры «невозможно оптимизировать»?
Еще раз повторю, не потому что это вычислительно сложно. NP-трудность мы обходим эвристиками, а адаптивные системы работают с 80-х. На наших глазах мы поняли, что нет целевой функции. «Оптимально» — это выбор между водителями, пешеходами, автобусами, экологией и справедливостью.
И еще потому что система адаптивная и враждебная. Индуцированный спрос и парадокс Браеса гарантируют, что часть вашего выигрыша съест перестроившееся поведение людей.
Обратите внимание: некоторые вещи тут вообще не про код. Классический инженерный самообман увидеть в живой социотехнической системе чистую алгоритмическую задачу, потому что алгоритмическую задачу мы умеем решать, а вот «договориться, чего мы вообще хотим от города» нет.
Как надо было ставить вопрос
Правильная формулировка звучит так: «давайте честно решим, чей интерес мы ставим в приоритет, измеримо это зафиксируем, а дальше алгоритм (хоть Уэбстер, хоть RL, хоть Green Light) будет держать систему как можно ближе к этому осознанному компромиссу, понимая, что люди перестроятся, и это нормально».
Это скучнее, чем «оптимизировать город нейросетью», но это правда. И, по-моему, куда более амбициозная инженерная задача: построить систему, которая остается приемлемой, когда цель убегает, данные врут, а половина агентов действует вам назло.
Так что за выходные это не пофиксить. И за год не пофиксить. И «пофиксить» тут вообще неправильный глагол.