---
metadata:
  - name: generator
    content: Diplodoc Platform v5.64.0
alternate:
  - https://yandex.ru/routing/doc/en/calendar/use-cases.md
  - https://yandex.ru/routing/doc/ru/calendar/use-cases.md
  - href: https://yandex.ru/routing/doc/ru/calendar/use-cases.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.ru/routing/doc/ru/llms.txt?revision=r21872121
    rel: describedby
title: Яндекс Маршрутизация — Календарное планирование — примеры использования
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/routing/doc/ru/llms.txt?revision=r21872121


# Примеры использования

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

## Планирование по локациям и посещениям {#planning-by-locations-and-visits}

Планировать маршруты можно несколькими способами:

1. Если все посещения локации одинаковые, достаточно на листе **locations** указать список локаций и для каждой локации задать параметры:

	* [временные окна](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#time-windows);
	* [сервисное время](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#location-id);
    * [дни посещений](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#days);
	* [количество и частоту посещений](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#count);
	* [штраф за непосещение локации](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#count).

    В этом случае лист **visits** в файле планирования не нужен.

1. Если у локаций есть разные [типы посещений](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#visits), которые нужно выполнять в определенной последовательности, их нужно настроить на листе **visits**. Сервисное время, штраф за непосещение и дни посещения указываются для типов посещений на листе **visits**, а временные окна, количество и частота посещений – для локации в целом на листе **locations**. 

1. Можно сочетать 1 и 2 способы: указывать типы посещений только для некоторых локаций, а для остальных — только параметры локаций.

**Пример 1**

2 сотрудника посещают 20 локаций. Для них на листе **locations** заданы сервисное время `service_duration_s`, дни для посещения `allowed_days`, `preferred_days`, `mandatory_days` и `denied_days`, штрафы за пропуск посещения `penalty.visit_count.per_visit` и за пропуск всех посещений `penalty.drop`.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/planning-by-locations.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/1741440c-b642cb90-dbadfc67-7fa6245f) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/1741440c-b642cb90-dbadfc67-7fa6245f)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/1741440c-b642cb90-dbadfc67-7fa6245f) -->

**Пример 2**

То же, что в примере 1, но для всех локаций заданы типы посещений на листе **visits**. Для каждого типа посещения указаны сервисное время `service_duration_s`, дни для посещения `allowed_days`, `preferred_days` и `denied_days`, штраф за пропуск посещения `drop`.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/planning-by-visits.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/9f05e413-c7706770-2ac41c86-5591527d) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/9f05e413-c7706770-2ac41c86-5591527d)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/9f05e413-c7706770-2ac41c86-5591527d) -->

**Пример 3**

То же, что в примере 1, но для локаций 1 и 3 заданы типы посещений на листе **visits**. Для всех остальных локаций типы посещений не заданы, и их параметры указаны только на листе **locations**.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/planning-by-locations-and-visits.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/1d605b5e-e518a6cd-fb01bf68-7b3b27e1) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/1d605b5e-e518a6cd-fb01bf68-7b3b27e1)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/1d605b5e-e518a6cd-fb01bf68-7b3b27e1) -->

## Приоритеты локаций и посещений {#priority}

Вы можете задать приоритеты посещения локаций следующими способами:

- [указать приоритеты](#priority-set) для некоторых или всех локаций;
- [назначить штрафы](#priority-drops) за непосещение локаций в зависимости от их приоритета;
- указать для локаций [опциональные теги](#priority-tags) с разным весом.

Для каждого из этих способов можно дополнительно использовать параметр `late_days_cost_increment`, который позволит запланировать посещения приоритетных локаций в [наиболее ранние дни](#early-days).

### Назначение приоритетов {#priority-set}

Вы можете указать приоритеты для посещения всех или некоторых локаций напрямую с помощью параметра `priority` на листе `locations`. Подробнее см. в разделе [Приоритеты](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#priority). 

**Пример**

В планировании участвуют 2 сотрудника, которым нужно посетить 33 локации с разными приоритетами: 0, 1 или без приоритета. 

В результате планирования сотрудники посещают все локации, для которых установлен приоритет 0 или без указания приоритета. Локации с приоритетом 1 остаются нераспределенными. 

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/add-priority.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/8d249be8-1febfc6e-7ec6f569-3c3b8874) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/8d249be8-1febfc6e-7ec6f569-3c3b8874)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/8d249be8-1febfc6e-7ec6f569-3c3b8874) -->

### Приоритеты с помощью штрафов {#priority-drops}

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

Можно использовать следующие параметры: 

- для локаций — на листе **locations**:

    - `penalty.drop` — фиксированный штраф, если не было запланировано ни одного посещения локации;
    - `penalty.visit_count.fixed` — фиксированный штраф, если пропущено хотя бы одно посещение локации;
    - `penalty.visit_count.per_visit` — штраф за каждое пропущенное посещение локации.

- для отдельных типов посещений — на листе **visits** укажите значение параметра `drop` (`locations.visits.N.drop` в запросе API). Оно заменит значение `penalty.visit_count.per_visit` для посещений этого типа.

Подробнее о параметрах, которые используются при планировании посещений, см. в разделах [Количество и частота посещений локации](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#count) и [Типы посещений](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#visits).

**Пример 1**

В планировании участвуют 2 сотрудника, которым нужно посетить 32 локации с одинаковым приоритетом. При этом у каждой локации указано жесткое временное окно, поэтому опоздание или ранее посещение локаций не предусмотрено. Штраф за непосещение локаций `penalty.drop` = 0.

В результате планирования сотрудники ни разу не посещают локацию 3, а также пропускают несколько посещений локаций 1 и 7.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/without-penalty-drop.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/691eb29d-3dae5377-7f5780c3-c803b92a) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/691eb29d-3dae5377-7f5780c3-c803b92a)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/691eb29d-3dae5377-7f5780c3-c803b92a) -->


**Пример 2**

То же, что в примере 1, но у локации 3 высокий приоритет, поэтому для нее задан штраф `penalty.drop` = 1 000 000.

В результате планирования сотрудники посещают локацию 3, а посещения локаций 25 и 29 остаются нераспределенными.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/with-penalty-drop.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/1a943cda-479ee26d-2ac15dee-b711a28) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/1a943cda-479ee26d-2ac15dee-b711a28)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/1a943cda-479ee26d-2ac15dee-b711a28) -->

**Пример 3**

То же, что в примере 1, но на листе **visits** заданы штрафы `drop` за пропуски различных типов посещений локации 1 в порядке убывания их приоритета:

- 1 000 000 — инвентаризация;
- 500 000 — установка рекламы;
- 100 000 — раскладка товаров.

В результате запланированы все локации и посещения, кроме двух посещений для раскладки товаров в локации 1.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/with-penalty-drop-visit.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/b96f8b67-5974fa07-2a586499-7d7222b3) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/b96f8b67-5974fa07-2a586499-7d7222b3)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/b96f8b67-5974fa07-2a586499-7d7222b3) -->

### Приоритеты с помощью тегов {#priority-tags}

Вы можете задать приоритет посещения локации с помощью [опциональных тегов](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#tags). Для этого на листе **locations** в поле **optional_tags.0.tag** задайте название тега, а в поле **optional_tags.0.value** — его вес (больше нуля). Чем больше вес тега, тем с большей вероятностью посещение этих локаций будет запланировано.

**Пример**

Двум сотрудникам нужно посетить 49 локаций. 8 локаций помечены опциональным тегом `VIP` с весом 3000. 

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

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/use-cases-priority.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/e135caca-77574cae-5beb1663-ab0191d1) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/e135caca-77574cae-5beb1663-ab0191d1)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/e135caca-77574cae-5beb1663-ab0191d1) -->

### Посещение в наиболее ранние дни {#early-days}

Чтобы посетить приоритетные локации в более ранние дни, вы можете задать параметр `late_days_cost_increment` на листе **options**. Описание работы параметра см. в разделе [Посещения в наиболее ранние дни](https://yandex.ru/routing/doc/ru/calendar/properties-options.md#early-days).

**Пример 1**

Сотруднику необходимо посетить 40 локаций, параметр `late_days_cost_increment` не используется. В результате запланированы посещения локаций на 5 дней.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/without-increment.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/ecc31c7c-a9d460c4-6d2ce23f-c24da06c) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/ecc31c7c-a9d460c4-6d2ce23f-c24da06c)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/ecc31c7c-a9d460c4-6d2ce23f-c24da06c) -->

**Пример 2**

То же, что в примере 1, но на листе **options** установлен параметр `late_days_cost_increment` = 1000. В результате запланированы посещения локаций на 4 дня.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/with-last-days-cost-increment.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/9baa827-3bee8bb-ae6e515b-32a5c240) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/9baa827-3bee8bb-ae6e515b-32a5c240)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/9baa827-3bee8bb-ae6e515b-32a5c240) -->

## Посещение удаленно расположенных локаций {#remote-location}

