В рамках задачи требуется доработать алгоритм распределения заказов между курьерами.

Решается классическая математическая задача маршрутизации транспортных средств (VRP). Так же задача дополняется различными усложнениями алгоритма:

*Транспортное средство – здесь и далее подразумевается курьер.

1) У каждого заказа есть временные рамки для посещений - время забора и время доставки. Проблема маршрутизации транспортных средств с временными окнами (VRPTW).

*У каждого заказа есть несколько точек со статусами посещений: «Не посетил -> Выехал -> Прибыл на точку -> Посетил точку и забрал/доставил товар”

2) Задача маршрутизации транспортных средств с вместимостью (CVRP) — это задача VRP, в которой транспортные средства с ограниченной грузоподъемностью должны забирать или доставлять предметы в разных местах. Предметы имеют количество, такое как вес или объем, а транспортные средства имеют максимальную грузоподъемность, которую они могут перевозить. Проблема состоит в том, чтобы забрать или доставить товар с наименьшими затратами, не превышая вместимость транспортных средств.

Что необходимо сделать/доработать/улучшить:

1) После первичного распределения заказов и после того, как курьер начал выполнять заказы по маршруту - в алгоритм может попасть новый заказ. Необходимо найти новый оптимальный маршрут с учётом текущих заказов на курьере (и статусы точке заказов). Нюанс состоит в том, что курьер может выехать на какой-то заказ и при обнаружении нового оптимального маршрута желательно учесть, что курьер должен завершить текущий заказ (т.е. за текущее местоположение курьера можно считать координаты точки доставки). Противоположный исход - курьер успел выполнить все назначенные на него заказы, а время его работы еще осталось (условно, работает он с 9:00 до 17:00, алгоритм сперва нашёл оптимальное решение построения маршрута и назначил 3 заказа на курьера, которые он завершил в 15:00. Соответственно, предполагается, что алгоритм должен пытаться найти маршрут с учётом оставшегося свободного времени - с 15:00 до 17:00, если таковые имеются).

*Вероятно - задача коммивояжёра (TSP).

2) Рефакторинг ныне действующего алгоритма, а так же, желательно, комментирование и документирование кода.

Алгоритм учитывает:

- Количество курьеров

- Количество точек (точек заказа. 1 заказ - минимум, две точки. Максимум - 1 + N)

- Скорость курьера

- Время обслуживания одной точки

- Временные рамки посещения точки

- Временные рамки графика работы курьера (его активности)

- Максимально допустимый переносимый вес заказов для каждого курьера

- Текущие заказы на курьере

3) Более детальное описание различных сценариев ошибок/исключений для дальнейшего дебага при тестировании и эксплуатации алгоритма

Текущая версия алгоритма использует официальные библиотеки Google OR-Tools. Вся необходимая сопутствующая документация находится там.

https://developers.google.com/optimization/routing?hl=ru

Возможно, при решении данной задачи помогут некоторые статьи и открытый исходный код сторонних проектов:

Поиск оптимальных маршрутов для перевозки самокатов

Статья: https://itnan.ru/post.php?c=1&p=705582

GitHub: https://github.com/klyusba/yandex_cup_2022/blob/master/algoritm_marathon/solvers/or_solver.py

2 года назад
guest_16754168077075
2 года в сервисе
Был
2 года назад

Заявки фрилансеров

Анна
 
41 год
2 года в сервисе
Была
2 года назад
1 отзыв
2 года назад
Тимофей
 
21 год
2 года в сервисе
Был
19 дней назад
2 года назад
Луша
 
27 лет
2 года в сервисе
Был
2 года назад
2 года назад
Тимур
 
23 года
2 года в сервисе
Был
2 года назад
2 года назад
  • Похожие заказы

  • Требуется разработать модуль для распознавания текста с изображений, включая капчи. Возможны варианты реализации: библиотека для PHP или модуль для Linux. Ожидается функционал для работы с изображениями и поддержка различных форматов.

    Закрыт
    2 года назад
  • Требуется разработать программу, реализующую класс AudioSystem с тремя полями, двумя конструкторами и двумя методами для ввода и вывода информации. Пользователь должен вводить данные для объекта. После разработки необходимо провести тестирование и прикрепить к отчету скриншоты с результатами выполнения программы.

    Прикладное ПО1 исполнитель
    Закрыт
    2 года назад
  • Необходимо разработать программу, реализующую класс AudioSystem с тремя полями, двумя конструкторами и двумя методами. Методы должны обеспечивать ввод и вывод информации об объекте. Пользователь вводит данные, после чего требуется провести тестирование программы и приложить скриншоты с результатами выполнения.

    Прикладное ПОнет заявок
    Закрыт
    2 года назад
  • Требуется разработать 2 простые программы на C++ и 1 программу на C# для контрольной работы. Необходимы базовые функциональные возможности и корректная работа кода.

    Закрыт
    2 года назад
  • Требуется частично переписать скрипт на Node.js, сохранив основную логику. Необходимо подключение протокола SMPP для обмена данными с двумя серверами. Скрипт должен быть перенесен с одного сервера на другой, оба работают на ОС Ubuntu.

    Прикладное ПО1 исполнитель
    Завершен
    2 года назад
  • Требуется решить несколько задач по программированию и SQL, включая написание алгоритма для поиска повторяющихся элементов и извлечение данных из XML. Также необходимо решить пару логических задач. Бюджет 10-30$. Приглашаются предложения по ценам.

    Прикладное ПОнет заявок
    Закрыт
    2 года назад
  • Создайте программу для Arduino или аналогичного контроллера, которая будет распознавать до 10 предустановленных голосовых команд с возможностью расширения. Реализуйте запись команд кнопкой и вывод сигнала управления на соответствующий порт при получении команды с микрофона.

    Закрыт
    2 года назад
  • Ищется программист для разработки софта для Counter-Strike: Global Offensive на платформе Faceit. Необходимо создать простой радархак, вх или аим. Основное внимание на функциональность и стабильность работы программного обеспечения.

    Прикладное ПОнет заявок
    Закрыт
    2 года назад