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

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

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

Одна и та же машина, одна и та же скорость. Сверху перекрестки согласованы в «зеленую волну», снизу сдвинуты на пару секунд. Вся разница в сдвиге фаз. 
Одна и та же машина, одна и та же скорость. Сверху перекрестки согласованы в «зеленую волну», снизу сдвинуты на пару секунд. Вся разница в сдвиге фаз. 

Наивная модель, которая живет у нас в головах

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

Даже формула есть, ее вывел Фрэнк Уэбстер еще в 1958 году, и она до сих пор в учебниках:

C_{\mathrm{opt}} = \frac{1.5 \cdot L + 5}{1 - Y}

где Copt — оптимальная длина цикла в секундах, L — суммарные потери на переключение фаз, Y — сумма коэффициентов загрузки по направлениям. Красиво, аналитически, а главное что работает.

Проблема в том, что эта формула оптимизирует один перекресток при известном и стабильном потоке, но как только вы ставите рядом второй светофор, начинается ад.

Немного математики: да, это NP-трудно, но дело не в этом

Стоит вам захотеть согласовать хотя бы десяток перекрестков в «зеленую волну», и вы попадаете в комбинаторный взрыв. Каждый светофор — это набор параметров (длина цикла, сдвиг фазы, распределение зеленого между направлениями), и они взаимозависимы. Сдвиг на одном перекрестке ломает волну на соседнем. Задача сетевой координации сигналов в общем виде NP-трудная. То есть пространство решений растет экспоненциально, точного решения для города на несколько тысяч перекрестков вы не получите никогда.

И вот тут первый поворот: это не то, что мешает. NP-трудность нас давно не пугает. Существуют эвристики, метаэвристики, приближенные алгоритмы, а с 80-х годов в реальных городах крутятся адаптивные системы вроде британской SCOOT и австралийской SCATS. Они собирают данные с индукционных петель в асфальте и подстраивают фазы почти в реальном времени.

Всего восемь вариантов сдвига на перекресток — и на ~89 перекрестках вариантов больше, чем атомов во Вселенной. Перебор отменяется.
Всего восемь вариантов сдвига на перекресток — и на ~89 перекрестках вариантов больше, чем атомов во Вселенной. Перебор отменяется.

То есть алгоритмы есть. Хорошие, и с математическими гарантиями. И все равно вы стоите на красном на пустом перекрестке. Почему?

Проблема, о которой не пишут: для кого оптимизировать

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

  • Среднее время в пути для машин. Хорошо, но тогда мы душим пешеходов, им дают минимальный зеленый, и бабушка не успевает перейти шестиполосный проспект;

  • Пропускная способность (машин в час). Отлично, оптимизируем и обнаруживаем, что «пропускная способность» и «время ожидания конкретного человека» тянут в разные стороны;

  • Выбросы CO₂. Логично, половина выбросов на перекрестке приходится на разгон после остановки. Но минимум выбросов не равен минимуму времени в пути, и иногда это прямо конфликтует;

  • Приоритет общественного транспорта. Автобус везет 40 человек, легковушка — одна или две. С точки зрения «людей в час» автобусу надо всегда давать зеленый. С точки зрения водителя за автобусом вы монстр;

  • Справедливость. А это вообще как формализовать? Минимизировать максимальное ожидание? Тогда средние проседают. Классическая дилемма «утилитаризм против Роулза», только на асфальте.

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

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

А теперь самое обидное: система сопротивляется

Допустим, вы все-таки договорились о целевой функции и нашли отличное решение. Разгрузили проспект, сделали красивую зеленую волну. Что происходит дальше?

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

Это одна из самых устойчиво воспроизводимых закономерностей в транспортной науке. Жиль Дюрантон и Мэттью Тернер в своих работах сформулировали «фундаментальный закон дорожных заторов»: если вы добавляете пропускной способности на X%, то в итоге получаете примерно X% нового трафика.

А еще есть парадокс Браеса: бывают ситуации, когда добавление новой дороги (или, в нашем случае, «улучшение» перекрестка) делает хуже всем. Потому что каждый водитель эгоистично оптимизирует свой маршрут, и равновесие Нэша в этой игре может оказаться хуже, чем было до вашего вмешательства.

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

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

И тут на сцену выходит ИИ

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

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

Каталог готовых ИИ-моделей

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

Подробнее →

Поэтому самый честный и заметный пример реального ИИ на светофорах — это не RL, который рулит перекрестком напрямую, а кое-что скромнее — Google Project Green Light. И он интересен именно тем, насколько он приземленный.

Green Light берет данные о поездках из Google Maps, моделирует потоки и выдает инженеру города рекомендации: вот здесь в непиковые часы можно снять четыре секунды с красного, а вот эти два соседних перекрестка не синхронизированы, синхронизируйте. 

Инженер смотрит и решает, применять или нет. Внедрение на пять минут, на существующем железе, без новых датчиков. В 2026 проект живет примерно в двух десятках городов на четырех континентах, от Хайфы до Калькутты, Гамбурга и Бостона.

Заявленные цифры: до 30% меньше остановок и до 10% меньше выбросов на обработанных перекрестках.

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

  • Оказывается (внезапно), что эти проценты зависят от базы сравнения. В городах, где стояли старые фиксированные планы, не обновлявшиеся годами, любое вмешательство дает «вау-цифры». То есть это банальная цена запущенности;

  • В Манчестере инженеры регулярно игнорировали рекомендации Google. Дело в том, что алгоритм, который однобоко минимизирует остановки, всего контекста не знает;

  • В Сиэтле одну из рекомендаций откатили из-за того, что на практике «не дала чистого выигрыша».

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

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

Так в чем же настоящее бутылочное горлышко

Возвращаемся к началу, так почему же светофоры «невозможно оптимизировать»?

Еще раз повторю, не потому что это вычислительно сложно. NP-трудность мы обходим эвристиками, а адаптивные системы работают с 80-х. На наших глазах мы поняли, что нет целевой функции. «Оптимально» — это выбор между водителями, пешеходами, автобусами, экологией и справедливостью.

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

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

Как надо было ставить вопрос

Правильная формулировка звучит так: «давайте честно решим, чей интерес мы ставим в приоритет, измеримо это зафиксируем, а дальше алгоритм (хоть Уэбстер, хоть RL, хоть Green Light) будет держать систему как можно ближе к этому осознанному компромиссу, понимая, что люди перестроятся, и это нормально».

Это скучнее, чем «оптимизировать город нейросетью», но это правда. И, по-моему, куда более амбициозная инженерная задача: построить систему, которая остается приемлемой, когда цель убегает, данные врут, а половина агентов действует вам назло.

Так что за выходные это не пофиксить. И за год не пофиксить. И «пофиксить» тут вообще неправильный глагол.

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

Комментарии (6)


  1. bobahvas
    24.07.2026 08:35

    А что, если попробовать менять не только тайминги светофоров?

    Например:

    • дать пешеходам возможность пересекать улицу не мешая транспорту

    • выделенные полосы для общественного транспорта

    • конечно же качественный, предсказуемый общественный транспорт

    • буфферные парковки для иногородних с пересадкой на общественный транспорт

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

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


  1. atues
    24.07.2026 08:35

    Цель убегает именно от вас, потому что реагирует на ваши действия

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

    Вспомнился М.Жванецкий: "что с человеком не делай, он упрямо ползет на кладбище"


    1. ioccy
      24.07.2026 08:35

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


      1. atues
        24.07.2026 08:35

        Вот уж не знаю. Но даже если так, то придется к каждому светофору прилагать суперкомпьютер для численного расчета этих уравнений - уж очень они громоздкие )))


  1. chesser76
    24.07.2026 08:35

    Не знаю как и кто в нашем городе настраивал светофоры, но когда я еду на маршрутке, то обычно 11-12 из 13 светофоров по маршруту горят красным на перекрестках. (1-2 иногда пролетаем на зеленый) В некоторые дни бывает 13 из 13. т.е. маршрутка стоит на красный на КАЖДОМ перекрестке! Маршрут у меня не большой, примерно 7 км. (13 светофоров надо пересечь). Скорость маршрутки не соответствует ритму переключений на все 100? Или это тотальное невезение? :)


    1. Neusser
      24.07.2026 08:35

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