Обновить
5
0
Сергей Хорошеньких@serkh

R&D в Яндекс Доставке

Отправить сообщение

Ключевые технологии для общего случая упомянуты тут (см. раздел "Часть 4. MVRP и пробки"). Более подробно мы обязательно расскажем, но это достаточно большая тема. Stay tuned :)

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

  1. Допустим, у вас есть заказ из точки A в точку B (обозначу его A \rightarrow B). С помощью k-d-дерева можно решать задачу эффективного поиска "близких" заказов. Заказы A \rightarrow B и A' \rightarrow B' считаем близкими, если расстояние между A и A' не превосходит R_A, а расстояние между B и B' не превосходит R_B. Тогда, если всего в системе N заказов, то можно пройтись по всем заказам, и для каждого из них за O(\sqrt{N}) найти соседей по точке A в окрестности R_A, и потом из найденных отобрать соседей по точке B в окрестности R_B. Таким образом, для каждого заказа получим небольшое количество ближайших соседей, из которых можно составлять комбинации.

  2. Можно назначать заказы не только на свободных исполнителей, но и на занятых, меняя им маршрут "на лету". В этом случае нужно учесть не только позицию исполнителя, но и точки его маршрута. С помощью k-d-дерева можно искать в каком-то смысле "близкие" маршруты (например, похоже на то, как я выше описал). А ещё прелесть в том, что с точки зрения Венгерского алгоритма назначение одного заказа можно делать как на свободных, так и на занятых исполнителей, при условии что правильно подобраны веса рёбер.

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

Обычно такая "некомпактность" возникает из-за дополнительных ограничений при объединении заказов в один маршрут. Например: два заказа нужно доставить в один район, но один заказ ожидается днём, а другой — вечером. В этом случае доставить их подряд не получится, хотя точки их получения находятся близко друг к другу.

В этой я описал только алгоритмы поиска и назначения исполнителей. Алгоритмы объединения заказов — это отдельная большая тема.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность