Search
Write a publication
Pull to refresh

Comments 10

Вот так... деревья, Больцано-Вейерштрасс, Дейкстра... А потом Агубаджон несколько часов нарезает круги по микрорайону, развозя другие заказы и при этом раз пять проезжая мимо вашего дома, и в итоге уезжает на другой конец города. А поддержка разводит руками и дает купон на скидку (или нет). Причем это не разовый случай, и именно при доставке "в день", экспресс-доставка гораздо адекватнее.

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

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

А вот эти куски, они общие с яндекс.такси или нет? По логике должны быть, они один в один.

Сервисы Яндекс Такси, Яндекс Доставка, Яндекс Еда и Яндекс Лавка построены на единой технологической базе (Техплатформе), но каждый из них использует собственные алгоритмы оптимизации назначения. Это обусловлено спецификой бизнеса и уникальными требованиями к процессу доставки в каждом случае.

Могу лишь сказать,что ваш алгоритм не работатет так как вы описываете.

На самом деле все работает иначе.

Не назначает по 2 заказа? Бред, вы обединяете 2-4заказа в 1 заказ с разными точками получения и отдачи и называете это мультизаказом.

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

Это лишь малая часть, того что я на своей спине ощутил, сотрудничая с сервисом.

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

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

Это все очень круто, но вы являетесь единственным сервисом доставки, в котором нельзя получить информацию о доставке по номеру заказа. Информацию можно получить только из приложения, с другим человеком обязательно делиться уникальной ссылкой, содержающей UUID, а не номер заказа. Пример: продавец с Авито, когда заказали товар с Яндекс Доставкой, никак не сможет отследить перемещение своего товара, только если получатель не поделится ссылкой из приложения. Хотя в приложении авито имеется номер яндекс доставки.

@serkh а можешь ключевые технологии алгоритма объединения заказов рассказать?

Ну если в этой статье ключевыми технологиями считать k‑d-дерево, реализованное в библиотеке nanoflann, алгоритм Дейкстры и венгерский алгоритм

Ключевые технологии для общего случая упомянуты тут (см. раздел "Часть 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-дерева можно искать в каком-то смысле "близкие" маршруты (например, похоже на то, как я выше описал). А ещё прелесть в том, что с точки зрения Венгерского алгоритма назначение одного заказа можно делать как на свободных, так и на занятых исполнителей, при условии что правильно подобраны веса рёбер.

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

негусто в той статье технических деталей)))

Sign up to leave a comment.