Яндекс построение маршрута: Яндекс Карты — подробная карта мира

Сотни тысяч маршрутов в секунду на ядро. Опыт Яндекс.Маршрутизации / Хабр

Пару недель назад Даня Тарарухин рассказал на Хабре, как появился наш сервис, Яндекс.Маршрутизация, и как он помогает компаниям с логистикой. Создавая платформу, мы решили несколько интересных проблем, одной из которых и посвящён сегодняшний пост. Я хочу поговорить о самом планировании маршрутов и необходимых для этого ресурсах.

Поиск оптимального маршрута между множеством точек — классическая задача дискретной оптимизации. Для её решения нужно знать расстояния и времена в пути между всеми точками. То есть — знать матрицу расстояний и времён. Ещё два года назад долгое вычисление матрицы было для нас очень критичной проблемой и блокировало развитие. Сам поиск оптимального решения при известной матрице занимал 10 минут, а вот вычисление всех ячеек матрицы для больших задач (на несколько тысяч заказов) занимало часы.

Чтобы решить задачу с пятью тысячами заказов, нужно знать расстояния и времена в пути между всеми точками. Это две матрицы чисел размерностью 5000х5000. Мы планируем маршруты курьеров на весь день, и утром курьер доедет от точки до точки за одно время, а вечером — за другое. Значит, нужно вычислять матрицы времён и расстояний для каждого часа дня. Не все часы дня уникальны, но пробочное время (утро и вечер) нужно покрыть хорошо. Поэтому мы пришли к конфигурации с тринадцатью часовыми срезами. Итого нам нужно два куба (времён и расстояний) размерностью 13х5000х5000 каждый. Это 325 млн маршрутов, посчитанных по реальному графу дорог, в котором 165 млн ребёр. Расчёт одного маршрута в хорошо оптимизированном алгоритме команды Яндекс.Карт занимает порядка 10 мс, суммарно получаем 900 часов вычислений. Даже при распараллеливании на 900 CPU нужно ждать 1 час. Такой сервис мы не могли запустить, нужен был более подходящий алгоритм.

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

Время работы алгоритма при этом пропорционально пройденным рёбрам графа, то есть площади, которую покрыла волна:

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

Реальный граф дорог достаточно сильно структурирован, и это можно использовать. Когда вы ищете кратчайшее расстояние между Москвой и Питером, в классической Дейкстре вы будете вынуждены распространять волну по кругу и перебирать все улицы и переулки Москвы, подмосковных городов и деревень, улицы Твери и Новгорода. Это огромный объём вычислений, но можно заранее подготовиться и запомнить оптимальные маршруты между городами (aka шорткаты) и не повторять их в рантайме. Тогда для поиска маршрута между двумя точками в иерархической Дейкстре вам останется посчитать кратчайшие расстояния до нужного шортката.

Так как уровней иерархии может быть не два, а 5-6, то они драматически снижают время поиска.

Команда роутера Карт уже достаточно давно реализовала такие оптимизации. Именно они позволили достичь 10 мс для поиска маршрута между двумя точками. 🙂 Так что пока мы не приблизились к решению нашей проблемы.

Раз режим поиска точка-точка уже предельно оптимизирован, мы можем оптимизировать расчёт ряда в матрице. Ряд — это расстояния от одной точки до всех остальных. Пока мы ищем расстояние до самой дальней точки, мы попутно вычисляем расстояния до более близких. Значит, вычисление ряда эквивалентно вычислению расстояния до самой дальней точки.

Смотрим на время вычисления ряда по такому алгоритму и вспоминаем, что последовательное вычисление 5000 маршрутов заняло бы порядка 5000 * 10 мс = 50 с:


На графике показано время вычисления строки в матрице расстояний размером 1*N для разных N (по реальным данным). Видно, что вычисление строки интересующего нас размера 1*5000 укладывается в 1,3 секунды. На график добавлена линия тренда, которая показывает, что время вычислений растет чуть медленнее, чем линейно по N, порядок N**0.74

Уже неплохо! С таким алгоритмом мы можем посчитать наш куб за 13 * 5000 * 1,3 с = 84 500 с = почти 24 часа. Он легко параллелится по рядам, и при использовании 50 CPU расстояния вычисляются за полчаса. Порядок сложности алгоритма вычисления куба — O(N**1.74):


