---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://yandex.ru/routing/doc/ru/oob/algorithm.md
  - href: ru/oob/algorithm.md
    type: text/markdown
    title: Markdown version
  - href: llms.txt
    type: text/markdown
    title: llms.txt
title: Яндекс Маршрутизация — Алгоритм планирования
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/routing/doc/ru/llms.txt


# Алгоритм планирования

Алгоритм планирования позволяет строить маршруты с соблюдением баланса между скоростью и оптимальным уровнем загрузки курьеров. С его помощью можно оптимизировать сразу несколько метрик эффективности доставки:  

* Уменьшить количество и суммарное время опозданий.

    Опозданием считается ситуация, при которой курьер приезжает к клиенту позже заданного временного окна. Заказы, по которым возможно или неизбежно опоздание, будут доставлены в первую очередь. 

* Снизить неэффективный пробег и повысить загрузку курьеров.

    Маршрут строится так, чтобы курьер мог доставить максимальное количество заказов за минимальный пробег. За счет этого повышается показатель средней загрузки курьера в час (Delivered-per-Courier-per-Hour) и растет операционная эффективность.
  
* Увеличить скорость доставки.

    При планировании алгоритм стремится снизить значение показателя Click-to-Eat (CTE) — времени от момента оформления заказа до вручения его клиенту. Чем ниже CTE, тем больше заказов в час получится доставить и тем эффективнее работа курьера в целом.

Но при планировании решения могут возникать противоречия. Например:

* чем выше плотность маршрутов, тем выше риск опоздания курьера;
* чем выше скорость доставки, тем меньше времени на формирование плотных маршрутов без неэффективного пробега.

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

Для достижения необходимого баланса метрик вы можете настраивать параметры экспресс-доставки в зависимости от потребностей бизнеса.

## Логика распределения заказов {#algorithm-logic}

Экспресс-доставка поддерживается для заказов, которые уже готовы к доставке.

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

#|
|| **Критерий** | **Описание** ||
|| Эффективность | Маршрут считается готовым к выполнению, если не ожидаются события, которые могут привести к его улучшению. ||
|| Снижение риска опозданий | Маршрут отправляется в работу оперативно при риске опоздания на заказ. ||
|| Приоритет заказа | Заказы с высоким приоритетом `order_priority` = `express`  планируются в первую очередь. ||
|| Приоритет опаздывающим | Заказы с высоким риском опоздания планируются раньше, чем заказы с низким риском.

Некоторые заказы остаются нераспределенными, так как могут:

* подождать — их временное окно `order_list.delivery_policy.time_interval` или дедлайн `order_list.delivery_policy.deadline` выходят за рамки текущего планирования;
* отмениться из-за низких [штрафов за недоставку](https://yandex.ru/routing/doc/ru/vrp/more-about-penalties.md). ||
|| Уменьшение времени ожидания | Алгоритм стремится спланировать маршрут так, чтобы до начала окна заказа оставалось как можно меньше времени. ||
|#

## Принципы управления курьерами {#algorithm-courier}

{% note warning %}

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

{% endnote %}

Чтобы алгоритм работал корректно, информация о составе и занятости курьеров должна оставаться актуальной при планировании каждого нового маршрута. 

Заказы могут назначаться только тем курьерам, которые:

* Доступны:

  * вернулись на склад;
  * завершили все предыдущие маршруты;
  * свободны для новой доставки.

* Должны появиться в ближайшем будущем (например, вернуться после перерыва или выйти в вечерние часы). 

  Убедитесь, что в запросе API у таких курьеров правильно указаны временные окна смен — `courier_list.shift.shift_info.planned_time_interval`.

* Возвращаются после доставки последнего заказа.

  Передать алгоритму планирования информацию по таким курьерам в API-запросе можно с помощью одного из сценариев:
  
  * [основной](https://yandex.ru/routing/doc/ru/oob/guidelines/base.md);
  * [упрощенный](https://yandex.ru/routing/doc/ru/oob/guidelines/simple.md).

Для каждого курьера, который участвует в планировании, должна быть задана одна смена с жестким или мягким [временным окном](https://yandex.ru/routing/doc/ru/vrp/properties-of-time-window.md#hard-and-soft-windows).

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

## История планирований {#algorithm-history}

Запросы на составление маршрутов с помощью алгоритма экспресс-доставки выполняются независимо друг от друга. Исходные данные и результаты планирования хранятся 1 год.

Обратиться к уже спланированному маршруту можно по его идентификатору — `task_id`.

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

<!-- source: ru/oob/_includes/feedback.md -->
<a href="feedback">
  <span class="button">Написать в службу поддержки</span>
</a>


<!-- endsource: ru/oob/_includes/feedback.md -->
