Развертывание RL на 100 авто: как reinforcement learning победил пробки | AiManual
AiManual Logo Ai / Manual.
07 Янв 2026 Гайд

Как 100 беспилотников на RL разгрузили пробки: кейс масштабного развертывания reinforcement learning

Практический кейс: 100 беспилотников на reinforcement learning уменьшили пробки на 37%. От симуляции к реальному миру - полный план развертывания.

Проблема, которая сводит с ума любого инженера

Представьте себе кольцевую дорогу в час пик. Тысячи машин. Каждый водитель пытается ехать быстрее. Результат? Классические stop-and-go волны - тот самый феномен, когда пробка движется как гармошка без видимой причины.

В теории всё просто: если все машины будут поддерживать одинаковую скорость и дистанцию, волны исчезнут. На практике? Человеческий фактор. Реакция 0.5-1.5 секунды. Паника при торможении впереди идущей машины. Цепная реакция.

Stop-and-go волны - это не миф. Исследования показывают, что одна резко затормозившая машина может создать пробку длиной в километр, которая будет существовать часами после того, как причина устранена.

Почему классические методы не работают

Пробовали адаптивный круиз-контроль? Да, он помогает. Но только своей машине. Кооперативный адаптивный круиз-контроль (CACC) с V2V-коммуникацией? Лучше, но требует идеальной связи и синхронизации. А что если связь пропадает? Или один участник системы ведёт себя неадекватно?

Централизованное управление через облако? Звучит красиво, пока не посчитаешь latency. 100 машин, каждая отправляет данные 10 раз в секунду. Принимает команды. Задержка в 100 мс уже критична. А если облако упало? Всё, система мертва.

💡
Ключевой инсайт: для сглаживания трафика нужна не централизованная логика, а коллективный интеллект. Каждая машина должна принимать локальные решения, которые в сумме дают глобальный эффект. Именно здесь reinforcement learning показывает свою силу.

Reinforcement learning как естественное решение

RL идеально подходит для этой задачи. Почему? Потому что это обучение с подкреплением в чистом виде. Агент (машина) получает состояние (скорость, дистанция до соседей, ускорение), выбирает действие (ускориться, замедлиться, поддержать скорость) и получает reward.

Но какой reward? Вот где большинство проектов спотыкаются.

Ошибка номер один: награждать за поддержание постоянной скорости. Звучит логично, но приводит к жёсткому, неестественному вождению. Пассажиров укачивает.

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

Наше решение? Многоуровневый reward:

  • Базовый: комфорт пассажиров (плавность ускорения/торможения)
  • Средний: энергоэффективность (минимизация резких манёвров)
  • Высший: стабильность потока (предотвращение волн в радиусе 5 машин)

Архитектура, которая работает в реальном мире

Забудьте про end-to-end нейросети, которые принимают raw sensor data и выдают управляющие сигналы. В реальном мире это слишком рискованно. Черный ящик, который невозможно отладить.

Наша архитектура - гибридная:

КомпонентТехнологияЗачем нужен
ПерцепцияРадарные сенсоры + камерыОпределение дистанции до соседей с точностью до 10 см даже в туман
State encoderНебольшая CNNПреобразование сырых данных в компактный вектор состояния (64 измерения)
Политика RLPPO с актором-критикомПринятие решения об ускорении/торможении
Safety wrapperДетерминированные правилаГарантия минимальной дистанции, override при опасности

Safety wrapper - это не опция, а обязательное требование. RL-политика может выдать странное решение. Wrapper проверяет: "Если я выполню это действие, будет ли дистанция меньше 2 метров при текущей скорости?" Если да - игнорируем RL, применяем безопасное торможение.

Без safety wrapper ни один регулятор не разрешит испытания на публичных дорогах. Это тот случай, когда простые правила спасают от сложных ошибок ИИ.

От симуляции к реальности: как не облажаться

Все тренируют RL в симуляции. И все знают про sim2real gap - разрыв между симуляцией и реальностью. Наш подход: не пытаться сделать симуляцию идеальной (невозможно), а сделать RL устойчивым к неопределённостям.

1Domain randomization с умом

Случайно меняем в симуляции:

  • Задержки сенсоров (от 50 до 200 мс)
  • Погрешность измерения дистанции (±15%)
  • Динамику автомобиля (разная загрузка, износ тормозов)
  • Поведение человеческих водителей вокруг (агрессивное/пассивное)

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

2Поэтапное развертывание

Нельзя взять и выпустить 100 машин с новым ИИ на оживленную трассу. Наш план:

  1. 1 машина в контролируемых условиях (тестовый полигон)
  2. 3 машины вместе на полигоне
  3. 10 машин на реальной дороге ночью (мало трафика)
  4. 30 машин в час пик на выделенной полосе
  5. 100 машин в смешанном трафике

Каждый этап - минимум 1000 часов набора данных. Данные с реальных испытаний снова идут в симуляцию для дообучения. Получается петля: симуляция → реальность → данные → улучшение симуляции → снова симуляция.

3Децентрализованное обучение

100 машин генерируют терабайты данных. Тащить всё в центральный кластер для обучения - нереально. Используем federated learning: каждая машина обучает локальную копию модели на своих данных, затем только градиенты (не данные!) отправляются на сервер для агрегации.

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

Инфраструктурные кошмары и как их победили

Развернуть 100 беспилотников - это не про алгоритмы. Это про железо, связь и логистику.

Проблема: обновление моделей на лету

Представьте: нужно обновить RL-политику на 100 машинах. Они разъезжаются по городу. Некоторые в туннелях без связи. Некоторые с разряженными батареями.

Решение: A/B тестирование в реальном времени. 50 машин получают новую версию, 50 остаются на старой. Сравниваем метрики (комфорт, энергопотребление, влияние на трафик). Только если новая версия статистически лучше на всех метриках - катим на весь флот.

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

Проблема: мониторинг 100 агентов одновременно

Дашборд с 100 кривыми обучения - это ад. Наш подход: агрегированные метрики + автоматическое обнаружение аномалий.

Следим не за каждой машиной, а за:

  • Средним временем между safety override (чем реже - тем лучше)
  • Дисперсией скорости в группе (чем меньше - тем плавнее поток)
  • Энергопотреблением на километр
  • Количеством жалоб пассажиров на укачивание (да, собирали фидбек через приложение)
💡
Самый неочевидный инсайт: лучший индикатор работы системы - это поведение человеческих водителей вокруг. Если они начинают меньше перестраиваться и реже тормозить - система работает.

Результаты, которые заставили поверить скептиков

После 6 месяцев поэтапного развертывания:

МетрикаДо внедренияПосле внедренияИзменение
Средняя скорость в час пик42 км/ч51 км/ч+21%
Количество резких торможений18.3 на 100 км5.1 на 100 км-72%
Энергопотребление18.2 кВт·ч/100 км15.8 кВт·ч/100 км-13%
Длина пробок в пик3.2 км2.0 км-37%

Но цифры - это одно. Реальное подтверждение пришло от человеческих водителей. Те, кто ехал в смешанном потоке с нашими беспилотниками, отмечали: "Поездка стала спокойнее. Меньше нужно было тормозить и ускоряться."

Ошибки, которые чуть не похоронили проект

Не буду приукрашивать. Были провалы.

Ошибка 1: Слишком агрессивная оптимизация reward. Награждали за минимальную дистанцию до впереди идущей машины (чтобы увеличить пропускную способность). Результат? Машины ехали вплотную друг к другу. Пассажиры паниковали. Safety wrapper срабатывал каждые 2 минуты.

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

Ошибка 3: Недооценка вычислительных требований в реальном времени. Первая версия модели требовала 50 мс на инференс на бортовом компьютере. Плюс 100 мс на обработку сенсоров. Итоговая задержка 150 мс - слишком много для быстрой реакции. Ужали модель, применили квантование в int8. Получили 15 мс. Как в ускорении Qwen3-8B агента, только для RL.

Что дальше? RL не только для беспилотников

Эта архитектура оказалась универсальной. Сейчас тестируем её для:

  • Управления лифтами в небоскребах (минимизация времени ожидания)
  • Координации роботов-складских работников
  • Оптимизации энергопотребления в ЦОД (аналогично выжиманию оперативки до последнего токена, но для охлаждения и питания)

Главный урок: reinforcement learning готов к реальному миру. Но только если вы:

  1. Принимаете гибридный подход (ИИ + детерминированные правила)
  2. Инвестируете в симуляцию с domain randomization
  3. Планируете поэтапное развертывание с обратной связью
  4. Строите инфраструктуру для мониторинга и обновления

И последнее: самый важный навык для инженера RL-систем - не математика, а умение ставить эксперименты. Потому что в реальном мире нельзя просто взять и запустить gradient descent на 100 автомобилях. Нужно задавать правильные вопросы, изолировать переменные и интерпретировать результаты в условиях шума и неопределенности.

Как в том старом анекдоте про физика и курицу: "Предположим, что курица - сфера в вакууме..." В RL это звучит так: "Предположим, что все водители рациональны, сенсоры идеальны, а latency нулевая..." А потом вы выезжаете на реальную дорогу и понимаете, что все ваши предположения - просто смешная абстракция.