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

Delay

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

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

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

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

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

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

Вы можете динамически увеличить длительность задержки для тех агентов, которые уже находятся в состоянии задержки, используя функцию extendDelay().

Параметры

Тип задержки
Определяет способ задания времени задержки: задержка может быть задана либо как Определенное время, либо До вызова функции stopDelay().
Имя: type
Возможные значения:
Delay.TIMEOUT — Определенное время
Delay.MANUAL — До вызова функции stopDelay()
Время задержки
[Параметр виден, если Тип: Определенное время]
Выражение, вычисляющее время задержки для агента.
Тип значения: double
Локальная переменная: Т agent — текущий агент
Вместимость
[Параметр виден, если не выбрана опция Максимальная вместимость]
Вместимость блока Delay. Задает максимальное количество агентов, которые могут одновременно находиться в блоке.
Синтаксис: int capacity
Значение по умолчанию: 1
Установить новое значение во время выполнения: set_capacity(новое значение)
Максимальная вместимость
Если опция выбрана (true), то вместимость блока Delay будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Установить новое значение во время выполнения: set_maximumCapacity(новое значение)
Место агентов
Фигура разметки (узел или путь), где располагаются агенты, пока они обрабатываются блоком Delay.
Синтаксис: entityLocation

Специфические

Выталкивать агентов
Если опция выбрана (true), то агенты, созданные этим блоком, будут немедленно вытолкнуты дальше независимо от состояния следующего блока. Если опция не выбрана, агенты не выталкиваются, а следуют сценарию, который вы укажете в следующем параметре.
Синтаксис: boolean pushProtocol
Вернуть агента в исходную точку
Если опция выбрана, агенты возвращаются в свое начальное местоположение (узел или путь, где они находились до того, как попали в этот блок), после того, как покинут фигуры разметки, заданные в параметре Место агентов.
Синтаксис: boolean restoreEntityLocationOnExit
Включить сбор статистики
Этот блок собирает статистику. Если сбор статистики глобально отключен для всех блоков Библиотеки моделирования процессов с помощью блока PML Settings, то эта опция позволяет переопределить эту настройку и включить сбор статистики для этого конкретного блока. Иначе статистика собирается вне зависимости от этой настройки.
Синтаксис: boolean forceStatisticsCollection
Значение по умолчанию: false

Действия

При входе
Код, выполняемый, когда агент поступает в блок.
Локальные переменные:
Т agent — агент
double delayTime — время задержки агента (уже вычисленное к этому моменту)
При подходе к выходу
Код, выполняемый, когда время задержки для агента заканчивается и агент готов покинуть блок.
Локальная переменная: Т agent — агент
При выходе
Код, выполняемый, когда агент покидает блок.
Локальная переменная: Т agent — агент
При извлечении
Код, выполняемый, когда агент умышленно извлекается из блока посредством вызова функции агента remove(). Этот код вызывается автоматически после вызова функции remove().
Локальная переменная: T agent — агент

Статистика

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

Функции

