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

О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.Утилиты().Массив(РаботаА, РаботаБ, РаботаВ, РаботаГ)
);

См. также