График оценочного времени вычисления 13 матриц размером N*N по рядам на 50 CPU (домножили предыдущий график на 13*N/50). По этому графику мы принимали решение, что если к нам придет клиент с 5000 заказов, то мы должны уложиться в полчаса со всеми тринадцатью часовыми срезами. А вот если заказов станет 10 000, то всё плохо: придётся добавлять железо или увеличивать время.

В таком виде два с половиной года назад мы запустили первую версию нашего API, решающего логистическую задачу. Клиенты достаточно часто жаловались на долгое время решения, и их легко понять: ты запустил задачу решаться, ждёшь 1 час, получаешь решение и понимаешь, что забыл поправить время смены у водителя, исправляешь и всё начинается сначала. Водители начинают нервничать, так как рискуют попасть в утренний час пик, а то и вовсе не успеют доставить заказ в срок. Нужно было что-то делать. «Закидывать» проблему железом не хотелось: мы готовились к большим нагрузкам, потребовалось бы много железа, да и закупка серверов происходит не одномоментно.

Изучение академических статей показало, что, оказывается, для этой задачи есть алгоритмы с линейной сложностью*! (В статье по ссылке есть большой обзор всевозможных современных способов ускорения Дейкстры, в том числе и для матричного случая.) Вычислять матрицу за линейное время — это не укладывалось в голове. Один из наших разработчиков вызвался написать прототип, и вот что получилось:


Время вычисления одной матрицы размера N*N на одном CPU с помощью алгоритма «быстрых матриц». Сложность получается порядка O(N**1,1). Высокие N выбиваются из линии тренда, поскольку на время уже больше влияет генерация ответа и его скачивание по сети.

115 секунд на матрицу 5000х5000 при использовании одного ядра и почти линейная зависимость от N. Фантастика стала реальностью! Идея алгоритма комбинирует две описанные выше идеи: Дейкстру для рядов и иерархический поиск. Очевидно, что, начав вычислять второй ряд, мы в какой-то момент вновь будем обходить ту же область графа, которую мы только что проходили, вычисляя предыдущий ряд. Поэтому давайте запоминать в узлах иерархического графа кратчайшие расстояния до всех destinations. Когда мы начнём вычислять следующий ряд, то, дойдя до такого узла, мы разом получим почти все расстояния до других точек.

Полтора года назад это позволило нам сэкономить полчаса времени седения волос логиста и существенно уменьшить потребление железа. Если раньше на один большой запрос нам требовалось 50 ядер на полчаса, то теперь — 13 ядер на 2 минуты. Это примерно 200 000 маршрутов в секунду на ядро. Тот редкий случай, когда новый алгоритм не просто закрывает класс проблем, а расширяет наши представления о возможном.


* Статья «Route Planning in Transportation Networks», см.

параграф 2.7.2 «Batched Shortest Paths»

Ошибки в построении маршрута. Яндекс-Навигатор

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

Рассмотрим один из примеров данной проблемы.

Следуя по маршруту от улицы Викторенко, к улице Острякова — которые находятся в северном округе г. Москва.

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

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

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

— где зеленная линия показывает менее загруженную трассу

— желтая линия указывает на средний затор дороги

— красный цвет линии указывает на плотно загруженную обстановку данного участка

— бордово-черная линия указывает что движение менее 10 км в час.

Следуя этому старайтесь выбирать и строить свой маршрут с помощью анализатора пробок.

Так же существует такая проблема яндекса, как построение маршрута при въезде в жилые зоны.

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

Кстати, в недавнем обновлении навигатора появились на карте знаки, обозначающие препятствие на пути -шлагбаума.

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

Желаем вам ни гвоздя, ни жезла

Инфраструктура сбора корпоративных данных | ASTROPROXY

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

Мы регистрируем весь трафик в соответствии со строгими политиками KYC и AML. Мы боремся со злоупотреблениями любого рода.

Сравнение цен, анализ и агрегирование данных

Чтобы оставаться в игре и предлагать продукты самого высокого качества по доступным ценам, предприятиям (онлайн-турагентствам, авиакомпаниям, отелям, каршеринговым компаниям и т. д.) необходимо устанавливать цены на свои услуги с взгляд на современные тенденции рынка. Однако веб-сайты следят за сборщиками данных и, как только они идентифицируют вас по IP как конкурента, блокируют или преднамеренно дезинформируют вас. Чтобы преодолеть барьер, вам нужно замаскироваться под их клиента.

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

