Delay


Задерживает агентов на заданный период времени. Время задержки вычисляется динамически, может быть случайным, зависеть от текущего агента или от каких-то других условий. 

Сразу несколько агентов (не более заданной вместимости объекта capacity) могут быть задержаны одновременно или независимо друг от друга.

Пример задания времени задержки: пусть время обработки пакета данных (агент типа Packet) пропорционально размеру пакета какое-то случайное время. Тогда вы можете сделать следующее: указать Packet в качестве Типа агента объекта Delay и написать processingTimePerDataUnit * agent.size uniform( timeMin, timeMax ) в поле параметра Время задержки.

Если вместимость объекта Delay меняется динамически, и количество агентов, находящихся в объекте в данный момент времени, превышает значение вместимости объекта, то объект Delay даст каждому такому агенту завершить его время ожидания, и не будет принимать новых агентов до тех пор, пока их количество в объекте не станет меньше нового значения вместимости объекта.

Вы можете выполнять любые необходимые вам действия над содержащимися в объекте агентами, например, узнавать, сколько времени еще агентам осталось находиться в объекте, и даже извлекать агентов, не дожидаясь того, когда их времена задержек истекут.

Объект Delay может отображать анимации находящихся в нем агентов как движущимися вдоль заданного пути, так и ожидающими в заданных точках. В том случае, если агенты отображаются движущимися, за время их задержки они должны будут пройти весь путь выбранной фигуры анимации объекта Delay.

Параметры

Тип задержки
Определяет способ задания времени задержки: задержка может быть задана либо как Определенное время, либо До вызова функции stopDelay().
Имя: type
Изменить значение: set_type(новое значение)
Возможные значения: Определенное время - Delay.TIMEOUT
До вызова функции stopDelay() - Delay.MANUAL
Время задержки [динамический]
[Параметр виден, если Тип: Определенное время] Выражение, вычисляющее время задержки для агента.
Тип значения: double
Локальная переменная: Т еntity - текущий агент.
Вместимость
[Параметр виден, если не выбрана опция Максимальная вместимость]
Вместимость объекта Delay. Задает максимальное количество агентов, которые могут одновременно находиться в объекте.
Синтаксис: int capacity
Значение по умолчанию: 1
Максимальная вместимость
Если опция выбрана (true), то вместимость объекта Delay будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Место агентов
Фигура разметки (узел или путь), где располагаются агенты, пока они обрабатываются объектом Delay.
Синтаксис: AnimationStaticLocationProvider entityLocation
Специфические
Выталкивать агентов
Если опция выбрана (true), то агенты, созданные этим блоком, будут немедленно вытолкнуты дальше независимо от состояния следующего блока.
Если опция не выбрана, агенты не выталкиваются, а следуют сценарию, который вы укажете в следующем параметре.
Синтаксис: boolean pushProtocol
Вернуть агента в исходную точку
Если опция выбрана, агенты возвращаются в свое начальное местоположение (узел или путь, где они находились до того, как попали в этот блок), после того, как покинут фигуры разметки, заданные в параметре Место агентов.
Синтаксис: boolean restoreEntityLocationOnExit
Включить сбор статистики
По умолчанию, статистика собирается для всех блоков Библиотеки Моделирования Процессов. Тем не менее, вы можете настроить этот параметр и выключить сбор статистики, чтобы улучшить динамику модели. Для этого добавьте блок PML Settings и отключите опцию Включить статистику по умолчанию. Таким образом, вы отключите сбор статистики для всех блоков диаграммы процесса в этой модели. Но вы можете включить статистику для некоторых конкретных блоков, включив эту опцию Включить сбор статистики в свойствах самого блока.
Синтаксис: boolean forceStatisticsCollection
Значение по умолчанию: false
Действия
При входе [код]
Код, выполняемый, когда агент поступает в объект.
Локальные переменные: Т еntity - агент.
double delayTime - время задержки агента (уже вычисленное к этому моменту).
При подходе к выходу [код]
Код, выполняемый, когда время задержки для агента заканчивается и агент готов покинуть объект.
Локальная переменная: Т еntity - агент.
При выходе [код]
Код, выполняемый, когда агент покидает объект.
Локальная переменная: Т еntity - агент.
При извлечении [код]
Код, выполняемый, когда агент умышленно извлекается из блока посредством вызова функции агента remove(). Этот код вызывается автоматически после вызова функции remove().
Локальная переменная: T agent - агент.

Переменные

StatisticsContinuous statsUtilization
Статистика использования объекта (показатель использования высчитывается как size()/capacity). Статистика собирается только если выбрана опция объекта PML Settings Включить статистику по умолчанию.

Функции

Suspending/resuming

void suspend(double dt) - Приостанавливает задержку на заданный таймаут dt.

void suspend() - Приостанавливает блок Delay. Блокирует входной порт - даже если блок Delay не заполнен до конца. Таймауты агентов, которые уже задерживаются, приостанавливаются, пока не вызвана функция resume(). Агенты, задержка которых уже закончилась (и теперь они ждут, пока их примет следующий блок), могут свободно покидать объект, когда следующий блок готов принять их.

void resume() - Возобновляет приостановленный ранее объект Delay (если приостановки не было, выдает ошибку). После того, как вызывается этот метод, все таймауты агентов, которые задерживаются, возобновляются, и поэтому время их таймаутов в общем увеличивается на количество времени, проведенного между вызовами suspend() и resume(). Открывает входной порт, если есть место для входящих агентов.

T resume(Agent agent) - возобновляет ранее приостановленный объект Delay (выдает ошибку, если не было приостановки).

T suspend (Agent agent) - приостанавливает объект Delay на заданное время таймаута dt.

boolean isSuspended() - Возвращает статус приостановленного блоку Delay: true, если блок Delay приостановлен, false - если нет.

double getRemainingTime(T agent) - Возвращает оставшееся время задержки для данного агента. Обратите внимание, при использовании протокола PULL, если этот метод возвращает значение 0, то агент может остаться в блоке Delay в случае, если следующий блок не может немедленно его принять.

double getDelayTime(T agent) - Возвращает изначальное (заданное) время задержки, рассчитанное для данного агента в блоке Delay (это время учитывает и возможные продления задержки функцией extendDelay()). В случае использования протокола PULL, реальное время задержки может быть больше - когда следующий блок не может немедленно принять исходящих агентов.

double getElapsedTime( T agent ) - Возвращает время, проведенное данным агентом в блоке Delay. В случае использования протокола PULL, возвращенное значение может превышать значение функции getDelayTime(), когда следующий блок не может немедленно принять исходящих агентов.

void stopDelay(Agent agent) - останавливает задержку для данного агента agent. Если аргумент выдает null, значит, все агенты освобождены.

void stopDelayForAll() - Останавливает задержку для всех агентов, которые в этот момент задерживаются.

void extendDelay(Agent agent, double dt) - Увеличивает время задержки для данного агента (если возможно использовать как аргумент, то все задержанные агенты будут затронуты).

int size() - Возвращает количество агентов, задерживаемых объектом в текущий момент времени.

T remove(Agent agent) - Извлекает заданного агента agent из объекта и возвращает его.

T get(int i) - Возвращает агента по индексу i. Обратите внимание, что этот метод работает очень медленно и, более того, порядок расположения агентов и их индексы не сохраняются и могут измениться в следующий момент времени.

resetStats() - Удаляет статистику, собранную объектом к текущему моменту времени.

Iterator iterator() - Возвращает итератор агентов (в порядке: первый - у выхода, последний - самое большое время, оставшееся до его задержки).

Порты

in
Входной порт.
out
Выходной порт.