Одна или несколько локаций могут располагаться далеко от остальных. В этом случае стоимость посещения локации может оказаться выше, чем штраф за непосещение или пропуск одного из посещений. Локация окажется нераспределенной. Чтобы избежать этого, для удаленных локаций на листе **locations** можно назначать более высокие штрафы:
* `penalty.visit_count.per_visit` — за пропуск одного посещения локации;
* `penalty.drop` — за пропуск всех посещений.

Стоимость посещения локации может складываться из стоимости за час работы сотрудника, за километр маршрута, за факт выхода сотрудника на работу (если на удаленную вакансию придется отправить дополнительного сотрудника) и других параметров, подробнее см. в разделе [Стоимость работы и выплаты сотрудникам](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#cost).

**Пример 1**

Два сотрудника посещают 18 локаций. Одна из локаций (Location 2) — удаленная. Штраф за непосещение локации `drop` для всех локаций равен 1000, штраф за пропуск посещения `penalty.visit_count.per_visit` — 17. Стоимость выхода сотрудника на работу `cost.fixed` по умолчанию равна 3000 — это больше, чем суммарный штраф за непосещение локации. В результате удаленная локация оказалась нераспределенной.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/remote-locations.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/40893e9d-5db54741-f09334be-837a7612) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/40893e9d-5db54741-f09334be-837a7612)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/40893e9d-5db54741-f09334be-837a7612) -->

**Пример 2**

То же, что в примере 1, но для удаленной локации штраф за пропуск посещения `penalty.visit_count.per_visit` увеличен до 3500 — больше стоимости выхода сотрудника на работу. В результате второй сотрудник выходит на работу в отдельные дни специально для посещения удаленной локации.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/remote-locations-add.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/d70c0251-4e9e500b-affeafe5-615b9066) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/d70c0251-4e9e500b-affeafe5-615b9066)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/d70c0251-4e9e500b-affeafe5-615b9066) -->

## Посещение близко расположенных локаций {#multiorder-radius}

Некоторые локации расположены недалеко друг от друга, но при планировании распределяются на разных сотрудников. Чтобы этого избежать, добавьте на лист **options** параметр `multiorder_radius_m` (`options.multiorder_radius_m` в API) и укажите радиус объединения (по умолчанию — 1 м).

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

**Пример 1**

Два сотрудника посещают 35 локаций. Радиус объединения `multiorder_radius_m` не задан.  

В результате все локации равномерно распределяются между сотрудниками.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/multiorder-radius-1.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/34a449a4-e97084e9-4fa03fac-edcfe286) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/34a449a4-e97084e9-4fa03fac-edcfe286)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/34a449a4-e97084e9-4fa03fac-edcfe286) -->

**Пример 2**

Те же условия, что в примере 1, но на листе **options** ошибочно указан радиус объединения `multiorder_radius_m` = 4 000 м.

В результате отдаленные друг от друга локации (например, 8, 17, 22 и 34) распределяются только на сотрудника 2, хотя эффективнее было бы разделить посещения между обоими сотрудниками. Сотруднику 1 удобнее посетить локации 8, 17 и 22, а сотруднику 2 — локацию 34. 

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/multiorder-radius-2.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/8b2d8d91-d9ec718d-2cdcf2fa-70ddc8ac) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/8b2d8d91-d9ec718d-2cdcf2fa-70ddc8ac)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/8b2d8d91-d9ec718d-2cdcf2fa-70ddc8ac) -->

## Планирование с учетом навыков сотрудников {#skills}

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

На листе **locations** в поле `required_tags` перечислите через запятую теги, определяющие обязательные требования для посещения локации. Желательные требования указываются в полях `optional_tags.N.tag` и `optional_tags.N.value`, подробнее см. в разделе [Теги локаций](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#tags).

Если сотрудник соответствует требованиям, заданным для локаций, то на листе **employees** в поле **tags** перечислите соответствующие теги. Если сотрудник не должен посещать локации с определенными тегами, укажите их в поле **excluded_tags**. Подробнее см. в разделе [Теги сотрудника](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#tags).

**Пример**

Для посещения некоторых локаций требуется спецодежда или наличие сумки-холодильника у сотрудника. У таких локаций в поле `required_tags` указаны теги `uniform` и `fridge`. Локации 7 и 12 желательно посещать сотрудникам с фармакологическим образованием, поэтому у них указан опциональный тег `pharmacy`. Сотрудник 1 не имеет соответствующего образования, поэтому для него тег `pharmacy` указан в поле **excluded_tags**. 

В результате планирования локации со специальными требованиями распределены по сотрудникам с соответствующими тегами. Сотрудник 1 посещает локации, у которых нет опционального тега `pharmacy`. 

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/use-cases-tags.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/dea71091-aaa9082f-e5ab0851-84de3f5c) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/dea71091-aaa9082f-e5ab0851-84de3f5c)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/dea71091-aaa9082f-e5ab0851-84de3f5c) -->