Проверка и размещение рекламы

Проверка работы рекламы и ее размещения на веб-сайтах издателей, а также проверка их на наличие вредоносных программ имеет важное значение для рекламодателей и аффилированных маркетологов. Однако веб-сайты высматривают конкурентов и используют любую возможность, чтобы ввести их в заблуждение.

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

Работа с несколькими учетными записями

Проблемы с прокси-сервером могут серьезно подорвать проект. С реальными динамическими и статическими IP-адресами AstroProxy, которые могут выполнять все виды операций, вы можете избежать проверок и блокировок. Теперь вы можете управлять несколькими учетными записями одновременно с разных платформ и избегать геоблокировок и ограничений таргетинга. IP-адреса работают независимо, они настраиваются для целевых аудиторий в зависимости от страны, города, ASN или мобильных операторов и интегрируются в сторонние приложения (Multilogin, Jarvee и т. д.). Просто автоматизируйте своих ботов и инструменты сканирования без кодирования и запуска кругов вокруг ваших конкурентов!

Соответствие содержания SEO

AstroProxy может помочь вам собрать релевантную информацию из крупнейших поисковых систем (Google, Yandex, Yahoo, Bing, Baidu и т. д.), , которые отправляют одиночные запросы на реальные IP-адреса. IP-адреса AstroProxy назначаются существующему устройству и доступны по всему миру. Это поможет вам сэкономить деньги, так как избавит вас от необходимости нанимать специалистов по извлечению данных, ИТ и обслуживанию серверов.

Защита авторских прав

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

Вы можете использовать реальный IP-адрес клиента, защищенный надежным сервером AstroProxy, и тайно отслеживать веб-сайты, нарушающие вашу интеллектуальную собственность, и выбирать наиболее эффективный способ ее защиты.

Рейтинг SEO

Сеть AstroProxy может помочь вам собрать релевантные данные SEO , распределяя ваши запросы через локальные IP-адреса или соединения 3G/4G в вашем целевом регионе.

Теперь вы можете отслеживать рейтинги, проверять переведенные версии веб-сайтов, локализованные списки, индексы Google (отражающие страницы с лучшей статистикой посещений), ранжировать SEO-данные в Интернете и получать точную информацию.

Исследование рынка

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

AstroProxy использует резидентные серверы, поскольку он направляет ваши запросы через локальные IP-адреса и гарантирует актуальность и целостность собранных данных.

Amazon впервые тестирует робота-такси в США

Чтение за 3 минуты

Отавио Кейрос

14 февраля 2023

Робот-такси имеет различные конфигурации и может перевозить до четырех пассажиров

Автономное транспортное средство2 из 90 Amazon , zoox заявила, что успешно протестировала робот-такси с сотрудниками в качестве пассажиров на дороге общего пользования, стремясь реализовать свои планы по скорейшему выпуску услуги на коммерческой основе для широкой публики. По данным компании, тест прошел 11 февраля в Фостер-Сити, штат Калифорния. Длина пути составила около 1,6 км.

Как проходил тест?

Автономный автомобиль Zoox вмещает до четырех пассажиров и не имеет рулевого колеса или педалей внутри (Раскрытие информации / Zoox)

Испытание состоялось после того, как zoox получил разрешение на тестирование без водителя от Департамента транспортных средств Калифорнии (DMV) . . Согласно заявлению, опубликованному компанией, документ позволил роботу-такси работать автономно на общественных, пустых дорогах и с сотрудниками Zoox в качестве пассажиров.

Однако лицензия не позволяет транспортному средству передвигаться по всем дорогам общего пользования в штате. Тестирование в настоящее время ограничено транспортировкой сотрудников zoox по маршруту общего пользования длиной в одну милю между двумя офисными зданиями в штаб-квартире компании в Фостер-Сити со скоростью до 1,6 километра в час.

Айша Эванс Генеральный директор zoox говорит: «Это невероятная веха для Zoox и индустрии автономных транспортных средств в целом». Цель, как указывает компания, состоит в том, чтобы в ближайшее время предложить услугу широкой публике. «На выходных Джесси [Левинсон, технический директор] и я совершили первую автономную поездку в нашем специально созданном роботе-такси по открытым дорогам общего пользования», комментарий

Робот-такси Amazon

Робот-такси имеет дороги и могут перевозить только пассажиров компании (Disclosure / Zoox)

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *