Интервалы
Интервал — это сущность планирования с границами начала, конца и размера. Значения границ назначает решатель в процессе оптимизации. Интервал может быть фиксированной длины или переменной, обязательным или опциональным (активным только при выполнении условия).
Интервалы используются для задач планирования внутри маршрута, в которых нужна явная переменная для длительности или времени начала события — например, плановое окно обслуживания клиента, время простоя между этапами маршрута, период активности.
В большинстве классических задач 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)
);
См. также
- Выражения — для построения условия активности интервала.
- Переменные — концепция переменных модели, частным случаем которых являются переменные интервала.
- Программный интерфейс — Интервалы.