Почему Яндекс Навигатор обречён создавать пробки, и как это можно исправить
Дисклеймер
Меня зовут Константин Галичский, я сооснователь «Навител Навигатора». Сразу закроем предсказуемый вопрос: я полностью вышел из этого бизнеса ещё в 2010 году, а в 2022 году компания и вовсе сменила владельцев. Я давно не имею отношения к коммерческой навигации, поэтому данный текст не пиар, не имеет никакого отношения к конкуренции, и не попытка нанести ущерб деловой репутации. Это взгляд системного архитектора на высоконагруженную систему, которая попала в стратегический тупик из области математической теории игр.
Технологический гигант с великолепными инженерами и колоссальной базой данных победил на рынке геосервисов СНГ. Но именно масштаб этой победы Яндекса — доминирующее покрытие трафика — загнал алгоритмы компании в ловушку, из которого не видно выхода в рамках текущей бизнес-логики.
Эффект зелёного коридора, или почему хочется разбить смартфон
Всякому автолюбителю наверняка хорошо знакома эта классическая утренняя ситуация. Город скован заторами, вы катастрофически опаздываете, нервы на пределе. И вдруг — о чудо! — навигатор строит спасительный альтернативный маршрут через жилой квартал или набережную. Там на карте вы действительно видите манящий зелёный цвет. Вы радостно поворачиваете туда... и уже через пару минут намертво встаёте в глухом, глупом заторе, которого ещё секунду назад не было на карте.
В этот момент сладкое предвкушение экономии времени сменяется лютой ненавистью и хочется буквально разбить телефон об асфальт. Знакомо?
Но почему так происходит? Ответ циничен и прост: ровно в ту же секунду навигатор предложил этот «секретный» зелёный коридор ещё паре тысяч таких же опаздывающих бедолаг. И вы все дружно ринулись туда, мгновенно заблокировав узкую улочку, физически не рассчитанную на такой поток. Машины начинают «делить асфальт», как пацаны из сериала. С точки зрения теории игр, это классическая «война всех против всех»: эгоистическая стратегия каждого игрока приводит к проигрышу всех сторон.
Получается дикий парадокс: инструмент, который должен спасать нас от пробок, сам же их и создаёт прямо у нас под носом. И от этого осознания хочется разбить навигатор ещё сильнее.
Возможно, в этот момент вы думаете, что пора сменить профессию или как минимум подлечить нервы. Но давайте отложим эмоции, осколки разбитых смартфонов уберём подальше и попробуем посмотреть на этот дорожный ужас глазами системного архитектора. Почему так происходит с точки зрения математики и возможно ли эту проблему решить?
Математический диагноз: равновесие Вардропа
Когда в конце 2000-х навигаторами пользовались единицы, они казались магией. Навигатор находил свободную улочку, отправлял туда три-четыре машины, и они пролетали мимо затора. Но сегодня навигатором пользуется практически весь поток, и магия превратилась в проклятие.
В теории транспортных потоков есть фундаментальное понятие: Первый принцип Вардропа (Пользовательское равновесие). Этот принцип гласит: если каждый водитель эгоистично выбирает кратчайший маршрут, то в итоге время движения по всем фактически используемым путям выравнивается и никто не может улучшить своё положение в одиночку.
Равновесие Вардропа — это не лекарство от пробок, это их гарантия. Как это работает в Яндексе? На шоссе возникает затор. Алгоритм мгновенно видит пустой зелёный дублёр или жилой квартал и перенаправляет поток туда. Через пять минут этот дублёр намертво забивается, а время движения напрямую и в объезд сравнивается. Вы стоите в мёртвой пробке под носом у Яндекса на улице, которая ещё секунду назад горела зелёной. Алгоритм просто не успевает обработать лаг данных, собираемых с затормозивших впереди вас телефонов. Яндекс не виноват в этом: он просто послушно выполняет ТЗ, находя эгоистичный маршрут для каждого. Но когда эгоистов 100%, они мгновенно уничтожают любую лазейку.
Мостик к системному оптимуму: кейс Яндекс Такси
Самое удивительное, что у Яндекса под капотом уже есть правильный алгоритм – это так называемый Второй принцип Вардропа (системный оптимум). В этом режиме минимизируется суммарное время в пути для всего города в целом, даже если ради этого приходится жертвовать эгоизмом отдельных машин.
Этот паттерн Яндекс успешно обкатал в Яндекс Такси. Там алгоритм распределяет заказы и маршруты централизованно (через механизмы батчинга и пулов). Водитель такси не выбирает, куда ему ехать — система управляет всем флотом машин комплексно ради максимальной эффективности агрегатора. Там эгоизма нет, и работает централизованное планирование. Таким образом, технически инфраструктура Яндекса полностью готова к комплексному управлению потоками на системном уровне. Тем не менее, есть неочевидный фактор, не позволяющий распространить этот алгоритм на обычных водителей.
Патовая ловушка монополиста
Давайте трезво представим себя на месте продуктового управляющего сервиса, действующего с точки зрения квартальных KPI. Допустим, что завтра волевым решением всех водителей принудительно переведут на алгоритм системного оптимума. Что случится в этот же день?
Математика системного оптимума работает через предельные издержки. Чтобы главные хорды и магистрали мегаполиса летели «зелёной волной» на максимальной пропускной способности, алгоритм будет обязан дросселировать (сдерживать) поток на периферии.
Вы садитесь в машину, и вам нужно срочно в аэропорт. Но навигатор зачем-то держит вас на светофоре при выезде из двора лишние 12 минут. Или упрямо везёт вас по длинной окружной дуге со скоростью 40 км/ч, пока вы своими глазами видите, что центр города пустой — ведь алгоритм держит его свободным ради всеобщего блага.
Будет ли обычный водитель думать о «минимизации суммарных человеко-часов города»? Нет. Он решит, что навигатор сломался, и перейдёт с Яндекса на любое другое приложение, которое не занимается «транспортным коммунизмом», а эгоистично найдёт ему любую щель.
Итак, получается патовая ситуация:
· Оставлять всё как есть (эгоистичный алгоритм): плодить пробки, забивать альтернативные маршруты ровным слоем и медленно душить город, борясь лишь со следствиями, а не с причиной.
· Включить централизованное планирование: совершить немедленное коммерческое самоубийство и растерять Retention Rate (коэффициент удержания клиентов), который для бизнеса важнее истины.
Яндекс построил идеальную систему сбора данных, нанял лучших ML-специалистов, но зажат в тиски человеческой психологии и рыночной конкуренции. Как результат, ситуация выглядит тупиковой.
Стратегия выхода: эволюция и свобода вместо принуждения
Но выход есть, если посмотреть на проблему не через мутное стекло революционного перехода к общественному благу, а через призму управляемой эволюции. Не нужно принуждать, нужно дать свободу выбора.
Решение заключается в добавлении в настройках навигатора переключателя двух базовых поведенческих режимов, что позволит пользователю самостоятельно выбирать и в любой момент менять свой выбор. Назовем эти два режима условными кодовыми названиями в духе теории игр (и пусть маркетологи придумают более изящные названия):
* Режим «Эгоизм»: Классический текущий вариант, включенный по умолчанию. Вы никому не доверяете, едете «в лоб», навигатор постоянно перестраивает вам маршруты, вы дёргаетесь во дворах в потоке таких же эгоистов и предсказуемо стоите в пробках, порождённых хаосом.
* Режим «Договор»: Вы сознательно и добровольно делегируете управление вашим маршрутом системе. Переключаясь на этот режим, вы как бы подписываете цифровой «общественный договор», но в любой момент вольны отказаться от его соблюдения и вернуться к первому режиму.
Как это может работать на уровне архитектуры данных?
Поскольку Яндекс «видит всю картину» и вдобавок обладает тотальной информацией и о договорщиках, и об эгоистах, его ML-модель наперёд точно предсказывает поведение эгоистов. Алгоритм с высокой точностью прогнозирует, где ведомые им же эгоисты создадут новые заторы через 15 минут.
Вычислив эти данные, алгоритм изолирует транспортный поток договорщиков. Он вообще не пускает их на маршруты эгоистов. Вместо этого Яндекс распределяет договорщиков квантованными, строго дозированными порциями по скрытым альтернативным «капиллярам» города (набережным, мелким связкам, хордам), удерживая плотность потока на этих улицах ниже критической отметки. Примерно так, как сейчас работает Яндекс Такси.
Верно и то, что ML-модели уже сейчас умеют прогнозировать заторы. Но сейчас такой прогноз используется лишь для того, чтобы точнее рассчитать время прибытия (ETA) эгоиста в очередную пробку. В предлагаемом новом паттерне этот прогноз становится триггером для принудительной изоляции и маршутизации потока договорщиков в обход этих зон.
Формирование доли договорщиков
В предлагаемой схеме парадокс несправедливости исчезает:
* Эгоисты предсказуемо стоят в своих бордовых пробках на главных магистралях, потому что их там слишком много. Но это их сознательный выбор.
* Договорщики — пусть по чуть более длинной траектории, но стабильно и плавно едут. И это тоже их сознательный выбор.
Вечером на парковке происходит ключевой социально-поведенческий перелом: эгоист жалуется, что проклял всё и стоял два часа, а его сосед-договорщик отвечает, что включил режим согласия, навигатор провёл его какими-то зигзагами, но он спокойно слушал музыку и доехал за 40 минут.
Сарафанное радио запускает эволюционный процесс, постепенно меняющий соотношение долей двух поведенческих паттернов в экосистеме. Водители на личном опыте понимают: эгоизм больше не выгоден, поэтому сообщество начинает плавно и добровольно переходить в режим «Договора». Система стабилизируется сама, без внешнего принуждения плавно достигая некоторого нового равновесного состояния, в котором договорщики составляют существенную долю общего трафика, возможно даже доминирующую.
Но если же на практике оказывается, что моя идея содержит некий изъян и практический результат окажется прямо противоположным, то разочарованные пользователи свободно переключаются в прежний режим, и трафик также плавно возвращается к нынешнему состоянию, как проверенному временем.
Обращение к коллегам
Транспортный коллапс мегаполисов больше не задача укладки асфальта. Это задача управления распределёнными потоками данных высокой плотности.
Я обращаюсь к коллегам-архитекторам из Яндекса: необходимые структуры данных под новый паттерн ваши инженеры набросают за несколько спринтов: у вас для этого идеальная база и реализация в Яндекс.Такси . Но проблема лежит не в плоскости кода, а в плоскости продуктовой смелости бизнеса. Готовы ли вы перейти от попыток локального обхода пробок к инструменту осознанного, добровольного взаимодействия с городом?
Свобода выбора способна поехать там, где математика Вардропа пасует.