Решён
Как навигаторы выстраивают маршрут с учетом пробок?

DevEdu Алгоритмы
15.9k
6

Интересует именно механика изнутри. Понятно что Яндекс Навигатор и Google Maps как то собирают данные о пробках и перестраивают маршрут. Но как именно это работает технически?

Конкретно интересует: откуда берутся данные в реальном времени, как алгоритм выбирает между двумя вариантами объезда если оба загружены, и почему иногда навигатор ведет через дворы вместо пустой магистрали?

Решение
91
Эксперт • 2 ответа

Упрощенно, три слоя:

Данные. Основной источник - анонимизированные GPS-треки самих пользователей приложения. Телефон в кармане едет по Тверской, сервер видит скорость движения этого анонимного устройства. Миллионы таких точек дают картину загрузки дорог в реальном времени. Дополнительно - данные от камер, петли в асфальте, партнерские данные от транспортных операторов.

Алгоритм маршрутизации. Базово это вариации алгоритма Дейкстры или A*, но на граф накладываются веса не просто по расстоянию, а по расчетному времени проезда каждого участка. Этот вес динамически обновляется. Когда ты едешь, навигатор каждые несколько секунд пересчитывает "а вдруг сейчас появился более быстрый путь".

Дворы. Это обычно означает что алгоритм видит резкое замедление на магистрали прямо сейчас и у него есть исторические данные что дворовой маршрут в это время суток выигрывает по времени. Иногда он ошибается - модель не идеальна.

Аватар DevEdu

Спасибо, именно такой ответ и искал. Про веса на граф и динамическое обновление особенно интересно.

41
Участник • 4 ответа

Яндекс еще использует предиктивные модели: они знают что в пятницу в 18:00 на Садовом кольце всегда пробка. Даже если прямо сейчас там чисто, алгоритм уже закладывает будущее замедление в расчет времени маршрута. Это объясняет почему иногда объезд предлагается заранее, до самой пробки.

27
Участник • 1 ответ

Если интересно копнуть глубже - погугли "contraction hierarchies" и "time-dependent shortest path". Это основные техники которые используются для работы с дорожными графами в реальном времени. Наивный Дейкстра на графе всех дорог страны работал бы слишком долго, поэтому граф предварительно обрабатывается и иерархически сжимается для ускорения запросов.

19
Участник • 3 ответа

Отвечу на вопрос про дворы конкретнее. Навигатор ведет туда по двум причинам:

  1. Реально быстрее по текущей модели.
  2. Баг в разметке карты - участок размечен как дорога с нормальной скоростью, хотя там физически 5 лежачих полицейских.

Во втором случае помогает кнопка "Сообщить об ошибке на карте". Яндекс их реально читает.

5
Участник • 2 ответа

Кстати, все эти алгоритмы хорошо работают пока у пользователей включена передача данных о местоположении. Задумайся: каждый раз когда ты едешь с включенным Яндексом - ты бесплатно работаешь на их картографическую базу. Большой брат знает где ты был в 23:47 в прошлый вторник.

3
Эксперт • 2 ответа

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

Написать ответ

Премодерация гостей

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

Будьте вежливы и соблюдайте правила платформы.