Интервалы
Группа методов менеджера О2_Routing_МенеджерИнтервалов, обеспечивающих создание и адресацию интервальных переменных модели. Менеджер доступен через О2.Модели().МодельМаршрутизации().СоздатьМодель().Интервалы().
Что такое интервал
Интервал — это тройка связанных переменных (Начало, Размер, Конец), где Начало + Размер = Конец. Интервалы используются для моделирования временных окон, загрузки ресурсов и расписания операций. Они являются основой для ограничений планирования ЗапретПерекрытий и КонкурентноеИспользование.
Два подтипа интервала
| Подтип | Создаётся методом | Размер |
|---|---|---|
Интервал | Добавить | Переменная РазмерИнтервала — решатель подбирает значение |
ФиксированныйИнтервал | ДобавитьФиксированный | Константа, заданная при создании |
Подтип влияет на возвращаемые значения вспомогательных методов:
| Метод | Интервал | ФиксированныйИнтервал |
|---|---|---|
ПолучитьНачало | Переменная НачалоИнтервала | Переменная НачалоИнтервала |
ПолучитьКонец | Переменная КонецИнтервала | Линейное выражение Начало + Размер |
ПолучитьРазмер | Переменная РазмерИнтервала | Число (константа из конструктора) |
Опциональные интервалы
Если при создании передан параметр Условие — интервал становится опциональным: он участвует в ограничениях только тогда, когда булева переменная условия принимает значение Истина. Это позволяет моделировать задачи, где выполнение операции необязательно.
Методы
| Метод | Описание |
|---|---|
| Добавить | Создать интервал с переменной длительностью |
| ДобавитьФиксированный | Создать интервал с фиксированной длительностью |
| Получить | Получить интервал по 0-based индексу |
| Количество | Общее число интервалов в модели |
| ПолучитьНачало | Переменная начала интервала |
| ПолучитьКонец | Конец интервала (переменная или линейное выражение) |
| ПолучитьРазмер | Размер интервала (переменная или число) |
Пример
Модель = О2
.Модели()
.МодельМаршрутизации()
.СоздатьМодель();
Интервалы = Модель.Интервалы();
// Нефиксированный интервал: начало от 0 до 100, длительность — любая
ОперацияА = Интервалы.Добавить(0, 100);
// Фиксированный интервал длительностью 30 единиц
ОперацияБ = Интервалы.ДобавитьФиксированный(30, 0, 200);
// Обращение к переменным интервалов
НачалоА = Интервалы.ПолучитьНачало(ОперацияА); // Переменная НачалоИнтервала
РазмерА = Интервалы.ПолучитьРазмер(ОперацияА); // Переменная РазмерИнтервала
КонецА = Интервалы.ПолучитьКонец(ОперацияА); // Переменная КонецИнтервала
НачалоБ = Интервалы.ПолучитьНачало(ОперацияБ); // Переменная НачалоИнтервала
РазмерБ = Интервалы.ПолучитьРазмер(ОперацияБ); // Число: 30
КонецБ = Интервалы.ПолучитьКонец(ОперацияБ); // Линейное выражение: НачалоБ + 30
// Запрет перекрытий двух операций
Модель
.Ограничения()
.ЗапретПерекрытий(О2.Утилиты().Массив(ОперацияА, ОперацияБ));