Возможные логистические сценарии
- Доставка с одного склада
- Сбор грузов на склад
- Старт или окончание маршрута в произвольной точке
- Pickup & delivery: прием и доставка груза в произвольных точках
- Доставка с одного из нескольких складов
- Маршруты с несколькими складами
- Доставка в одну из возможных точек
- Получение груза в одной из возможных точек
- Планирование нескольких рейсов со склада для одного курьера
- Кросс-докинг
- Доставка с парковкой автомобиля перед пешей частью маршрута
- Использование прицепа
Для всех логистических сценариев обязательно укажите склады, заказы и курьеров. Набор данных является зависимым по составу курьеров и заказов. Если их можно разделить на независимые части (когда какую-то группу заказов выполняют только определенные машины и смешивания не происходит), то рекомендуем делать несколько отдельных запусков планирования, каждый со своим составом заказов и курьеров. Например, в таких ситуациях:
-
Несколько складов, с каждого склада отгружается свой набор заказов и каждый склад обслуживается своим набором транспорта.
-
Доставка со склада и сбор грузов на склад осуществляется разными машинами (и это разные независимые заказы).
-
У одного склада есть несколько географических зон, каждая из которых обслуживается своим набором транспорта.
Описанные ниже логистические сценарии можно комбинировать между собой. Если в приведенных примерах нет ничего похожего на вашу бизнес-задачу — обратитесь к вашему менеджеру из команды Яндекс Маршрутизации или в техническую поддержку routing-support@yandex-team.ru.
Доставка с одного склада
Это сценарий по умолчанию, когда необходимо спланировать доставку товаров по клиентам или построить маршрут для посещения заданного набора точек. Он используется, если в запросе есть только один склад, а для заказов в поле location
указан тип delivery
, или это поле не задано (см. Тип заказа). Алгоритм построит маршрут для доставки всех заказов с указанного склада.
Схема
Пример
В этом решении 30 заказов. Все они доставляются с одного склада. Тип заказа type
не обозначен явно, поэтому по умолчанию принимает значение delivery
.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Сбор грузов на склад
Это сценарий по умолчанию, когда грузы собираются с клиентов для доставки на склад. Такими грузами могут быть, например:
-
медицинские анализы, которые осуществляются на дому;
-
одежда для химчистки;
-
возвраты от клиентов на склад.
В последнем случае этот сценарий часто используется в комбинации с доставкой с одного склада.
Для указания точек сбора груза на склад необходимо указать тип заказа type = pickup
(см. Тип заказа). Дальше возможны варианты:
-
Все курьеры должны в конце дня возвращаться на склад (см. Возврат на склад в конце рабочего дня), то есть опция
return_to_depot
=true
. В этом случае ничего дополнительно настраивать не нужно, курьер завершает маршрут на складе по умолчанию. -
Груз должен остаться в машине курьера и вернуться на склад уже утром, когда курьер приезжает на следующую смену. Для этого нужно задать
return_to_depot
=false
. Маршрут закончится в последней точкеpickup
. Также ничего не нужно настраивать дополнительно. -
Не все курьеры в конце дня возвращаются на склад – алгоритм выберет, какие должны вернуться. Для курьера используется поле
return_to_depot
=false
, а для pickup-заказов указывается обязательность доставки на склад в текущем маршрутеpickup_must_reach_depot
=true
или настраиваетсяdelivery_deadline
— время доставки заказа на склад.Если заказ привязан к складу, то есть в поле
depot_id
указан один или несколько идентификаторов складов, pickup-заказ будет доставлен в текущем маршруте на один из этих складов независимо от значения поляpickup_must_reach_depot
.
Схемы
-
Доставка груза на склад.
-
Доставка груза на один из нескольких складов.
Пример 1
Сбор грузов на склад, все машины в конце дня должны вернуться на склад (return_to_depot
= true
). 30 заказов, 1 склад, 5 точек сбора груза на склад.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
То же, что в примере 1. Для одного из автомобилей указано return_to_depot
= false
, то есть груз останется в машине курьера и вернется на склад уже утром.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
То же, что в примере 1, но точки сбора выбраны другие. Ко всем автомобилям применяется return_to_depot
= false
, а для точек сбора грузов указано delivery_deadline
. На склад в конце дня вернется только машина, в которую попали все заказы с типом pickup
.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Старт или окончание маршрута в произвольной точке
В каких ситуациях использовать
По умолчанию маршрут для курьера начинается и завершается на складе. Однако бывают ситуации, когда необходимо планировать маршрут с места парковки машины, из дома курьера или наоборот — завершать маршрут поближе к этим точкам.
Как реализовать сценарий
За определение точек старта отвечают параметры start_at и visit_depot_at_start, точек окончания — finish_at и return_to_depot.
Совет
Не при всех сочетаниях этих параметров в решении используется склад (например, если все курьеры стартуют из дома и сразу едут на заказы), но он является обязательным для заполнения в схеме данных. В этом случае в качестве склада можно указать координаты офиса или координаты центра города.
Параметры точек старта и окончания являются независимыми относительно друг друга, поэтому здесь можно настраивать любые сочетания:
-
Точки старта и окончания задаются отдельно для каждого курьера.
-
Одну и ту же точку можно указывать для нескольких курьеров.
-
Можно указывать одинаковые точки для старта и окончания.
Чтобы указать определенную точку старта или окончания маршрута, используйте тип заказа garage
. Если vehicle.visit_depot_at_start
= false
, а значение параметра vehicle.start_at
не определено, то алгоритм считает, что курьер может начинать маршрут с первого заказа, не посещая склад.
Внимание
Комбинация параметров, когда start_at
не определено и visit_depot_at_start
= false
, применима в случае, если в маршруте есть заказы типа pickup
или связка pickup & delivery
. Заказы, которые доставляются со склада, не планируются первыми и появляются в маршруте только после посещения склада курьером.
Если vehicle.visit_depot_at_start
= false
, но курьеру все же нужно начать маршрут с посещения склада (например, чтобы забрать заказы типа delivery
), укажите значение параметра vehicle.can_visit_depot_at_start
= true
. В этом случае курьер сможет заехать на склад.
Если при этом определено start_at
и заказы:
— привязаны к складу (задан параметр location.depot_id
), то курьер начнет маршрут из точки типа garage
, затем заедет за заказами на склад, после чего продолжит маршрут;
— не привязаны к складу (параметр location.depot_id
не задан), то курьер не будет заезжать на склад и начнет работу сразу из точки типа garage
.
Схемы для точек старта
-
Старт маршрута из точки заказа без заезда на склад (
start_at
не определено,visit_depot_at_start
=false
). Начальную точку заказа для курьера выбирает алгоритм. -
Старт маршрута со склада (
start_at
не определено,visit_depot_at_start
=true
). Поведение алгоритма по умолчанию. -
Старт маршрута из определенной точки без заезда на склад (
start_at
определено,visit_depot_at_start
=false
). Точка старта может быть различна для разных курьеров. -
Старт маршрута из определенной точки с заездом на склад (
start_at
определено,visit_depot_at_start
=true
). Точка старта может быть различна для разных курьеров. -
Старт маршрута при
visit_depot_at_start
=false
иcan_visit_depot_at_start
=true
(start_at
определено, первый заказ привязан к складу с помощьюlocation.depot_id
).
Схемы для точек окончания
-
Окончание маршрута в последней точке без возврата на склад (
finish_at
не определено,return_to_depot
=false
). -
Возврат на склад по окончании маршрута (
finish_at
не определено,return_to_depot
=true
). -
Окончание маршрута в определенной точке без возврата на склад (
finish_at
определено,return_to_depot
=false
). Точка окончания может быть различна для разных курьеров. -
Окончание маршрута в определенной точке с предварительным заездом на склад (
finish_at
определено,return_to_depot
=true
). Точка окончания может быть различна для разных курьеров.
Pickup & delivery: прием и доставка груза в произвольных точках
В каких ситуациях использовать
Сценарий используется для планирования доставки груза от двери до двери, без участия промежуточных складов или точек перегруза. Например:
-
товар необходимо забрать со склада поставщика и отвезти клиенту (в том числе поддерживаются сценарии множественных
pickup
, когда нужно собрать товар на нескольких складах от разных поставщиков и отвезти одному клиенту); -
возврат товара (необходимо забрать у клиента и отвезти не на основной склад, а на склад для возвратов).
Также сценарий можно использовать в ситуации, когда есть простые зависимости между точками. Например, прежде чем оказаться у клиента, нужно заехать за инструментами, документами или ключами.
Этот сценарий можно использовать вместе со сценариями сбора грузов на складе и доставки с одного склада.
Как реализовать сценарий
Отличительной особенностью использования сценария pickup & delivery является использование связанной пары точек, одна из которых всегда посещается раньше другой: сначала pickup
, затем delivery
. Связка осуществляется по полю delivery_to
, которое заполняется для точки pickup
и в котором указывается идентификатор связанного delivery
.
В сценарии со множественным pickup
для нескольких различных точек pickup
можно указывать одно и то же значение в поле delivery_to
. Группа из множественных pickup
и одного delivery
всегда будет планироваться для выполнения одним курьером.
В случае, если из одной точки pickup
нужно доставить на разные точки delivery
— необходимо указать различные пары pickup & delivery
(при этом pickup
заказы будут иметь одинаковые координаты, но должны иметь разные идентификаторы). Такие пары pickup & delivery
могут быть запланированы на разных курьеров (несмотря на то, что pickup
точка у них одинаковая). Для обязательного планирования на одного курьера рекомендуется воспользоваться группировкой заказов.
Внимание
Для точки типа delivery
можно не указывать вес, объем и количество мест, но их обязательно указывать для связанного pickup
.
В случае, если на точке типа delivery
указываются объемно-весовые характеристики, то они должны быть одинаковы на связанном pickup
заказе. То есть для ситуации множественного pickup
вес, объем и количество мест достаточно указывать только на pickup
заказах.
Для управления последовательностью при выполнении пар pickup & delivery
рекомендуется воспользоваться функциональностью location.in_lifo_order
(подробнее в разделе Очередность приема и доставки).
Схемы
-
pickup & delivery
. -
Множественный
pickup
для одной точкиdelivery
.
Пример 1
Планируем 12 разных точек. Половина имеет тип pickup
, другая половина — delivery
. Итого получаем 6 доставок «от двери до двери».
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
Задаем 8 разных адресов для точек типа pickup
и указываем для них в поле delivery_to
одно и то же значение. Получаем план, по которому курьер должен забрать заказы из разных мест и привезти их все в одно место.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Планируем доставку с 1 адреса на 16 разных адресов. Задаем тип pickup
для 16 точек с одинаковыми адресами и тип delivery
для других 16 точек.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Доставка с одного из нескольких складов
В каких ситуациях использовать
Этот сценарий используется, когда на нескольких складах есть в достаточном количестве один и тот же товар, и при планировании нужно выбрать, с какого склада его доставить.
Как реализовать сценарий
Внимание
При использовании этого сценария перечислите всех курьеров, которые стартуют с каждого склада.
Укажите при планировании несколько складов, а для каждого курьера — к каким складам он привязан (т.е. склады, с которых он может стартовать и которые может посещать в ходе маршрута). Подробнее в разделах Доставка с одного из нескольких складов и Старт с одного из нескольких складов.
Помимо этого, для сценария можно использовать функцию старта в произвольной точке без заезда на склад (подробнее в разделе Старт или окончание маршрута в произвольной точке, когда start_at
определено, а visit_depot_at_start
= false
). Если указать для каждого курьера склад как точку старта, в которой необходимо начать отгрузку, то результат планирования будет аналогичным планированию с нескольких складов.
Примечание
Если известно, с какого склада должен отгружаться определенный заказ, используйте параметр location.depot_id. В значении параметра укажите id
склада или массив id
складов.
Сценарий можно реализовать и без функций сервиса, а именно через жесткое закрепление заказа за складом. Есть несколько вариантов жесткого закрепления:
-
Ближайший склад
Между координатами адреса заказа и всеми складами рассчитывается расстояние (используйте для расчета сервис Матрица расстояний). Для заказа выбирается ближайший склад.
-
Зона доставки
Для каждого склада заранее определена зона доставки (отрисованная с помощью Конструктора карт Яндекса). Для каждого заказа предварительно проверяется, в зону доставки какого склада он попадает. Каждый склад планируется отдельно и независимо по сценарию Доставка с одного склада.
Схема
Пример 1
В этом примере через параметр depot_id
указано, к какому складу прикреплен каждый курьер. Так курьеры доставляют заказы только со своих складов.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
В этом примере курьеры начинают свой маршрут не со склада, а с одной из двух точек с типом garage. Точка старта маршрута определена через start_at.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Даны три склада, три заказа и три автомобиля. Каждый автомобиль стартует со своего склада. Привязка заказов к складам через location.depot_id
:
-
Заказ № 1 не привязан к складам. Его можно доставлять с любого склада.
-
Заказ № 2 привязан к складам № 1 и № 2. Этот заказ можно доставить с одного из двух указанных складов.
-
Заказ № 3 привязан к складу № 3. Он находится на определенном складе.
В результате алгоритм рассчитал два маршрута:
- Один курьер обслуживает заказы № 1 и № 2 со склада № 2.
- Другой курьер обслуживает заказ № 3 со склада № 3.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Маршруты с несколькими складами
Множественные склады Посмотреть видео |
Заезд на дополнительный склад
В каких ситуациях использовать
Частым сценарием при планировании является заезд на дополнительный склад для дозагрузки:
-
Курьеры стартуют с основного склада 1.
-
Часть курьеров сразу отправляется на доставку.
-
Часть курьеров заезжает для дозагрузки на склад 2, где находится часть заказов для некоторых клиентов.
-
Курьеры, которые отправились на дозагрузку, могут доставить часть заказов по пути на склад 2.
Как реализовать сценарий
Используйте следующие обязательные поля:
-
vehicle.allow_different_depots_in_route
— возможность посещать несколько складов в одном маршруте:- Если
true
, то курьер может посещать различные склады в одном маршруте. - Если
false
(значение по умолчанию), то курьер может посещать только один склад — тот, с которого начал маршрут.
- Если
-
vehicle.max_middle_depots
— максимальное количество промежуточных складов в маршруте. По умолчанию равно 0. -
Если неважно, с какого склада начинать или где заканчивать маршруты, перечислите все склады в поле
vehicle.depot_id
.Если порядок посещения складов важен, заполните поля:
-
vehicle.starting_depot_id
— склады, с которых курьер может начинать маршрут; -
vehicle.middle_depot_id
— склады для дозагрузки (промежуточные склады); -
vehicle.ending_depot_id
— склады, на которых курьер может завершить маршрут.
Списки складов могут пересекаться.
Если курьер завершает маршрут не на складе (
return_to_depot
=false
), но поляvehicle.starting_depot_id
иvehicle.middle_depot_id
используются, в полеvehicle.ending_depot_id
укажите любой склад, его посещение не будет запланировано. -
Также вы можете использовать опциональные поля:
-
vehicle.depots_only_at_run_beginning
— курьер может заезжать на промежуточные склады для дозагрузки только в начале рейса. По умолчаниюfalse
. -
vehicle.finish_route_in_starting_depot
илиvehicle.finish_run_in_starting_depot
— курьер должен завершить маршрут или рейс на том же складе, откуда выехал. По умолчаниюfalse
. Эти параметры имеет смыл использовать, только еслиallow_different_depots_in_route
=true
. Подробнее см. Возврат на склад в конце маршрута или рейса.
Посмотреть, на каком из складов был взят и куда отвезен заказ, можно в ответе API в полях picked_orders
и delivered_orders
.
Схемы
-
Курьер может посещать промежуточный склад в середине рейса.
-
Курьер может посещать промежуточный склад только в начале рейса (параметр
vehicles.depots_only_at_run_beginning
=true
).
Пример 1
Курьеру необходимо доставить 4 заказа, которые находятся на 2 складах. Поэтому курьер:
- Стартует со склада 2, где загружает заказы 2, 3 и 4.
- Доставляет по дороге заказ 3.
- Заезжает на дозагрузку на склад 1.
- Доставляет оставшиеся заказы.
В результате планирования в поле picked_orders
вы увидите следующие значения:
Order 3
,Order 4
,Order 2
дляDepot 2
;Order 1
дляDepot 1
.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
То же, что и в примере 1, но параметр depots_only_at_run_beginning
= true
. В результате планирования курьер:
- Стартует со склада 2, где загружает заказы 2, 3 и 4.
- Заезжает на дозагрузку на склад 1, где забирает заказ 1.
- Доставляет заказы.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Необходимо доставить 4 заказа:
Заказ | Тип заказа | Что нужно сделать |
---|---|---|
Заказ 1 | delivery |
Забрать со склада 1 или 2 |
Заказ 2 | delivery |
Забрать со склада 3 или 4 |
Заказ 3 | pickup |
Отвезти на склад 1 или 3 |
Заказ 4 | pickup |
Отвезти на склад 2 или 4 |
Поэтому курьер:
- Стартует со склада 2, где забирает заказ 1.
- Забирает по очереди pickup-заказы 3 и 4.
- Заезжает на промежуточный склад 3, где выгружает заказ 3 и забирает заказ 2.
- Отвозит по очереди заказы 2 и 1.
- Возвращается на склад 2, где выгружает заказ 4.
Посмотреть, на каком складе был взят заказ, можно в ответе API в поле picked_orders
, а на какой склад был отвезен заказ — в поле delivered_orders
.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Старт нового рейса с другого склада
В каких ситуациях использовать
В этом сценарии курьер может сделать несколько рейсов. При этом новый рейс можно начинать с другого склада (который указан в vehicle.starting_depot_id
). Между рейсами возможен порожний пробег с одного склада на другой.
Как реализовать сценарий
Используйте те же параметры, что и при планировании заезда на дополнительный склад.
Чтобы курьер между рейсами мог переехать с одного склада на другой, задайте параметр can_change_depot_between_runs
= true
(по умолчанию false
).
Схема
Пример
То же, что и в примере с заездом на дополнительный склад, но есть ограничения по весу — в автомобиль помещаются только 2 заказа. При этом курьер может совершить 2 рейса: vehicle.max_runs
= 2. Каждый рейс должен начинаться на складе 2, а заканчиваться на складе 1. Чтобы курьер между рейсами мог переехать с одного склада на другой, задан параметр can_change_depot_between_runs
= true
. Курьер выполняет следующие действия:
- Стартует со склада 2, где загружает заказ 4. Заезжает на дозагрузку на склад 1 за заказом 1. Доставляет заказы 4 и 1. Завершает первый рейс на складе 1.
- Переезжает на склад 2. Загружает заказы 2 и 3 для второго рейса. Доставляет загруженные заказы. Снова возвращается на склад 1 в конце рейса.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Выбор оптимального склада для старта
В каких ситуациях использовать
В этом сценарии необходимо решить, как распределить курьеров между складами, исходя из объема отгрузки на складах. Условия:
-
есть несколько складов;
-
парк автомобилей общий для всех складов.
Этот сценарий можно использовать как в том случае, когда нет необходимости заезжать на дополнительные склады, так и когда для доставки в одну точку может потребоваться заезд на дополнительные склады.
Как реализовать сценарий
Для каждого курьера в поле vehicle.starting_depot_id
укажите один или несколько складов, с которых он может стартовать и забирать заказы. Алгоритм выберет оптимальный склад для старта. Также нужно указать vehicle.ending_depot_id
— склады, на которых курьер может завершить маршрут.
При необходимости используйте следующие поля:
-
vehicle.allow_different_depots_in_route
— возможность посещать несколько складов в одном маршруте:- Если
true
, то курьер может посещать различные склады в одном маршруте. - Если
false
, то курьер может посещать только один склад — тот, с которого начал маршрут.
- Если
-
vehicle.middle_depot_id
— склады для дозагрузки (промежуточные склады). -
vehicle.max_middle_depots
— максимальное количество промежуточных складов во всем маршруте. По умолчанию равно 0.
Примечание
Списки складов могут пересекаться. Если состав начальных, промежуточных и конечных складов совпадает, вместо указания трех отдельных полей можно перечислить их в поле vehicle.depot_id
.
Схема
Пример
Товары для доставки есть на двух складах. Для курьера в поле starting_depot_id
указаны оба склада, но завершить маршрут нужно на складе 2. Так как склад 2 находится дальше от адресов доставки, то алгоритм выбирает для старта склад 1, но завершает маршрут на складе 2.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Доставка в одну из возможных точек
В каких ситуациях использовать
Используйте этот сценарий для ситуаций, когда груз можно доставить в одну из нескольких возможных точек и при планировании нужно выбрать оптимальную из них:
-
Прием медицинских анализов на дому — отвезти их в ближайшую лабораторию.
-
Вывоз мусора или сбор металлолома — отвезти все на ближайших полигон.
-
Получение посылки от клиента — отправить ее через стороннюю транспортную компанию, а для этого — отвезти в ближайший терминал приема.
-
Курьерская доставка — спланировать встречу обычного курьера и курьера с фиксированным маршрутом, который собирает срочные отправления у обычных курьеров.
Как реализовать сценарий
Реализуйте сценарий доставки в одну из возможных точек с помощью параметра delivery_to_any.
Посмотреть, куда был отвезен заказ, можно в ответе API — у складов или заказов drop_off
в поле delivered_orders
.
Схема
Пример
В этом примере реализован набор заказов pickup
, у каждого из которых в delivery_to_any
указано несколько одинаковых точек. Собрав заказы, в конце смены курьер отвезет их на ближайшую точку drop_off
. Для первого курьера это будет «Лаборатория 4», а для второго «Лаборатория 2» — в ответе API доставленные в эти точки заказы перечислены в полях delivered_orders
.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Получение груза в одной из возможных точек
В каких ситуациях использовать
Используйте этот сценарий в ситуациях, когда определенный груз можно получить в одной из нескольких точек и при планировании нужно выбрать оптимальную из них. Например:
-
товар для доставки находится в разных точках (например, в одном из продуктовых магазинов или аптек);
-
груз можно получить в одном из терминалов сторонней транспортной компании;
-
необходимо спланировать встречу обычного курьера и курьера с фиксированным маршрутом, который передает срочные отправления обычным курьерам.
Как реализовать сценарий
Подробнее читайте в разделе с описанием параметра pickup_from_any.
Схема
Пример
В примере определены 2 заказа delivery
, у которых pickup_from_any
равен true
. С каждым из этих заказов связано по 2 заказа pickup
.
Обратите внимание, что у всех pickup
и у связанного delivery
вес должен быть одинаковым.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Планирование нескольких рейсов со склада для одного курьера
В каких ситуациях использовать
-
Объем отгрузки превышает доступную грузоподъемность
В этом случае все автомобили либо часть из них должны совершить более одного рейса, чтобы вывезти весь объем заказов.
-
Невозможно собрать все заказы к отгрузке
Иногда мощности склада не позволяют собрать все заказы к началу отгрузки, но доставку нужно начинать сразу же, чтобы обеспечить выполнение окон заказов. В этом случае в первый рейс курьеры буду выезжать недогруженными, чтобы успеть развезти заказы с более ранними окнами доставки. Тем временем склад будет собирать заказы с более поздним окном доставки, которые будут доставляться уже следующими рейсами.
Как реализовать сценарий
-
Возможность выполнения нескольких рейсов задается через параметр
max_runs
(подробнее в разделе Несколько рейсов автомобиля в день). -
Чтобы учитывать, что не все заказы будут собраны к началу отгрузки, используйте параметр
depot_ready_time
(подробнее в разделе Время готовности заказа на складе).
Схема
Пример 1
В этом примере суммарный вес трех заказов (3000 кг) превышает суммарную грузоподъемность двух машин (2500 кг). Курьер № 2 совершит два рейса (max_runs
), и во втором рейсе отвезет третий заказ.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
В этом примере курьер сначала развезет более ранние заказы (time_window
), готовность которых определяется через depot_ready_time
. Параметр max_runs
позволит ему вернуться на склад для дозагрузки более поздних заказов.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Кросс-докинг
Кросс-док — это склад, на котором осуществляется перевалка, переконсолидация или догрузка товара. Для таких складов в поле type
указывается значение crossdock
.
Кросс-докинг можно использовать для части заказов, чтобы обеспечить скорость доставки и сократить затраты на транспорт: заказы заранее отвозят на кросс-док поближе к дальним заказам. Например, склад расположен к северу от города, и доставка происходит днем. Тогда для доставки заказов в южную часть города организуют кросс-док на юге, куда часть заказов доставляют ночью крупным транспортом.
На кросс-доках заказы не хранятся — сначала один или несколько автомобилей привозят заказы, а затем один или несколько автомобилей забирают эти заказы и отвозят клиентам. На текущий момент перевозить заказы до кросс-дока и после должны разные автомобили.
Для автомобилей устанавливается ограничение по работе с кросс-доками с помощью параметра crossdock_mode
. Он может принимать следующие значения:
allow
— автомобиль может отвозить заказы и клиентам, и на кросс-док (это значение по умолчанию);deny
— автомобиль может отвозить заказы только клиентам;mandatory
— автомобиль может отвозить заказы только на кросс-док.
Чтобы указать, какие склады или кросс-доки посещает автомобиль, используйте поля vehicle.depot_id
, vehicle.starting_depot_id
, vehicle.middle_depot_id
и vehicle.ending_depot_id
.
Внимание
В полях vehicle.depot_id
, vehicle.starting_depot_id
, vehicle.middle_depot_id
и vehicle.ending_depot_id
нельзя одновременно указывать и обычные склады, и кросс-доки. В одном маршруте курьер может посещать или только обычные склады, или только кросс-доки.
Для заказов также задается параметр crossdock_mode
со следующими значениями:
allow
— заказ можно доставлять и напрямую со склада, и через кросс-док (это значение по умолчанию);deny
— заказ можно доставлять только напрямую со склада;mandatory
— заказ можно доставлять только через кросс-док.
Чтобы указать, на каком складе находится заказ или через какой кросс-док он должен быть доставлен, используйте поле location.depot_id
. Если указано несколько складов и кросс-доков, это означает, что заказ можно забрать с любого из них.
Для заказов типа pickup
можно задать параметр may_drop_in_crossdock
, который принимает следующие значения:
true
— заказ можно оставить в кросс-доке (значение по умолчанию);false
— заказ должен быть доставлен на обычный склад.
Параметр may_drop_in_crossdock
можно использовать только в сценарии Доставка в одну из возможных точек. Если есть связки заказов pickup&delivery
с возможностью перевалки в кросс-доке, используйте сценарий Pickup & delivery через кросс-док.
Примечание
Курьер сначала отвозит заказы типа delivery
на кросс-док и только после этого забирает заказы типа pickup
с кросс-дока.
Время обслуживания
Для заказов, которые доставляются через кросс-док, учитывается сервисное время location.crossdock_service_duration_s
. Когда автомобиль приезжает с обычного склада на кросс-док, время обслуживания для него считается по формуле:
depot.service_duration_s
+ Сумма{ location.crossdock_service_duration_s
} по всем заказам, которые привез автомобиль.
При кросс-докинге полезно закладывать запас по времени depot.crossdock_safety_waiting_duration_s
— минимальный интервал времени, который должен пройти с момента разгрузки заказа на кросс-доке, прежде чем этот заказ можно будет забрать для доставки клиенту (по умолчанию 3600 сек., или 1 час). Этот запас нужен для того, чтобы возможное опоздание первого автомобиля (везущего заказы в кросс-док) не нарушало маршруты тех автомобилей, которые забирают заказы из кросс-дока.
Схема
Пример 1
4 курьера и 6 заказов, которые нужно развезти из 2 складов и частично через кросс-док. Склады находятся на западе Москвы, а кросс-док — на востоке. Заказы 1, 2 и 3 находятся на западе и доставляются со складов. Заказы 4, 5 и 6 находятся на востоке и доставляются через кросс-док.
Результат планирования:
Курьер | Характеристики курьера | Маршрут |
---|---|---|
Курьер 1 | Стартует со склада 1. Ему запрещено отвозить заказы на кросс-док. | Забирает на складе 1 заказы 1 и 3 и развозит их клиентам. |
Курьер 2 | Стартует со склада 2. Ему разрешены любые маршруты. | Забирает на складе 2 заказы 2 и 6. Заказ 2 отвозит клиенту, а заказ 6 — на кросс-док. |
Курьер 3 | Стартует со склада 1. Может только отвозить заказы на кросс-док. | Забирает на складе 1 заказы 4 и 5, отвозит их на кросс-док и возвращается на склад 1. |
Курьер 4 | Стартует с кросс-дока. | Забирает на кросс-доке заказы 4, 5 и 6 и отвозит их клиентам. |
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
В задаче планирования 2 курьера, 1 склад на юге Москвы и кросс-док на востоке. Для заказов заданы следующие условия:
Заказ | Тип заказа | Где находится | Куда доставляется | Через кросс-док | Можно оставить в кросс-доке |
---|---|---|---|---|---|
1 | delivery |
На складе | Клиенту | Да | - |
2 | pickup |
У клиента | В кросс-док | Нет | Да |
3 | pickup |
У клиента | В кросс-док | Нет | Да |
4 | pickup |
У клиента | На склад | Да | Нет |
Результат планирования:
Курьер | Характеристики курьера | Маршрут |
---|---|---|
Курьер 1 | Стартует со склада 1. Может только отвозить заказы на кросс-док. | Забирает со склада заказ 1 и отвозит его на кросс-док. После ожидания забирает с кросс-дока заказ 4 и отвозит его на склад. |
Курьер 2 | Стартует с кросс-дока. | Забирает с кросс-дока заказ 1. Забирает заказы 2, 3 и 4 у клиентов и доставляет заказ 1 клиенту. Отвозит заказы 2, 3 и 4 на кросс-док. |
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Те же склады и курьеры, что в примере 2. Для заказов заданы следующие условия:
Заказ | Тип заказа | Где находится | Куда доставляется | Через кросс-док | Можно оставить в кросс-доке |
---|---|---|---|---|---|
1 | delivery |
На складе | Клиенту | Да | - |
2 | pickup |
У клиента | В drop_off или drop_off_2 (delivery_to_any ) |
Нет | Да |
3 | pickup |
У клиента | В кросс-док | Нет | Да |
4 | pickup |
У клиента | На склад | Да | Нет |
Результат планирования:
Курьер | Характеристики курьера | Маршрут |
---|---|---|
Курьер 1 | Стартует со склада 1. Может только отвозить заказы на кросс-док. | Забирает со склада заказ 1 и отвозит его на кросс-док. Забирает с кросс-дока заказ 4 и отвозит его на склад. |
Курьер 2 | Стартует с кросс-дока. | Забирает с кросс-дока заказ 1. Забирает заказ 3 у клиента, доставляет заказ 1 клиенту, забирает заказы 2 и 4 у клиентов, доставляет заказ 2 в drop_off_2 , отвозит заказы 3 и 4 на кросс-док. |
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Планирование без учета плеча доставки до кросс-дока
В каких ситуациях использовать
Используйте этот вариант настройки, если нет необходимости учитывать плечо доставки от основного склада до кросс-дока.
Как реализовать сценарий
Этот сценарий аналогичен доставке с одного из нескольких складов, и его можно реализовать такими же способами.
Внимание
В отличие от описанного выше сценария кросс-докинга, в данном сценарии доставка заказов до кросс-дока не входит в маршруты. При планировании предполагается, что любой заказ может оказаться на кросс-доке, и нужно выбрать, какие из заказов отгружать оттуда выгоднее. Также должно быть заранее известно, какие машины стартуют с основного склада, а какие — с кросс-докинговой площадки.
Схема
Пример
60 точек с типом delivery
— это заказы, которые нужно доставить. 1 точка с типом garage
— это кросс-док. Для одного курьера указано начать маршрут со склада, для другого — с кросс-дока.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Pickup & delivery через кросс-док
В каких ситуациях использовать
Данный сценарий используется, если заказы, которые необходимо развести с кросс-дока, предварительно нужно собрать по точкам pickup
.
Как реализовать сценарий
Задайте ограничения по времени для маршрутов сбора заказов на кросс-док и последующей доставки заказов клиентам.
-
Сбор и доставка разными автомобилями
Разделите доставку до кросс-дока и после него на разные планирования. Вы получите одно планирование по сценарию Сбор грузов на склад и второе по сценарию Доставка с одного склада.
Пример
Кросс-докинг через два разных планирования: сбор и доставка.
1. Первая часть — сбор. Один автомобиль в утреннюю смену собирает заказы по адресам и возвращается на склад.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
2. Вторая часть — доставка. Другой автомобиль в дневную смену забирает заказы со склада и развозит получателям.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
-
Сбор и доставка одним автомобилем
Задайте ограничение по времени на сбор и доставку заказов.
1. Для заказов, которые необходимо собрать на кросс-доке:
- задайте тип
pickup
; - используйте параметр delivery_deadline.
2. Для заказов, которые необходимо доставить с кросс-дока:
- задайте тип
delivery
; - используйте параметр depot_ready_time.
Между значениями параметров
delivery_deadline
иdepot_ready_time
должно быть окно для выполнения кросс-докинговых операций. Например, сбор груза выполнить до 13:00, а доставку начать в 14:00.Пример
1 курьер, 10 заказов
pickup
и 10 заказовdelivery
. Заказы не связаны между собой. Всеpickup
нужно доставить на склад до 13:00, а всеdelivery
можно забрать со склада с 14:00. Чтобы курьер мог выполнить заказы за 2 рейса, указаноvehicle.max_runs
= 2.Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
- задайте тип
Схема
Доставка с парковкой автомобиля перед пешей частью маршрута
В каких ситуациях использовать
Сценарий используется, когда в маршруте есть несколько близко расположенных заказов. Курьер может доехать на автомобиле, припарковаться и разнести заказы пешком. Если за один раз все заказы унести невозможно, курьер делает несколько заходов. В начале каждого захода курьер берет часть заказов, разносит их, а затем возвращается к автомобилю и берет следующую часть заказов.
Пеших частей в маршруте может быть несколько.
Как реализовать сценарий
Задайте параметры:
-
location.parking_service_duration_s
— время, которое курьер тратит на парковку автомобиля.Примечание
Для способов передвижения
walking
иtransit
параметрlocation.parking_service_duration_s
не участвует в расчетах затраченного времени.Для остальных способов передвижения время, указанное в параметре
location.parking_service_duration_s
, будет учтено только один раз — перед началом пешеходной части маршрута. -
vehicle.walking_courier.capacity.units
— максимальное количество юнитов, которое может унести курьер. Чтобы использовать эту функциональность, дополнительно укажите число юнитов для заказа с помощью параметраlocation.shipment_size
.Если курьеру нужно разнести больше юнитов, чем указано в параметре
vehicle.walking_courier.capacity.units
, то алгоритм может сформировать маршрут, при котором курьер сделает несколько заходов. Например, если нужно разнести пешком 10 юнитов, а параметрvehicle.walking_courier.capacity.units
= 5, то курьер сначала доставит 5 юнитов, затем вернется к автомобилю и заберет оставшиеся 5 юнитов.Примечание
В Маршрутизации поддерживаются сценарии, когда только один курьер выходит из автомобиля и разносит заказы пешком.
-
vehicle.walking_courier.cost.hour
и/илиvehicle.walking_courier.cost.km
— стоимость пешей доставки за час и за километр. Стоимость пешей доставки рассчитывается так же, как и стоимость автомобиля или курьера. -
vehicle.walking_courier.restrictions
— ограничения для пеших частей маршрутов:max_walking_edge_distance_m.value
иmax_walking_edge_distance_m.penalty
— максимально допустимое расстояние (в метрах) между двумя точками внутри пеших частей маршрута и штраф за нарушение ограничения.max_parking_walking_distance_m.value
иmax_parking_walking_distance_m.penalty
— максимально допустимое расстояние (в метрах), которое можно пройти в рамках одной парковочной сессии, и штраф за нарушение ограничения.max_parking_duration_s.value
иmax_parking_duration_s.penalty
— максимально допустимая длительность (в секундах) одной парковочной сессии и штраф за нарушение ограничения.close_locations
— массив ограничений для близких заказов:duration_till_service_s.value
иduration_till_service_s.penalty
— максимально допустимое время (в секундах) между обслуживанием двух близких заказов и штраф за нарушение ограничения.distance_till_service_m.value
иdistance_till_service_m.penalty
— максимально допустимое пройденное расстояние (в метрах) между обслуживанием двух близких заказов и штраф за нарушение ограничения.search_radius_m
— расстояние между двумя заказами, которые считаются близкими и на которые распространяются ограничения.soft_search_radius_m
— если значение этого параметра превышает значение соответствующегоsearch_radius_m
, то на заказы на расстоянии отsearch_radius_m
доsoft_search_radius_m
также будет накладываться штраф, но его размер линейно уменьшается в зависимости от расстояния. Например, на расстоянии (search_radius_m
+soft_search_radius_m
) / 2 будет действовать штраф с весом 0,5.
Пример использования настроек близких заказов
{ ... "walking_courier": { ... "restrictions": { "close_locations": [ { "routing_mode": "walking", "search_radius_m": 400, "soft_search_radius_m": 500, "distance_till_service_m": { "penalty": 0.02, "value": 1500 } }, { "routing_mode": "walking", "search_radius_m": 100, "soft_search_radius_m": 160, "duration_till_service_s": { "penalty": 0.02, "value": 1500 } } ], ... } ... }, ... }
В примере выше первое ограничение устанавливает, что заказы на расстоянии до 400 метров друг от друга должны быть обслужены в пределах следующих 1500 метров движения. Превышение ограничения штрафуется на 0.02 за каждый метр. Для заказов на расстоянии от 400 до 500 метров данное ограничение также действует, но уменьшается линейно в зависимости от расстояния — например, для заказа на расстоянии 430 метров будет применен штраф в размере 0.7 от основного.
Второе ограничение аналогично первому, но устанавливает время между обслуживанием заказов. Заказы в радиусе 100 метров должны быть обслужены в пределах 25 минут со штрафом 0.02 за каждую секунду превышения. На заказы на расстоянии от 100 до 160 метров штраф накладывается, но уменьшается линейно по мере отдаления.
Для балансировки стоимости посещения заказов пешком и на автомобиле используйте options.average_projection_walking_part_distance_m
— опция задает среднюю длину пешеходной части от дороги до заказа. При использовании опции за каждое посещение заказа на автомобиле курьер получает штраф в размере двойной стоимости пешеходного пути.
Например, если average_projection_walking_part_distance_m
= 15
, то к стоимости каждого посещения будет добавлена стоимость 30 метров пешего маршрута. Настройка позволяет компенсировать стоимость пешей части пути при использовании способа передвижения driving
по сравнению с аналогичным расстоянием в случае использования walking
.
Схема
Пример 1
Маршрут состоит из 10 заказов. Некоторые заказы расположены недалеко друг от друга:
- заказы 1, 2, 3 и 4;
- заказы 5, 7 и 9;
- заказы 8 и 10.
Поскольку стоимость пешей доставки меньше, чем на автомобиле, для доставки близких заказов курьер паркуется и разносит их пешком. Для доставки остальных заказов курьер передвигается на автомобиле.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
То же, что и в примере 1, только vehicle.walking_courier.capacity.units
= 2. Для доставки близких заказов курьер паркуется и разносит их не более, чем по два юнита за заход.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Использование прицепа
В каких ситуациях использовать
По умолчанию в точку заказа может приехать только грузовик без прицепа. Используйте этот сценарий, если точка заказа доступна для грузовика с прицепом. Настройки грузовика с прицепом см. в разделе Сцепки.
Примечание
Для грузовиков с полуприцепом сценарий не используется.
Как реализовать сценарий
Доступность точки для грузовика с прицепом задается в поле location.allow_trailers
. По умолчанию location.allow_trailers
= false
— неподъездная точка, в которую может приехать только грузовик без прицепа. Чтобы реализовать сценарий с подъездной точкой, укажите location.allow_trailers
= true
. В такую точку может приехать грузовик с прицепом.
Типы заказов для грузовиков с прицепами:
-
anchor
— точка, в которой можно оставить прицеп на некоторое время и при необходимости сделать перекатку; -
parking
— точка, где можно оставить прицеп только на время разгрузки заказов, на которые запрещено приезжать с прицепом.
В точку с типом anchor
(якорную) можно приехать с прицепом, оставить его на несколько часов, сделать перекатку. У такого заказа должен быть уникальный id
. Если в эту точку нужно привезти груз, то необходимо создать еще один заказ с типом delivery
(см. Тип заказа).
Число автомобилей (сцепок грузовика и прицепа), которые может обслужить якорная точка, по умолчанию не ограничено. При необходимости укажите в параметре max_total_vehicles
максимальное число автомобилей, которое может обслужить якорная точка за всё время планирования.
Для ограничения количества автомобилей, которые могут одновременно находиться в якорной точке, используйте поле rolling_throughput.vehicle_count
.
Если при планировании пропускная способность якорной точки превышена, за это начисляются штрафы:
-
penalty.rolling_throughput.fixed
— за факт нарушения; -
penalty.rolling_throughput.vehicle
— за каждый автомобиль превышения относительно ограниченияrolling_throughput.vehicle_count
.
В точке с типом parking
можно оставить прицеп только на время разгрузки нескольких заказов в неподъездных точках.
В решении задачи планирования для заказов с типом anchor
и parking
появляются поля:
Поле |
Описание |
|
Показывает, как грузовик выехал со склада, с прицепом или без. Принимает значения |
|
Описывает случай, когда грузовик выехал с прицепом. Показывает, отцепил он прицеп по пути или нет. Принимает значения |
Фрагмент ответа
{
"arrival_time_s": 36726.340873455316,
"node": {
"type": "location",
"used_time_window": "12:00:00-18:00:00",
"value": {
"anchor_mode": "Decoupling",
"hard_window": false,
"id": 1,
"penalty": {
"out_of_time": {
"fixed": 1000,
"minute": 17
}
},
"point": {
"lat": 55.780426,
"lon": 37.712129
},
"ref": "",
"service_duration_s": 0,
"shared_service_duration_s": 0,
"time_window": "12:00:00-18:00:00",
"total_service_duration_s": 0,
"trailer_decoupled": true,
"trailer_used": true,
"type": "anchor"
}
},
"transit_distance_m": 4035.227074751774,
"transit_duration_s": 726.3408734553194,
"violations": [],
"waiting_duration_s": 6473.659126544684
}
Следующие поля появляются в решении только для заказов с типом anchor
:
Поле |
Описание |
|
Режим использования якорной точки. Принимает значения:
|
|
Содержит список заказов, которые надо переместить из прицепа в грузовик (только для точек с |
Фрагмент ответа
{
"route": [
{
"arrival_time_s": 49003,
"departure_time_s": 52603,
"load_to_head": [
"Order 1",
"Order 2",
"Order 3",
"Order 4"
],
"node": {
"type": "location",
"used_time_window": "08:00:00-14:00:00",
"value": {
"anchor_mode": "Rolling",
"hard_window": false,
"id": "anchor43",
"point": {
"lat": 52.527983,
"lon": 85.227133
},
"ref": "",
"service_duration_s": 3600,
"shared_service_duration_s": 0,
"time_window": "08:00:00-14:00:00",
"total_service_duration_s": 3600,
"trailer_decoupled": true,
"trailer_used": true,
"type": "anchor"
}
}
}
]
}
У склада в решении задачи маршрутизации со сцепками появляются поля:
Поле |
Описание |
|
Показывает, как грузовик выехал на маршрут из гаража: с прицепом или без. Принимает значения |
|
Показывает, как грузовик выехал со склада: с прицепом или без. Принимает значения |
|
Список заказов, которые должны быть загружены в грузовик. |
|
Список заказов, которые должны быть загружены в прицеп. |
Фрагмент ответа
{
"route": [
{
"arrival_time_s": 0,
"departure_time_s": 5040,
"load_to_head": [
"Order 5",
"Order 6",
"Order 7",
"Order 8"
],
"load_to_trailer": [
"Order 1",
"Order 2",
"Order 3",
"Order 4"
],
"node": {
"type": "depot",
"used_time_window": "00:00:00-1.23:59:59",
"value": {
"finish_service_duration_s": 1800,
"flexible_start_time": true,
"hard_window": true,
"id": "576",
},
"point": {
"lat": 53.400374288503,
"lon": 83.967696868016
},
"preliminary_service_duration_s": 0,
"ref": "",
"service_duration_s": 5040,
"time_window": "00:00:00-1.23:59:59",
"total_service_duration_s": 5040,
"trailer_decoupled": false,
"trailer_used": true
}
}
]
}
Схема
Примечание
Чтобы точки перекатки, отсоединения и присоединения прицепа отображались на карте, обратитесь в службу поддержки для подключения этой опции.
Выгрузка решений с прицепами в Мониторинг пока не поддерживается.
Пример 1
В примере один грузовик с прицепом должен развезти три заказа. К одной из точек подъехать с прицепом можно (allow_trailers
= true
), к двум другим — нет (allow_trailers
= false
). В маршруте есть точки, в которых можно на некоторое время оставить прицеп (type = parking
).
В полученном решении грузовик сначала заезжает на парковку, оставляет там прицеп, а потом едет разгружаться в неподъездную точку. После доставки груза он возвращается в точку парковки, забирает прицеп и едет дальше по маршруту.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
В примере один грузовик с прицепом должен развезти четыре заказа. К двум точкам подъехать с прицепом нельзя (allow_trailers
= false
), а к двум другим — можно (allow_trailers
= true
). В маршруте есть также якорная точка (type = anchor
), в которой можно оставить прицеп на продолжительное время.
Алгоритм строит маршрут с учетом неподъездных точек. Сначала грузовик приезжает в якорную точку и оставляет прицеп. Потом доставляет заказы в точки, где его не приняли бы с прицепом. Затем возвращается за прицепом в якорную точку и везет груз туда, куда с ним приехать разрешено.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
В примере один грузовик с прицепом должен развезти четыре заказа в точки, к которым подъехать с прицепом нельзя (allow_trailers
= false
). В маршруте есть якорная точка (type = anchor
). При этом общий вес заказов значительно больше грузоподъемности ТС, то есть грузовик не может развезти все заказы без использования прицепа.
Сначала грузовик приезжает в якорную точку, оставляет прицеп и отвозит два заказа без прицепа. Затем возвращается в якорную точку, делает перекатку груза из прицепа в грузовик и снова уезжает без прицепа на доставку оставшихся заказов.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 4
В примере 23 заказа с неподъездными точками (allow_trailers
= false
) и 4 курьера. В маршруте есть две якорные точки (type = anchor
). Ограничение пропускной способности не задано, поэтому в решении все курьеры пользуются только одной якорной точкой.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 5
То же, что и в примере 4, но для якорных точек заданы ограничения пропускной способности. В первой одновременно могут находиться не более двух автомобилей (rolling_throughput.vehicle_count
= 2). Вторая якорная точка может обслужить только 2 грузовика за день (max_total_vehicles
= 2). Установлены штрафы за нарушение пропускной способности за каждый автомобиль (penalty.rolling_throughput.vehicle
).
В решении используются 2 якорные точки с учетом их пропускной способности.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 6
В примере один грузовик с прицепом должен доставить 6 заказов. К трем точкам подъехать с прицепом можно (allow_trailers
= true
), к остальным — нет (allow_trailers
= false
). В маршруте есть точка, где можно на некоторое оставить прицеп (type
= parking
).
В результате грузовик заезжает на парковку, оставляет там прицеп и развозит три заказа, к которым запрещено приезжать с прицепом. После доставки этих заказов курьер возвращается на точку парковки, забирает прицеп и продолжает движение по маршруту.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте