AnyLogic
Развернуть
Размер шрифта

Hold

Блокирует/снимает блокировку с потока агентов на определенном участке блок-схемы. Блок Hold используется, например, когда блок может принимать агентов, но вы не хотите (временно) продолжать их обработку или когда нужно заблокировать поступление агентов только от какого-то определенного блока, в то же время принимая агентов, приходящих с выходных портов других блоков.

Состоянием блока можно управлять программно с помощью функции setBlocked().

В отличие от других блоков библиотеки, Hold не хранит агентов внутри (даже в течение нулевого времени) и может рассматриваться как расширение входного или выходного порта (или портов).

Демо-модель: Hold Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Параметры

Режим
Здесь вы можете выбрать режим блокировки/разблокировки для блока Hold. Имеются три режима:
Вручную (использовать функции block(), unblock()) — Блок будет заблокирован вызовом функции block() и разблокирован вызовом unblock().
Блокировать после заданного кол-ва агентов — Блок будет заблокирован автоматически, как только заданное количество агентов прибудет в его входной порт. Блок будет разблокирован вызовом функции unblock().
Условное (свое условие для каждого агента) — Блок будет принимать решение, заблокировать ли вход или нет, в зависимости от того, как вычисляется Условие блокировки для каждого входящего агента.
Имя: mode
Значения:
Hold.MANUAL — Вручную (использовать функции block(), unblock())
Hold.BLOCK_AFTER_N_ENTITIES — Блокировать после заданного кол-ва агентов
Hold.CONDITIONAL — Условное (свое условие для каждого агента)
Кол-во агентов для данного блока
[Параметр виден, если Режим: Блокировать после заданного кол-ва агентов]
Количество агентов, которые должны прибыть ко входному порту блока, чтобы заблокировать Hold.
Синтаксис: int nEntitiesForSelfBlock
Условие блокировки
[Параметр виден, если Режим: Условное (свое условие для каждого агента)]
Здесь вы можете задать условие, которое будет заново вычисляться для каждого агента. Если условие вычисляется как true, то блок Hold будет заблокирован. Вы можете изменять условие динамически, в этом случае, вам будет необходимо вызвать функцию блока recalculateConditions(), чтобы блок Hold пересчитал условия блокировки для всех агентов, которые в данный момент удерживаются этим блоком.
Тип значения: boolean
Локальная переменная: T agent — агент
Изначально заблокирован
Если опция выбрана (true), то блок изначально находится в заблокированном состоянии.
Синтаксис: boolean initiallyBlocked
Значение по умолчанию: false

Действия

При входе
Код, выполняемый при прохождении агента через блок.
Локальная переменная: T agent — агент

Функции

Функция Описание
void setBlocked(boolean blocked) Блокирует входной порт, если в качестве значения аргумента передано true, и разблокирует его в обратном случае.
boolean isBlocked() Возвращает true, если входной порт заблокирован. Если порт не заблокирован — возвращает false.
void block() Блокирует входной порт. Не делает ничего, если порт уже заблокирован.
void unblock() Разблокировка входного порта. Не делает ничего, если порт не заблокирован.
boolean toggleBlock() Изменяет состояние "заблокирован" и возвращает новое состояние (заблокирован = true).
void recalculateConditions() Используйте эту функцию, чтобы заставить блок Hold пересчитать условия блокировки для всех агентов, удерживаемых в данный момент в этом блоке.

Порты

in
Входной порт.
out
Выходной порт.
Как мы можем улучшить эту статью?