Перейти к основному содержимому

Интервалы

Интервал — это сущность планирования с границами начала, конца и размера. Значения границ назначает решатель в процессе оптимизации. Интервал может быть фиксированной длины или переменной, обязательным или опциональным (активным только при выполнении условия).

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

В большинстве классических задач VRP/VRPTW интервалы не нужны: время моделируется через ресурс «время» (см. Ресурсы). Интервалы выходят на первый план в более сложных сценариях планирования.

Получение менеджера

Интервалы = Модель.Интервалы();

Добавление интервала

Интервал переменной длительности

Модель.Интервалы().Добавить(
НачалоМин = Неопределено,
НачалоМакс = Неопределено,
РазмерМин = Неопределено,
РазмерМакс = Неопределено,
КонецМин = Неопределено,
КонецМакс = Неопределено,
Условие = Неопределено
)

Все границы опциональны. Если не заданы — соответствующая переменная не ограничена снизу/сверху. Условие — выражение-флаг: интервал «работает» только когда выражение истинно (для опциональных интервалов).

Интервал фиксированного размера

Модель.Интервалы().ДобавитьФиксированный(
Размер,
НачалоМин = Неопределено,
НачалоМакс = Неопределено,
КонецМин = Неопределено,
КонецМакс = Неопределено,
Условие = Неопределено
)

Размер фиксирован, а границы начала и конца могут плавать.

Доступ к переменным интервала

К началу, концу и размеру интервала можно обратиться как к переменным:

ИнтервалОбслуживания = Модель.Интервалы().ДобавитьФиксированный(
30, // 30 минут
540, // не раньше 9:00
660 // не позже 11:00
);

Начало = Модель.Интервалы().ПолучитьНачало(ИнтервалОбслуживания);
Конец = Модель.Интервалы().ПолучитьКонец(ИнтервалОбслуживания);
Размер = Модель.Интервалы().ПолучитьРазмер(ИнтервалОбслуживания);

Эти переменные можно использовать в выражениях и ограничениях.

Пример: обслуживание Клиент1 30 минут в окне 9:00–11:00

ИнтервалОбслуживания = Модель.Интервалы().ДобавитьФиксированный(
30, // длительность обслуживания
540, // начало не раньше 9:00
660 // начало не позже 11:00 (с учётом длительности — закончим к 11:30)
);

См. также