Минимизация риска опозданий

При решении задачи маршрутизации одним из приоритетов является получение маршрутов, обеспечивающих качественный сервис для конечного клиента — гарантированное прибытие курьера в заявленный временной интервал. Это особенно актуально для клиентов с большим количеством заказов и узкими временными окнами — как правило, с такой задачей сталкиваются интернет-магазины, службы доставки или поставщики розничных сетей.

Яндекс Маршрутизация позволяет строить маршруты с жестким попаданием во временное окно заказа (см. раздел Временное окно заказа). Тем не менее, нередко возникает потребность получать более пессимистичные маршруты, при фактическом выполнении которых у курьера есть дополнительный запас времени на случай внеплановых задержек на предыдущем заказе, неожиданных пробок и прочих непредвиденных ситуаций.

Для получения таких маршрутов используйте опцию options.minimize_lateness_risk = true.

Как это работает

При построении маршрутов Яндекс Маршрутизация использует прогноз по времени движения между точками дорожного графа (подробнее в статье Сколько бизнес теряет на пробках и что с этим делать). При этом учитывается не только прогноз, но и вероятное отклонение от прогнозного значения. Параметр minimize_lateness_risk отвечает за учет вероятного отклонения в получаемом решении.

Например, у заказа окно с 8:00 до 9:00, курьер отправляется с предыдущей точки в 7:30 и математическое ожидание длительности его поездки составляет 81 минуту (условно, с вероятностью 0,4 он приедет за 75 минут, с вероятностью 0,4 — за 80 минут, с вероятностью 0,1 — за 90 минут и с вероятностью 0,1 — за 100 минут), то есть система спланирует его прибытие в 8:51.

Однако у данной поездки есть вероятность 0,1, что курьер опоздает на 10 минут, то есть прибудет в 9:10.

Если вероятное отклонение оказывается за границей временного окна, то  оно учитывается в конечном решении в качестве вероятного штрафа за опоздание на этот заказ. Для расчета штрафа используются параметры penalty.late.fixed и penalty.late.minute, а если они не заданы — то penalty.out_of_time.fixed и penalty.out_of_time.minute.

Дополнительная информация доступна в разделе Штрафы за нарушение временных окон заказов.

Если параметр minimize_lateness_risk указан, то эти параметры учитываются даже когда временное окно заказа жесткое и опция location.hard_window = true.

Примечание

Использование опции minimize_lateness_risk, как правило, ухудшает остальные метрики решения. У улучшения клиентского сервиса всегда есть обратная сторона — необходимо использовать больше ресурсов или маршруты становятся менее оптимальными по пробегу или общему времени, поэтому эту опцию рекомендуется использовать только при соответствующих требованиях.

На примерах ниже продемонстрировано, как меняется решение при использовании данной опции.

Пример 1

Есть 3 заказа с достаточно узкими и жесткими окнами. Опция minimize_lateness_risk = false. Алгоритм планирует 1 маршрут с прибытием в точку 3 в 10:59, при окне до 11:00.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

Пример №1, но с опцией minimize_lateness_risk = true.

Алгоритм планирует так же 1 маршрут, но последовательность объезда точек 2 и 3 становится другой. Маршрут стал менее оптимальным по пробегу и времени движения относительно примера 1, но теперь у курьера появился дополнительный запас времени до окончания временного окна заказа — маршрут стал менее рискованным с точки зрения возможного опоздания к клиенту.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 3

Пример №2, но сильно снижаем значения locations.penalty.out_of_time.fixed и locations.penalty.out_of_time.minute относительно значений по умолчанию.

Алгоритм планирует такой же маршрут, как и в примере 1. В этом случае у алгоритма был выбор: менее оптимальный маршрут, но при этом менее рискованный с точки зрения вероятного опоздания, или более оптимальный, но и более рискованный. Поскольку стоимость штрафа за опоздание очень мала, система выбрала вариант с более оптимальным маршрутом.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 4

Пример №2, но сильно завышаем значения locations.penalty.out_of_time.fixed и locations.penalty.out_of_time.minute относительно значений по умолчанию.

Алгоритм планирует 2 маршрута, разбивая заказы на 2 машины — сумма штрафа за вероятные опоздания превысила стоимость использования еще одной машины.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Написать в службу поддержки