## Кучные маршруты {#proximity}

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

- с помощью параметров кучности `global_proximity_factor` и `daily_proximity_factor`;
- с помощью ограничений на отрезки маршрута и использования коэффициентов для начальных и конечных отрезков.

### Параметры кучности {#proximity-parameter}

Чтобы сотрудники посещали близко расположенные локации последовательно, используйте следующие параметры:

- `global_proximity_factor` — параметр кучности для всего периода планирования;
- `daily_proximity_factor` — параметр кучности в течение дня.

Эти параметры можно задать глобально для всех сотрудников на листе **options** или для некоторых сотрудников по отдельности — на листе **employees**. 

<!-- source: ru/calendar/_includes/proximity-params.md -->
Параметры кучности могут принимать значение от 0 до 10, где 0 — отсутствие кучности, а 10 — максимальная кучность. Мы рекомендуем значения от 0 до 1 (по умолчанию 0).
<!-- endsource: ru/calendar/_includes/proximity-params.md -->

Подробнее см. в разделе [Кучность маршрутов](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#proximity).

**Пример**

Локации расположены преимущественно в центре, на севере и на юге города. Чтобы маршруты получились более кучными, заданы параметры `global_proximity_factor` = 0.2 и `daily_proximity_factor` = 0.5.  

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

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/use-cases-proximity.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/74aa6c65-acc863e4-1c3882ee-6a6c8035) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/74aa6c65-acc863e4-1c3882ee-6a6c8035)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/74aa6c65-acc863e4-1c3882ee-6a6c8035) -->

### Ограничения на отрезки маршрута {#proximity-edges}

Вы можете задать ограничения на расстояние между соседними локациями или время перемещения между ними на листе **employees** с помощью параметров `max_edge_distance_m` и  `max_edge_duration_s` соответственно. Чтобы алгоритм учитывал начальный и конечный отрезки маршрута по особой стоимости при заданных ограничениях, укажите положительные коэффициенты в полях `first_edges_penalty_factor` и `last_edges_penalty_factor` для пробега на первом и последнем отрезках маршрута соответственно.

Подробнее см. в разделах [Ограничения на отрезки маршрута](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#segment-max) и [Начальные и конечные отрезки маршрута](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#edges-factor). 

**Пример**

Локации расположены преимущественно в центре, на севере и на юге города. Задано ограничение на максимальное расстояние между соседними локациями — 15 000 м. Также указаны повышающие коэффициенты `first_edges_penalty_factor` и `last_edges_penalty_factor` — 4. 

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

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/use-cases-edges.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/f1a3d796-86ade27b-e9c94986-d9fbebf0) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/f1a3d796-86ade27b-e9c94986-d9fbebf0)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/f1a3d796-86ade27b-e9c94986-d9fbebf0) -->

## Закрепление локации за сотрудником {#pin-location-employee}

Чтобы локацию всегда посещал определенный сотрудник, можно закрепить локацию за сотрудником одним из способов:
* с помощью [тегов локаций](https://yandex.ru/routing/doc/ru/calendar/properties-locations.md#tags) и [тегов сотрудников](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#tags);
* с помощью разрешенных и запрещенных [геозон](https://yandex.ru/routing/doc/ru/calendar/properties-employees.md#zones).

### Закрепление локации с помощью тегов {#pin-location-tags}

Для сотрудника нужно задать уникальный тег на листе **employees** в поле `tags`. Для всех локаций, которые должны быть закреплены за данным сотрудником, этот тег нужно указать на листе **locations** в поле `required_tags`.

**Пример**

Посещения 50 локаций могут быть распланированы на 5 сотрудников. У локаций 40 и 50 в поле `required_tags` указан уникальный тег сотрудника `employee3`, этот же тег указан у сотрудника 3 в поле `tags`. В результате посещения локаций 40 и 50 запланированы этому сотруднику.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/pin-location-tags.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/253ed3b4-9785b677-4db3caa8-7b4573b5) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/253ed3b4-9785b677-4db3caa8-7b4573b5)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/253ed3b4-9785b677-4db3caa8-7b4573b5) -->

### Закрепление локации с помощью геозон {#pin-location-zones}

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

Чтобы посещать локации в геозоне мог только определенный сотрудник, на листе **employees** укажите название геозоны:
* для выбранного сотруднка – в поле `allowed_zones`;
* для остальных сотрудников – в поле `forbidden_zones`.

