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

О2_Routing_МенеджерОграничений.КонкурентноеИспользование

Ограничивает суммарную нагрузку активных интервалов на общий ресурс: в каждый момент времени сумма потребностей одновременно активных интервалов не должна превышать ёмкость. Основной способ вызова: О2.Модели().МодельМаршрутизации().СоздатьМодель().Ограничения().КонкурентноеИспользование(Емкость, Потребности).

Синтаксис

О2.Модели().МодельМаршрутизации().СоздатьМодель().Ограничения().КонкурентноеИспользование(
Емкость,
Потребности,
Условия
)

Параметры

  • ЕмкостьЧисло — максимально допустимая суммарная нагрузка в любой момент времени. Целое неотрицательное число.
  • ПотребностиМассив — массив объектов ПотребностьИнтервала. Каждый объект описывает один интервал и величину его нагрузки на ресурс.
  • УсловияФиксированнаяСтруктура, Массив, Неопределено — условия активации всего ограничения. Если не указаны, ограничение применяется всегда.

Возвращаемое значение

  • Менеджер ограничений (О2_Routing_МенеджерОграничений) — текущий объект. Позволяет строить цепочки вызовов (fluent-интерфейс).

Описание

Метод О2.Модели().МодельМаршрутизации().СоздатьМодель().Ограничения().КонкурентноеИспользование(...) задаёт ограничение на совместное использование разделяемого ресурса несколькими интервалами. Ограничение выполняется, если для каждого момента времени t:

Σ Потребность(i) для всех активных i в момент t ≤ Емкость

Активность опциональных интервалов (созданных с параметром Условие) определяется их переменной-условием — если условие ложно, интервал не учитывается при подсчёте нагрузки.

Типичные сценарии применения:

  • Ограничение числа одновременно работающих бригад / единиц оборудования.
  • Ограничение пропускной способности склада (зон погрузки).
  • Управление параллельными потоками заданий с ограниченным числом исполнителей.

Для каждого интервала объект потребности формируется методом ПотребностьИнтервала.

Пример

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

Интервалы = Модель.Интервалы();
Ограничения = Модель.Ограничения();

// Три операции с разными потребностями по ресурсу (например, бригада из N чел.)
РаботаА = Интервалы.ДобавитьФиксированный(60, 0, 480);
РаботаБ = Интервалы.ДобавитьФиксированный(90, 0, 480);
РаботаВ = Интервалы.ДобавитьФиксированный(30, 0, 480);

// Суммарно не более 4 человек одновременно
Ограничения.КонкурентноеИспользование(
4,
О2.Утилиты().Массив(
Ограничения.ПотребностьИнтервала(РаботаА, 2), // требует 2 чел.
Ограничения.ПотребностьИнтервала(РаботаБ, 3), // требует 3 чел.
Ограничения.ПотребностьИнтервала(РаботаВ, 1) // требует 1 чел.
)
);

См. также