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

Интервалы

Группа методов менеджера О2_Routing_МенеджерИнтервалов, обеспечивающих создание и адресацию интервальных переменных модели. Менеджер доступен через О2.Модели().МодельМаршрутизации().СоздатьМодель().Интервалы().

Что такое интервал

Интервал — это тройка связанных переменных (Начало, Размер, Конец), где Начало + Размер = Конец. Интервалы используются для моделирования временных окон, загрузки ресурсов и расписания операций. Они являются основой для ограничений планирования ЗапретПерекрытий и КонкурентноеИспользование.

Два подтипа интервала

ПодтипСоздаётся методомРазмер
ИнтервалДобавитьПеременная РазмерИнтервала — решатель подбирает значение
ФиксированныйИнтервалДобавитьФиксированныйКонстанта, заданная при создании

Подтип влияет на возвращаемые значения вспомогательных методов:

МетодИнтервалФиксированныйИнтервал
ПолучитьНачалоПеременная НачалоИнтервалаПеременная НачалоИнтервала
ПолучитьКонецПеременная КонецИнтервалаЛинейное выражение Начало + Размер
ПолучитьРазмерПеременная РазмерИнтервалаЧисло (константа из конструктора)

Опциональные интервалы

Если при создании передан параметр Условие — интервал становится опциональным: он участвует в ограничениях только тогда, когда булева переменная условия принимает значение Истина. Это позволяет моделировать задачи, где выполнение операции необязательно.

Методы

МетодОписание
ДобавитьСоздать интервал с переменной длительностью
ДобавитьФиксированныйСоздать интервал с фиксированной длительностью
ПолучитьПолучить интервал по 0-based индексу
КоличествоОбщее число интервалов в модели
ПолучитьНачалоПеременная начала интервала
ПолучитьКонецКонец интервала (переменная или линейное выражение)
ПолучитьРазмерРазмер интервала (переменная или число)

Пример

Модель = О2
.Модели()
.МодельМаршрутизации()
.СоздатьМодель();

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

// Нефиксированный интервал: начало от 0 до 100, длительность — любая
ОперацияА = Интервалы.Добавить(0, 100);

// Фиксированный интервал длительностью 30 единиц
ОперацияБ = Интервалы.ДобавитьФиксированный(30, 0, 200);

// Обращение к переменным интервалов
НачалоА = Интервалы.ПолучитьНачало(ОперацияА); // Переменная НачалоИнтервала
РазмерА = Интервалы.ПолучитьРазмер(ОперацияА); // Переменная РазмерИнтервала
КонецА = Интервалы.ПолучитьКонец(ОперацияА); // Переменная КонецИнтервала

НачалоБ = Интервалы.ПолучитьНачало(ОперацияБ); // Переменная НачалоИнтервала
РазмерБ = Интервалы.ПолучитьРазмер(ОперацияБ); // Число: 30
КонецБ = Интервалы.ПолучитьКонец(ОперацияБ); // Линейное выражение: НачалоБ + 30

// Запрет перекрытий двух операций
Модель
.Ограничения()
.ЗапретПерекрытий(О2.Утилиты().Массив(ОперацияА, ОперацияБ));

См. также