Добавлять новые геозоны можно через [интерфейс](https://yandex.ru/routing/doc/ru/calendar/interface-geozones.md#geozones-adding) и [API](https://yandex.ru/routing/doc/ru/calendar/interface-geozones.md#geozones-zones).

**Пример**

Посещения 50 локаций могут быть распланированы на 5 сотрудников. Геозона North включает локации, расположенные на севере Москвы. Эта геозона указана для сотрудника 2 в поле `allowed_zones`, а для остальных сотрудников — в поле `forbidden_zones`. В результате посещения всех локаций, расположенных внутри геозоны North, запланированы сотруднику 2.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/pin-location-zones.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/bf235bff-b5fa5ebc-e5541361-4c31ff08) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/bf235bff-b5fa5ebc-e5541361-4c31ff08)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/bf235bff-b5fa5ebc-e5541361-4c31ff08) -->

## Балансировка нагрузки {#balancing}

При планировании распределение локаций между сотрудниками не всегда происходит равномерно. Чтобы распределить нагрузку поровну между сотрудниками, используйте параметры балансировки:
1. Добавьте на лист **locations** поле `shipment_size.units` – оценка трудозатрат на одно посещение локации. Трудозатраты оцениваются в условных единицах – юнитах.

    {% note info %}

    Если время обслуживания `service_duration_s` для разных локаций различается, то оценка трудозатрат `shipment_size.units` должна быть пропорциональна `service_duration_s`. Например, если для локации `service_duration_s` = 1800 и `shipment_size.units` = 10, то для `service_duration_s` = 3600 значение `shipment_size.units` должно составлять 20.

    {% endnote %}

1. Для каждой локации умножьте `shipment_size.units` на `visit_count`. Вы получите оценку трудозатрат на все посещения локации в периоде планирования.
1. Просуммируйте значения для всех локаций. Сумму поделите на количество дней в периоде планирования (лист **options**, поле `planning_days`). Получится оценка трудозатрат на все посещения локаций в день.
1. Общую дневную оценку трудозатрат разделите на количество сотрудников. Это будет средняя нагрузка на сотрудника в день.
1. Полученную среднюю нагрузку округлите в бо́льшую сторону с запасом, прибавив еще 5-10 юнитов. Например, если вы получили значение 19,35, округлите его до 20 и добавьте запас в 10 юнитов. Итого – 30 юнитов. Добавьте на лист **employees** поле `capacity.units` и для всех сотрудников укажите рассчитанное значение.
1. На листе **employees** для каждого сотрудника укажите стоимость дня простоя – `cost.empty_run`, чтобы алгоритм при планировании задействовал всех сотрудников. Например, `cost.empty_run` = 100 000.

При планировании нагрузка равномерно распределится между всеми сотрудниками.

**Пример 1**

Посещения 20 локаций должны быть распланированы на 3 сотрудников. Параметры балансировки не задаются. В результате посещения всех локаций распределяются на сотрудника 2. Сотрудники 1 и 3 остаются незадействованными.   

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/without-balancing.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/a5446900-fdff0a75-71fdeb77-d8e2eacc) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/a5446900-fdff0a75-71fdeb77-d8e2eacc)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/a5446900-fdff0a75-71fdeb77-d8e2eacc) -->

**Пример 2**

Тот же, что в примере 1, но задаются параметры балансировки. 

Трудозатраты для одного посещения локации оценены в 10 юнитов, это значение указано на листе **locations** в поле `shipment_size.units`. Для каждой локации планируется по 2 посещения, `visit_count` = 2.

Общая оценка трудозатрат для всех 20 локаций составляет (10 * 2) * 20 = 400. Эта оценка делится на количество дней в периоде планирования: 400 : 7 = 57,14.

Дневная нагрузка распределяется на 3 сотрудников: 57,14 : 3 = 19,05. Значение округлено и увеличено на 10 – до 30 юнитов. Эта оценка указана для каждого сотрудника на листе **employees** в поле `capacity.units`. Также для каждого сотрудника задана стоимость дня простоя `cost.empty_run` = 10 000.

В результате посещения всех локаций распределены равномерно между тремя сотрудниками.

[Пример Excel](https://doc-static.yandex.net/src/dev/routing/calendar-examples/with-balancing.xlsx) ⋅ [Запрос API (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/aba32b90-62398e98-22a5a278-abf1276) ⋅ [Ответ API](https://courier.yandex.ru/vrs/api/v1/result/aba32b90-62398e98-22a5a278-abf1276)<!-- ⋅ [Открыть на карте](https://yandex.ru/courier/mvrp-map/#calendar/aba32b90-62398e98-22a5a278-abf1276) -->

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


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