Cмены курьеров и маршруты
С помощью параметров транспортных средств вы можете настроить смены курьера, их максимальную продолжительность, количество рейсов и остановок, задать максимальный пробег и ограничения для маршрутов.
Смены работы автомобиля или курьера
Для автомобиля можно определить одну или несколько смен работы. Для определения смен используется поле vehicle.shifts.
Смена представляет собой диапазон времени, в который разрешена работа автомобиля. Время смены включает в себя время нахождения на складе при загрузке, а также время в движении, сервисное время на заказах и время разгрузки на складе (если автомобиль возвращается на склад).
Для использования одной или более смен в Excel необходимо определить следующие поля:
-
shifts.0.time_window— мягкое временное окно, соответствующее времени работы автомобиля. -
shifts.0.hard_window— флаг жесткого временного окна. Если окно жесткое, алгоритм не может выйти за рамки заданного интервала. -
shifts.0.service_duration_s— время между сменами (в секундах). Например, время на замену водителя, обмен документами и т.д.
Также можно ограничить максимальную продолжительность смены (shifts.N.max_duration_s и shifts.N.hard_max_duration_s).
В случае определения мягкого временного окна можно дополнительно задать штрафы:
-
за нарушение временного окна:
shifts.0.penalty.out_of_time.fixed— штраф за факт нарушения временного окна смены.shifts.0.penalty.out_of_time.minute— штраф за минуту нарушения временного окна смены.
-
за ранний выезд:
shifts.0.penalty.early.fixed— штраф за факт начала работы раньше временного окна смены.shifts.0.penalty.early.minute— штраф за минуту начала работы раньше временного окна смены.
-
за опоздание:
shifts.0.penalty.late.fixed— штраф за факт завершения работы позже временного окна смены.shifts.0.penalty.late.minute— штраф за минуту завершения работы позже временного окна смены.
Чтобы ограничить допустимые нарушения временного окна смены, можно задать жесткое окно вокруг мягкого.
Начало, окончание и продолжительность смены
Пусть задано временное окно смены time_window с 9:00 до 18:00. Используются признак жесткости временного окна hard_window, максимальная продолжительность смены max_duration_s и признак гибкого времени старта со склада depot.flexible_start_time.
|
Как нужно запланировать работу курьера |
Параметры |
|
Выбрать интервал работы желательно не больше 6 часов строго между 9 и 18 часами |
|
|
Начать работу строго в 9 часов, желательно завершить работу до 15 часов, при необходимости можно работать до 18 часов, строго не позже (это сочетание параметров аналогично условию |
|
|
Выбрать интервал работы желательно не больше 6 часов желательно между 9 и 18 часами |
|
|
Начать работу строго в 9 часов, желательно завершить работу до 15 часов, при необходимости можно работать до 18 часов, желательно не позже (это сочетание параметров аналогично условию |
|
|
Начать работу можно позднее 9 часов, желательно закончить работу до 18 часов, желательно работать не более 10 часов |
|
|
Начать работу строго в 9 часов, желательно завершить работу до 18 часов, но желательно не позже 19 часов (это сочетание параметров аналогично условию |
|
|
Такое сочетание параметров не позволит запланировать решение |
|
Примечание
Обратите внимание, что для определения нескольких смен необходимо несколько полей в Excel с увеличивающимся числовым индексом.
Например shifts.0.time_window относится к первой смене, а shifts.1.time_window — ко второй смене.
Пример
В запросе к Маршрутизации задан 1 автомобиль с 3 сменами (утренняя, дневная, вечерняя), а также 3 заказа, из которых 1 имеет время доставки утром, и 2 вечером.
Примечание
Обратите внимание, что в ответе Маршрутизации будут использованы только утренняя и вечерняя смена, так как на дневную смену нет ни одного заказа на доставку.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Несколько рейсов курьера в день
По умолчанию курьер начинает и завершает маршрут на складе, то есть выполняет ровно один маршрут в течение рабочего дня (смены).
Если курьер может возвращаться на склад в любое время рабочей смены для дозагрузки дополнительных заказов, количество рейсов можно ограничить с помощью одного из параметров:
-
vehicle.shifts.N.max_runs— максимальное количество рейсов для данной смены. По умолчанию равно 1. -
vehicle.max_runs— максимальное количество рейсов для всех смен курьера в сумме (например, курьер может выполнить все рейсы в одну смену). Количество рейсов курьера может быть меньше, чем количество смен. По умолчанию равно 1. -
если ни один из параметров не задан, курьер может делать столько рейсов, сколько у него смен — в каждой смене по одному рейсу.
Примечание
В задаче планирования можно использовать либо vehicle.max_runs, либо vehicle.shifts.N.max_runs, но не оба параметра одновременно.
Для курьера должна быть задана хотя бы одна смена.
Пример
В примере ниже используется один автомобиль с ограниченной вместимостью в 2 тонны и три заказа с весом в 0,8 тонн. Автомобилю разрешено два рейса, то есть автомобиль может вернуться на склад после выполнения двух заказов для загрузки и доставки еще одного заказа.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Перерыв перед последним рейсом
Перерыв задается с помощью объекта vehicle.extra_wait_before_last_run_s. Особенности использования:
-
Перерыв назначается перед последним рейсом в смене.
-
Начало последнего рейса сдвигается на указанное время перерыва.
|
Параметр |
Значение |
Пример |
|
|
Продолжительность перерыва в секундах. |
Время перерыва — 45 минут (2700 секунд). |
Пример
Для курьера запланировано два рейса. Задан один часовой перерыв и перерыв на 45 минут между рейсами (extra_wait_before_last_run_s = 2700).
В результате запланированы два перерыва:
- в первом рейсе — 60 минут;
- перед началом второго рейса — 45 минут. В результате второй рейс начнется на 45 минут позже.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Ограничение количества остановок в смене
При планировании маршрута можно указать минимальное и максимальное количество остановок в маршруте. Это может быть полезно, например, чтобы ограничить максимальную нагрузку на курьера в день или, наоборот, обязательно вывести курьера на маршрут с каким-то количеством остановок.
В Маршрутизации для этого используются параметры смены minimal_stops и maximal_stops. Для каждого курьера можно задать свое количество остановок.
Ограничение не является строгим и может быть нарушено. При нарушении ограничения по минимальному количеству остановок начисляется штраф, указанный в полях смены penalty.stop_lack.fixed (за факт остановок меньше минимального количества) и penalty.stop_lack.per_stop (за каждую остановку меньше минимального количества).
Соответственно, при нарушении ограничения по максимальному количеству остановок начисляются штрафы, указанные в полях смены в полях смены penalty.stop_excess.fixed (за факт остановок больше максимального количества) и penalty.stop_excess.per_stop (за каждую остановку больше максимального количества).
Примечание
Как правило, использование ограничений на количество остановок приводит к ухудшению метрик решения, поскольку решение смещается в сторону выполнения ограничений в ущерб оптимальности маршрута.
Уникальные остановки
При использовании параметра minimal_stops заказы с совпадающими координатами считаются различными остановками, если в маршруте они расположены не подряд. Поэтому чтобы выполнить условие minimal_stops, алгоритм может спланировать маршрут так, что курьеру придется несколько раз приезжать на один и тот же адрес.
Чтобы избежать повторных приездов, вместо minimal_stops используйте параметр minimal_unique_stops и штрафы penalty.unique_stop_lack.fixed и penalty.unique_stop_lack.per_stop.
Параметр minimal_unique_stops учитывает только заказы с уникальными координатами, поэтому курьеру не будут запланированы повторные приезды. Однако заказы по одному и тому же адресу могут быть распределены на разных курьеров, поскольку в этом случае они считаются разными остановками, и алгоритм может использовать это для выполнения ограничения minimal_unique_stops.
Ограничение minimal_unique_stops имеет смысл использовать, если в маршруте много мультизаказов.
Остановки у неиспользуемых курьеров
По умолчанию ограничения количества минимальных остановок minimal_stops и minimal_unique_stops работают для всех заданных курьеров. Если курьеров задано больше чем необходимо, и значение штрафов penalty.stop_lack или penalty.unique_stop_lack слишком высокое, это может приводить к неоптимальному результату планирования.
Использовать ограничение минимального количества остановок в смене и в то же время построить эффективный маршрут позволяет опция ignore_min_stops_for_unused, см. раздел Учет минимального количества остановок только для используемых ТС.
Пример 1
В примере маршрут строится для 3 курьеров, выполняющих доставку по 15 точкам. Поскольку на маршруте не указано никаких ограничений, маршрут строится обычным образом.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
В примере указаны те же условия, что и в примере 1, но указано ограничение на 4 минимальных остановки для каждого курьера. В результате маршруты изменились так, чтобы каждый курьер посетил хотя бы 4 точки доставки.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
В примере указаны те же условия, что и в примере 1, но указано ограничение на 5 максимальных остановок для каждого курьера. В результате заказы распределены равномерно между всеми курьерами, даже несмотря на то, что несколько заказов расположены рядом и могли бы быть выполнены одним курьером.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Максимальная продолжительность смены
Иногда возникает необходимость продлить период работы курьера. При этом нужно ограничить максимальную продолжительность смены и установить период, в который желательно попасть. Например, есть определенное окно, в которое курьеры выполняют доставки, длиной в 14 часов (с 8 до 22 часов), но продолжительность смены каждого курьера не должна превышать 10 часов (max_duration_s), а продолжительность рабочего времени в смене — 8 часов (max_working_duration_s).
Маршрутизация позволяет планировать смены с жесткими временными окнами и желательной продолжительностью. При этом продолжительность смены курьера не влияет на время начала работы, а только на то время, которое он потратит на выполнение заказов.
Максимальная продолжительность смены может быть задана как мягкое ограничение shifts.N.max_duration_s, которое можно нарушить и получить штраф, и как жесткое ограничение shifts.N.hard_max_duration_s, которое нарушить нельзя:
-
При планировании с мягким ограничением нагрузка, не укладывающаяся в желательную смену одного курьера, распределяется на других или на того же курьера, но со штрафами за превышение длины смены. Все заказы, которые невозможно выполнить за время
max_duration_s, добавляются в маршрут со штрафом за опозданиеshift.penalty.late, если это значение указано, или за нарушение окнаshift.penalty.out_of_timeв противном случае. Итоговая сумма штрафа для маршрута за нарушение максимальной продолжительности смены указывается в ответе API в полеovertime_penalty. Если расчетная стоимость заказа с учетом штрафов выше, чем стоимость выполнения заказа другим курьером, заказ передается другому курьеру. -
При планировании с жестким ограничением смена курьера ни при каких условиях не превышает значение, заданное в
hard_max_duration_s.
Максимальная продолжительность рабочего времени в смене также может быть задана как мягкое shifts.N.max_working_duration_s и жесткое shifts.N.hard_max_working_duration_s ограничения.
-
Если нарушается мягкое ограничение, лишняя нагрузка распределится на других курьеров или на того же курьера, но со штрафами. Заказы, которые не будут выполнены за рабочее время в смене
max_working_duration_s, добавятся в маршрут со штрафомworking_overtime:-
shifts.N.penalty.working_overtime.fixed— штраф за факт превышения максимальной продолжительности рабочего времени в смене; -
shifts.N.penalty.working_overtime.minute— штраф за минуту такого превышения.
Если значение этого штрафа не указано, к заказам применится штраф за нарушение окна
shift.penalty.out_of_time. Итоговая сумма штрафа отразится в ответе API в полеworking_overtime_penalty. Заказ будет передан другому курьеру, если расчетная стоимость заказа с учетом штрафов превысит стоимость выполнения заказа другим курьером. -
-
При планировании с жестким ограничением максимальная продолжительность рабочего времени в смене ни при каких условиях не превышает значение, заданное в
hard_max_working_duration_s.
Если для max_duration_s и max_working_duration_s заданы оба ограничения (мягкое и жесткое), то жесткое должно быть не меньше мягкого. По умолчанию max_duration_s и max_working_duration_s составляют 2 суток, hard_max_duration_s и hard_max_working_duration_s — 30 суток.
Пример 1
Пусть окно смены shifts.N.time_window — с 8 до 23. По умолчанию маршруты будут построены с использованием минимального количества курьеров.
Если указать max_duration_s = 14400, то нагрузка будет распределена между курьерами так, чтобы каждый из них работал примерно 4 часа (длина смены задается в секундах). При этом некоторые курьеры все еще могут работать больше 4 часов, потому что выгоднее оплатить лишнее время работы, чем доставить заказ другим курьером.
В результате планирования заказы распределены между тремя курьерами. Длина смены одного из курьеров превысила 4 часа, сумма штрафа за нарушение указана в ответе API в поле overtime_penalty.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
То же, что и в примере 1, но вместо мягких ограничений максимальной продолжительности смены заданы жесткие: hard_max_duration_s = 14400. При планировании для каждого курьера выдержана смена, не превышающая 4 часов. В результате количество курьеров увеличилось до 4.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Три курьера развозят 26 заказов. Окно смены shifts.N.time_window — с 8 до 23. Установлены штрафы за факт (shifts.N.penalty.working_overtime.fixed) и минуту (shifts.N.penalty.working_overtime.minute) превышения максимальной продолжительности рабочего времени в смене.
Если указать shifts.0.max_working_duration_s = 14400, то каждый из курьеров будет работать примерно 4 часа. Ограничение мягкое, поэтому смена одного из курьеров превышает это время.
В результате планирования все заказы распределены между курьерами, а общая сумма штрафа за нарушение указана в ответе API в поле working_overtime_penalty.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 4
То же, что в примере 3, но задано жесткое ограничение максимальной продолжительности рабочего времени в смене shifts.N.hard_max_working_duration_s = 14400.
В результате планирования все курьеры задействованы и работают не дольше 4 часов, но один из заказов при этом остался нераспределенным.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Максимальный пробег за смену
В некоторых случаях пробег машины нужно ограничить. Например:
-
В планировании участвуют наемные машины, и тариф за их использование подразумевает лимит по пробегу.
-
На дальние точки должны ехать определенные машины. Тогда прочим машинам можно ограничить пробег.
Параметр shifts.max_mileage_km определяет максимальный пробег машины за смену. Учитывается весь пробег, включая:
-
движение от склада или точки старта до первой точки из списка заказов;
-
возврат на склад или точку завершения маршрута от последней точки из списка заказов.
Ограничение мягкое: алгоритм может его нарушить. Штрафы задаются в полях:
-
shifts.penalty.max_mileage.fixed— штраф за факт превышения максимального пробега (по умолчанию 1000); -
shifts.penalty.max_mileage.km— штраф за каждый километр превышения максимального пробега (по умолчанию 100).
Если для вас важен максимальный пробег за рейс, а машина может выполнить несколько рейсов за смену, нужно сделать несколько одинаковых смен (см. Пример 2).
Если курьер передвигается общественным транспортом, в пробеге возвращается только пешая часть маршрута.
Пример 1
Ограничение пробега каждого курьера — 50 км. За нарушение задан большой штраф. В результате плановый пробег на любом маршруте не превышает 50 км.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
Есть один курьер, и каждый его рейс должен быть ограничен 50 км. Для этого у курьера задано несколько смен с одинаковыми временными окнами и ограничениями по пробегу. В результате сформировано 3 рейса, каждый протяженностью менее 50 км.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Ограничения пробега и количества остановок в рейсе
Иногда нужно задать ограничения по пробегу и количеству остановок только для определенного рейса в маршруте.
Чтобы задать лимит по пробегу, на листе Vehicles в поле shifts.N.run_restrictions.max_mileage_km.value укажите максимальный пробег в километрах за рейс. При необходимости добавьте штрафы за превышение лимита в поля:
-
shifts.N.run_restrictions.max_mileage_km.penalty.fixed— штраф за факт превышения максимального пробега (по умолчанию 1 000); -
shifts.N.run_restrictions.max_mileage_km.penalty.km— штраф за каждый километр превышения максимального пробега (по умолчанию 100).
Для ограничения количества остановок в рейсе на листе Vehicles укажите значения параметров:
-
shifts.N.run_restrictions.maximal_stops.value— максимальное количество остановок; -
shifts.N.run_restrictions.minimal_stops.value— минимальное количество остановок.
За нарушение количества остановок предусмотрены штрафы. Если требуется, укажите их значения в полях:
-
shifts.N.run_restrictions.maximal_stops.penalty.fixed— штраф за факт нарушения максимального количества остановок (по умолчанию 1 000); -
shifts.N.run_restrictions.maximal_stops.penalty.per_stop— штраф за каждую лишнюю остановку (по умолчанию 100); -
shifts.N.run_restrictions.minimal_stops.penalty.fixed— штраф за факт нарушения минимального количества остановок (по умолчанию 1 000); -
shifts.N.run_restrictions.minimal_stops.penalty.per_stop— штраф за каждую недостающую остановку (по умолчанию 100).
Пример 1
Курьер должен доставить 10 заказов. Ограничения по пробегу и количеству остановок в рейсе не заданы.
В результате все заказы доставляются одним рейсом.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
То же, что и в примере 1, но для рейсов первой смены заданы ограничения по максимальному количеству остановок:
shifts.0.run_restrictions.maximal_stops.value= 1shifts.0.run_restrictions.maximal_stops.penalty.fixed= 1 000 000shifts.0.run_restrictions.maximal_stops.penalty.per_stop= 1 000
Штрафы настолько велики, что нарушать ограничения по остановкам становится невыгодно. В результате курьер доставляет заказы двумя рейсами. Первым рейсом он отвозит заказ 8, вторым — все остальные заказы.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
То же, что и в примере 2, но для рейсов первой смены убраны штрафы за нарушение максимального количества остановок shifts.0.run_restrictions.maximal_stops.penalty.fixed и shifts.0.run_restrictions.maximal_stops.penalty.per_stop. Для рейса задано ограничение shifts.0.run_restrictions.maximal_stops.value = 1.
Также в поле cost.run добавлена стоимость выполнения одного рейса, равная 3 000.
В результате все заказы доставляются одним рейсом. При заданных условиях нарушить ограничение и получить штраф оказалось выгоднее, чем разделить заказы на несколько рейсов. Размер штрафа при этом составит 1 100, где 1 000 — значение по умолчанию для shifts.0.run_restrictions.maximal_stops.penalty.fixed и 100 — для shifts.0.run_restrictions.maximal_stops.penalty.per_stop.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Кучность маршрута
Если для автомобиля нужно задать желаемый район работы — так, чтобы в маршрут включались заказы, расположенные недалеко от определенной точки, — используйте параметр global_proximity_attraction_point. В значении параметра укажите id точки с типом garage. Эта точка используется как «точка притяжения» — алгоритм стремится уменьшить сумму расстояний от заказов в маршруте до этой точки.
На кучность построения маршрутов вокруг «точки притяжения» влияет опция options.global_proximity_factor — чем больше ее значение, тем маршруты кучнее. Подробнее об опции см. в разделе Кучные маршруты.
Максимальное расстояние от точек маршрута до «точки притяжения» хранится в параметре max_distance_to_attraction_point_m, который может использоваться для расчета стоимости маршрута. Итоговая сумма расстояний от всех заказов до «точки притяжения» в маршруте влияет на размер штрафа за недостаточную сгруппированность маршрутов.
Другие способы сгруппировать заказы географически
- С помощью опции
global_proximity_factorможно построить кучные маршруты без указания «точки притяжения». Опция работает только для автомобилей, у которых не задан параметрglobal_proximity_attraction_point. - С помощью геозон для автомобилей можно задать ограничения по зонам доставки. Ограничение по геозонам нельзя нарушить, по сравнению с ним настройки кучности маршрутов являются более гибким инструментом.
Пример 1
Три автомобиля должны доставить 15 заказов. Маршрут рассчитывается исходя из веса заказов и грузоподъемности автомобилей. Иных ограничений на маршруте не задано.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
То же, что и в примере 1, но для каждого курьера задана «точка притяжения», обозначающая желаемый район работы. В результате маршруты стали более кучными. Максимальное расстояние от заказа до «точки притяжения» в маршруте составило 20 663 м.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
То же, что и в примере 2, но для одного из курьеров изменена «точка притяжения». В результате за счет перегруппировки заказов расположение маршрутов на карте поменялось. Максимальное расстояние от заказа до «точки притяжения» увеличилось и составило 28 528 м.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Запланированный маршрут
Пользователь может указать, какой курьер должен выполнить конкретные заказы. Это пригодится:
-
при допланировании — когда есть заранее запланированные маршруты;
-
когда заказ связан с определенным курьером.
Для указания ранее спланированных заказов для данного курьера используется опция vehicle.planned_route. Опция обладает следующими свойствами:
-
Все заказы, указанные в
vehicle.planned_route, при планировании не могут стать нераспределенными, даже если будут нарушены жесткие ограничения — вместимость автомобиля или временные окна, у которыхhard_window=true. -
Последовательность заказов, определенная в
planned_route, по умолчанию не фиксируется. При повторном планировании заказы могут перестроиться в новой последовательности. -
Если необходимо сохранить указанный в
planned_routeмаршрут без изменений (без изменения последовательности и без добавления новых заказов), то используйтеvehicle.fixed_planned_route=true.
Для каждого заказа, определенного planned_route, обязательно указывать принадлежность к смене автомобиля (даже если у автомобиля 1 смена).
Если в planned_route задано несколько смен, то зафиксировать заказы за сменами можно при помощи опции fix_planned_shifts = true. По умолчанию опция принимает значение false.
Если курьер приехал на заказ слишком рано, время вручения заказа определяется параметром vehicle.wait_if_early:
true— курьер ждет начала временного окна заказа (значение по умолчанию);false— курьер обслуживает заказ сразу после прибытия.
Внимание
Если для заказа указано только жесткое временное окно location.hard_window = true, параметр vehicle.wait_if_early со значением false не повлияет на вручение заказа.
Если курьеру во время маршрута необходимо посетить склады для дозагрузки, укажите их в поле middle_depot_id. Они могут совпадать со складами, которые курьер посещает в начале или конце маршрута.
Если в planned_route курьер должен посетить склады для дозагрузки, укажите для них опцию is_middle_depot = true (по умолчанию false). Если указать опцию is_middle_depot = true для всех складов, то алгоритм спланирует начальные и конечные склады в соответствии с настройками курьера, см. разделы Старт с одного из нескольких складов и Возврат на склад в конце маршрута или рейса.
Пример 1
У каждого из двух курьеров в planned_route были определены заказы, в итоге они так и попали на каждого из курьеров.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
В данном примере участвует 1 машина, на которую привязаны заказы через planned_route. Суммарный вес заказов превышает вместимость машины, но такой маршрут все равно планируется (поскольку заказы, определенные в этой опции, не могут попасть в нераспределенные), при этом статус задачи будет UNFEASIBLE.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Теоретически 2 курьера могли бы доставить все 20 заказов без перегруза и опозданий. Но для курьера 1 при помощи параметра vehicle.fixed_planned_route = true указана фиксированная последовательность заказов, поэтому он доставит только заказы из этой последовательности. Курьер 2 не ограничен жестким планом, поэтому возьмет столько заказов, сколько сможет увезти. И несколько заказов останется на складе, несмотря на свободные места и время у курьера 1.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 4.1
2 курьерам за 2 смены необходимо доставить 15 заказов. При помощи опции planned_route заказы 1-8 зафиксированы за курьером 1, а заказы 9-15 за курьером 2. При этом указано, что заказы 1-4 и 9-12 необходимо доставить в первую смену, а заказы 5-8 и 13-15 во вторую смену. Так как fix_planned_shifts = false и курьеры успевают доставить все заказы в одну смену, то распределение заказов по сменам не учитывается.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 4.2
То же, что и в примере 4.1, но опция fix_planned_shifts = true. Поэтому при доставке заказов учитывается, в какую смену их необходимо доставить.
Пример Excel ⋅ Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Фиксированная часть маршрута
Функциональность visited_locations пригодится, если:
-
начало маршрута должно проходить в строгом порядке.
-
нужно изменить точку старта при допланировании.
Маршрут необходимо фиксировать для каждого курьера индивидуально.
Чтобы это сделать, укажите в vehicles массив visited_locations и опишите точки фиксированного маршрута с помощью следующих параметров.
|
Параметр |
Описание |
|
|
Идентификатор заказа из |
|
|
Идентификатор смены курьера из |
|
|
Время отправления из точки. Если для первой точки фиксированной части маршрута:
Параметр можно указать на нескольких заказах — тогда время посещения рассчитается согласно указанному времени |
|
|
Необходимость ждать начала временного окна в случае раннего приезда.
|
* Обязательный параметр
Пример 1
В примере 5 заказов. Последовательность заказов 1, 2, 3 зафиксирована в visited_locations. Заказы 4 и 5 могут быть выполнены в любом порядке.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 2
С помощью visited_locations указано начать маршрут с заказа 2 в 10:00.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 3
Последовательность заказов 1, 2, 3 задана, как в примере 1. Дополнительно указано отправление с заказа 1 в 08:20 и с заказа 3 — в 11:00.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте
Пример 4
В примере 8 заказов. Указана последовательность: заказы 1, 2, 3, затем склад, затем заказ 4. Оставшиеся заказы курьер выполняет в любом порядке.
Запрос API (JSON) ⋅ Ответ API ⋅ Открыть на карте