Функция Описание
void suspend(double dt) Приостанавливает задержку на заданный таймаут dt.
void suspend() Приостанавливает блок Delay. Блокирует входной порт — даже если блок Delay не заполнен до конца. Таймауты агентов, которые уже задерживаются, приостанавливаются, пока не вызвана функция resume(). Агенты, задержка которых уже закончилась (и теперь они ждут, пока их примет следующий блок), могут свободно покидать блок, когда следующий блок готов принять их.
void resume() Возобновляет приостановленный ранее блок Delay (если приостановки не было, выдает ошибку). После того, как вызывается эта функция, все таймауты агентов, которые задерживаются, возобновляются, и поэтому время их таймаутов в общем увеличивается на количество времени, проведенного между вызовами suspend() и resume(). Открывает входной порт, если есть место для входящих агентов.
Agent resume(Agent agent) Возобновляет ранее приостановленный блок Delay (выдает ошибку, если не было приостановки).
Agent suspend(Agent agent) Приостанавливает блок Delay.
boolean isSuspended() Возвращает статус блока Delay: true, если блок Delay приостановлен, false — если нет.
double getRemainingTime(agent) Возвращает оставшееся время задержки для данного агента. Обратите внимание, при использовании протокола PULL, если эта функция возвращает значение 0, то агент может остаться в блоке Delay в случае, если следующий блок не может немедленно его принять.
double getDelayTime(agent) Возвращает изначальное (заданное) время задержки, рассчитанное для данного агента в блоке Delay (это время учитывает и возможные продления задержки функцией extendDelay()). В случае использования протокола PULL, реальное время задержки может быть больше — когда следующий блок не может немедленно принять исходящих агентов.
double getElapsedTime(Agent agent) Возвращает время, проведенное данным агентом в блоке Delay. В случае использования протокола PULL, возвращенное значение может превышать значение функции getDelayTime(), когда следующий блок не может немедленно принять исходящих агентов.
void stopDelay(Agent agent) Останавливает задержку для данного агента agent. Если аргумент выдает null, значит, все агенты освобождены.
void stopDelayForAll() Останавливает задержку для всех агентов, которые в этот момент задерживаются.
void extendDelay(Agent agent, double dt) Увеличивает время задержки для данного агента (если возможно использовать null как аргумент, то все задержанные агенты будут затронуты). Аргумент dt измеряется в единицах модельного времени. Если передать отрицательное значение аргумента dt, функция сократит время задержки для данного агента. Данная функция не влияет на агентов, для которых задержка уже завершилась и которые ожидают перехода в следующий блок (при выполнении протокола ’pull’). Если после вызова этой функции время задержки сократилось до нуля, для данного агента автоматически будет вызвана функция stopDelay(). Функция доступна только для блоков Delay с задержкой на определенное время и не выполняется, если изначальное время задержки равно 0.
void extendDelay(Agent agent, double dt, TimeUnits units) Увеличивает время задержки для данного агента (если возможно использовать null как аргумент, то все задержанные агенты будут затронуты) в заданных единицах времени. Если передать отрицательное значение аргумента dt, функция сократит время задержки для данного агента. Данная функция не влияет на агентов, для которых задержка уже завершилась и которые ожидают перехода в следующий блок (при выполнении протокола ’pull’). Если после вызова этой функции время задержки сократилось до нуля, для данного агента автоматически будет вызвана функция stopDelay(). Функция доступна только для блоков Delay с задержкой на определенное время и не выполняется, если изначальное время задержки равно 0.
void reduceDelay(Agent agent, double dt) Сокращает время задержки для данного агента (если возможно использовать null как аргумент, то все задержанные агенты будут затронуты). Аргумент dt измеряется в единицах модельного времени. Данная функция не влияет на агентов, для которых задержка уже завершилась и которые ожидают перехода в следующий блок (при выполнении протокола ’pull’). Если после вызова этой функции время задержки сократилось до нуля, для данного агента автоматически будет вызвана функция stopDelay(). Функция доступна только для блоков Delay с задержкой на определенное время.
void reduceDelay(Agent agent, double dt, TimeUnits units) Сокращает время задержки для данного агента (если возможно использовать null как аргумент, то все задержанные агенты будут затронуты) в заданных единицах времени. Данная функция не влияет на агентов, для которых задержка уже завершилась и которые ожидают перехода в следующий блок (при выполнении протокола ’pull’). Если после вызова этой функции время задержки сократилось до нуля, для данного агента автоматически будет вызвана функция stopDelay(). Функция доступна только для блоков Delay с задержкой на определенное время.
int size() Возвращает количество агентов, задерживаемых блоком в текущий момент времени.
T remove(Agent agent) Извлекает заданного агента agent из блока и возвращает его.
T get(int i) Возвращает агента по индексу i. Обратите внимание, что эта функция работает очень медленно и, более того, порядок расположения агентов и их индексы не сохраняются и могут измениться в следующий момент времени.
boolean isStatisticsCollected() Возвращает true, если блок собирает статистику.
resetStats() Удаляет статистику, собранную блоком к текущему моменту времени.
Iterator<Agent> iterator() Возвращает итератор агентов (в порядке: первый — у выхода, последний — самое большое время, оставшееся до его задержки).

Порты

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