Глобальные опции
Глобальные опции задают общие параметры Календарного планирования, которые действуют на все локации и всех сотрудников. Однако параметры для конкретной локации или конкретного сотрудника, как правило, имеют более высокий приоритет.
При планировании с помощью Excel глобальные параметры задаются на листе options
, при планировании в API — в объекте options
.
Период планирования
Начальная дата периода планирования указывается в параметре date
в формате YYYY-MM-DD
, длительность периода планирования — в параметре planning_days
в днях.
Относительные временные окна рассчитываются в часовом поясе, который задается при помощи параметра options.time_zone
. Поле time_zone
является обязательным.
При планировании через API есть два варианта указания часового пояса:
-
как число от -12 до 14, которое определяет сдвиг по отношению к UTC в часах. Например, 3 соответствует GMT+3 (Москва).
-
как строка. Например,
Europe/Moscow
.
При планировании с помощью Excel часовой пояс задается только как число.
При определении часового пояса используйте список часовых поясов.
Внимание
GMT и Etc/GMT — это два разных варианта определения часового пояса. Например, GMT+3 соответствует Etc/GMT-3.
Рабочие и нерабочие дни
Количество рабочих дней в неделе задается в параметре working_days_in_week
(не больше 7). Рабочие дни всегда начинаются с понедельника и распределяются по неделе непрерывно, оставшиеся дни недели считаются нерабочими.
По умолчанию working_days_in_week
= 5, это соответствует обычной пятидневной рабочей неделе.
Другие примеры значений:
working_days_in_week
= 7 — все дни будут рабочими. Также указывайте значение 7, когда суббота выходной, а воскресенье — рабочий день;working_days_in_week
= 6 — соответствует шестидневной рабочей неделе, когда суббота рабочая;working_days_in_week
= 2 — рабочими днями будут только понедельник и вторник.
Рабочие и нерабочие дни, общие для всех сотрудников, указываются в параметрах working_days
и non_working_days
. Если задан non_working_days
, то эти дни вычитаются из рабочих дней.
Примечание
Параметр working_days
имеет приоритет выше, чем working_days_in_week
— если задан working_days
, то working_days_in_week
игнорируется.
Если все три параметра working_days_in_week
, working_days
и non_working_days
не указаны, то рабочими считаются все будние дни.
Для конкретных сотрудников можно задать отдельный режим работы. Подробнее см. в разделе Рабочие и нерабочие дни сотрудника.
Сотрудники, посещающие локацию
По умолчанию локацию должен посещать один и тот же сотрудник. Если это условие не важно для планирования, включите опцию allow_multiple_visitors
= true
, тогда в разные дни локацию смогут посещать разные сотрудники.
Адреса с несколькими локациями
Несколько локаций могут находиться по одному адресу (например, несколько магазинов в одном торговом центре). Чтобы запланировать посещение таких локаций за один приезд, в файле Excel на листе options
можно указать штрафы:
penalty.multiorders.per_extra_point
— штраф за каждый адрес, на который сотрудники приезжают больше одного раза.penalty.multiorders.per_extra_employee
— штраф за каждого лишнего сотрудника, который посещает адрес с несколькими локациями (если посещения запланированы на нескольких сотрудников).penalty.multiorders.per_extra_visit
— штраф за каждое лишнее посещение адреса с несколькими локациями.
Значения штрафов по умолчанию равны 0.
Объединение локаций выполняется, только если при этом не нарушаются другие ограничения — например, совместимость локаций по тегам.
Перемещения между начальными или конечными точками маршрутов соседних дней
При планировании может получаться так, что в разные дни сотрудник обслуживает локации, расположенные далеко друг от друга. В начале каждого дня сотруднику может потребоваться переместиться за сотни километров от своей начальной позиции в предыдущий день. Чтобы избежать таких ситуаций, можно прибавлять к стоимости маршрута протяженность или длительность перемещений между начальными точками маршрутов в соседние дни.
Параметры duration_between_days_starts_factor
и distance_between_days_starts_factor
задают коэффициенты, на которые умножается стоимость перемещений к начальной точке дневного маршрута. По умолчанию параметры имеют значение 0. Если они заданы как 1, эти перемещения будут считаться так же, как если бы они были частью маршрута (с той же стоимостью за час и км).
Параметры duration_between_days_ends_factor
и distance_between_days_ends_factor
задают аналогичные ограничения для перемещений между конечными точками маршрутов в соседние дни.
Посещения в наиболее ранние дни
Параметр late_days_cost_increment
позволяет планировать посещения выбранных локаций в более ранние дни. Его можно использовать самостоятельно или вместе с указанием приоритетов локаций.
При использовании late_days_cost_increment
к стоимости каждого дня прибавляется значение параметра, умноженное на номер дня, начиная с 0. Так, к первому дню ничего не прибавляется, ко второму прибавляется late_days_cost_increment
, к третьему 2 * late_days_cost_increment
и т.д. Влияние этого параметра постепенно убывает благодаря внутреннему коэффициенту, который снижается от 1 до 0 в процессе оптимизации. Поэтому финальная стоимость решения не изменяется.
Пример использования параметра см. в разделе Посещение в наиболее ранние дни.
Пост-оптимизация
При использовании параметра post_optimization
= true
оптимизация запускается на 90% времени, а остальные 10% занимает повторный запуск алгоритма, в котором осуществляется пост-оптимизация.
Пост-оптимизация может улучшить решение, если в задаче используются параметры кучности daily_proximity_factor
или global_proximity_factor
. В этом случае маршрут будет перестраиваться и группироваться вокруг локации, которая была последней в этом маршруте до пост-оптимизации.
Максимальное время решения задачи планирования
При планировании алгоритм стремится распределить локации между сотрудниками наилучшим образом и подобрать оптимальные маршруты посещения локаций. Поиск наилучших маршрутов может увеличивать время решения задачи планирования. Чтобы ограничить это время, укажите параметр solver_time_limit_s
— максимальное время решения задачи планирования. В этом случае алгоритм выдаст оптимальные маршруты, которые удалось запланировать за отведенное время.
Мы рекомендуем сначала запускать задачу на небольшой период планирования, чтобы убедиться в правильности выставленных параметров для локаций и сотрудников, подобрать оптимальные значения штрафов и другие ограничения. Затем, когда параметры подобраны, можно запускать задачу на весь необходимый период планирования.
Ниже приведены рекомендации по ограничению максимального времени решения задачи планирования, где столбец Normal соответствует значениям параметра solver_time_limit_s
для решения приемлемого качества, а High — для решения высокого качества.
Общее количество посещений, шт |
Общее количество локаций, шт |
Количество посещений на локацию |
Способ передвижения курьеров |
Normal, сек | High, сек |
---|---|---|---|---|---|
501 | 496 | 1 | driving | 100 | 1000 |
860 | 308 | 2.8 | driving | 500 | 15000 |
1100 | 900 | 1.2 | driving | 200 | 5000 |
2500 | 1600 | 1.56 | walking | 3600 | 15000 |
2500 | 1600 | 1.56 | driving | 3600 | 15000 |
2700 | 671 | 4 | driving + walking | 3600 | 15000 |
11000 | 2200 | 5 | walking | 5000 | 15000 |