@dimash07

Как распределить заказы по курьерам?

Стоит задача "по умному" распределить заказы по курьерам.
Имеются условно 100 заказов расположенных по всему городу с координатами, точка выезда одна, и каждый курьер может взять 15 заказов и за день должен их доставить. Уже два дня голову ломаю, как бы это все правильно сделать? Ну хотя бы чтобы работало. Есть ли какой-нибудь алгоритм, ну или посоветуйте шаги.
В голову приходит идея разделить все заказы на сегменты и уже к каждому сегменту предоставить своего курьера. Но вот тут тоже не могу понять, как же можно разделить все это дело.
  • Вопрос задан
  • 1578 просмотров
Пригласить эксперта
Ответы на вопрос 5
hint000
@hint000
у админа три руки
@Aleshonne
Научные вычисления
Это задача теории расписаний, обработка заданий множеством подвижных процессоров (возможно, с директивными сроками, если время приезда курьера назначено), и она, если я ничего не путаю, является NP-полной. Точное решение — полный перебор всех комбинаций заказов и курьеров, его можно немного оптимизировать, см. темы «Функция Беллмана», «Метод ветвей и границ».
Если коротко, то нужно рассмотреть рекуррентную функцию B_i, которая является множеством оптимальных по Парето решений задачи для i заказов, и зависит от параметров i-го заказа и решения B_(i-1). Чтобы узнать конкретный вид функции B_i, надо отучиться в универе на математической специальности, а потом, как тут уже писали, пару лет исследовать проблему (возможно, попутно защитив диссертацию). Я знаю человека, который за решение похожей задачи доктора получил.
Рекомендую использовать живого человека (диспетчера), который вручную разобьёт набор заказов на кластеры с учётом времени в пути между ними, а также будет вносить оперативные корректировки в процессе развоза заказов. По кластеру курьер отлично сориентируется сам.
Ещё можно использовать жадный алгоритм, по принципу:
1) добавить в конец списка курьеров одного фиктивного (всего n+1 курьер, m заданий);
2) i-му курьеру назначить случайное незанятое задание j и (m/(n + 1) - 1) ближайших к нему;
3) если есть свободные курьеры, увеличить i на 1 и перейти к пункту (2);
4) задания, доставшиеся фиктивному курьеру раздать тем курьерам, к начальной точке работы которых они ближе.
Фиктивный курьер нужен, потому что обычно последнему при таком распределении достаются осколки из разных углов. Но результат работы алгоритма требует контроля живым человеком.
Ответ написан
Комментировать
@Danil_Andreev
Есть уже готовые решения для распределения заказов по курьерам и автоматическому построению маршрутов. Попробуйте систему EdiCourier. Там 1000 заказов распределяются за 10 минут. Всё максимально автоматизировано, можно связать со своими внутренними системами.
Ответ написан
Комментировать
@IrinaVolshtein
Попробуйте https://maxoptra.ru/, вашу задачу решает.
Ответ написан
Комментировать
Возможно понравится сервис https://www.routistic.ru/ru
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы