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