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

Release

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

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

Один набор ресурсов может выполнять задачи с разными приоритетами, заданные в нескольких блоках.

  • Если задачи имеют одинаковый приоритет, они будут выполняться последовательно в соответствии с настройками времени выполнения каждой из них. Если освободившихся единиц ресурса хватает, то такие задачи могут выполняться одновременно. Если у двух задач одинаковый приоритет, но одна из них по какой-то причине была ранее приостановлена, то выбирается приостановленная задача.1
  • Если для задач не задан механизм вытеснения, они будут выполняться последовательно в соответствии с настройками времени выполнения каждой из них. Если освободившихся единиц ресурса хватает, то такие задачи могут выполняться одновременно.
  • Начало выполнения задачи, заданной в одном блоке, не сбрасывает приоритеты задач, заданных в других блоках.
1 Каждый ресурс получает запросы из разных источников. Когда у ресурса есть несколько задач с одинаковым приоритетом (новых или ранее приостановленных), при выборе задачи к исполнению учитываются следующие правила:
  • Самый высокий приоритет — у приостановленных задач из «индивидуальной» очереди единицы ресурса.
    Такие очереди формируются агентами, находящимися в блоках, для которых значение свойства Правило вытеснения задач установлено на Ожидать оригинал ресурса.
  • После этого обрабатываются прерванные задачи из очереди блока ResourcePool.
    Эта очередь формируется агентами, находящимися в блоках, для которых значение свойства Правило вытеснения задач установлено на Захватывать любой ресурс.

После выполнения задач из этих очередей ресурс сначала выполняет задачи из «индивидуальной очереди», а затем — из очереди блока ResourcePool.

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

Параметры

Освобождать
Задает, какие ресурсы освобождаются. Имеется пять опций на выбор:
Все захваченные ресурсы (любого типа)
Все ресурсы, захваченные данным блоком Seize
Все захваченные ресурсы данного типа
Заданные ресурсы (список типов)
Указанное количество ресурсов
Имя: releaseMode
Значение по умолчанию: Release.ALL
Допустимые значения:
Release.ALL — Все захваченные ресурсы (любого типа)
Release.ALL_FROM_SEIZES — Все ресурсы, захваченные данным блоком Seize
Release.ALL_FROM_POOLS — Все захваченные ресурсы данного типа
Release.SPECIFIED_RESOURCES — Заданные ресурсы (список типов)
Release.SPECIFIED_QUANTITY — Указанное количество ресурсов
Блоки Seize
[Параметр виден, если Освобождать: Все ресурсы, захваченные данным блоком Seize]
Выражение, вычисляющее тип ресурсов, к которому принадлежат захваченные ресурсы. Если не указан или возвращает null, значит, используется присоединенный набор ресурсов.
Имя: seizeBlocks
Блоки ResourcePool
[Параметр виден, если Освобождать: Все захваченные ресурсы данного типа и Заданные ресурсы (список типов)]
Список имен блоков блока ResourcePool, ресурсы которого освобождаются. На каждый тип ресурсов будет освобожден один ресурс, поэтому если вы хотите освободить два и больше ресурсов одного набора, укажите его название дважды и более, например, {doctor, nurse, nurse}.
Локальная переменная: T agent — агент
Блок ResourcePool
[Параметр виден, если Освобождать: Указанное количество ресурсов]
Выражение, возвращающее имя блока ResourcePool, задающего ресурсы, которые требуется освободить.
Локальная переменная: T agent — агент
Количество ресурсов
[Виден, если Освобождать: Указанное количество ресурсов]
Выражение, вычисляющее количество ресурсов, которое необходимо освободить текущему агенту. Если Количество ресурсов равно нулю, то наличие ресурсов не проверяется, и при этом агент будет просто проходить через блок.
Тип значения: int
Локальная переменная: T agent — агент
Движущиеся ресурсы
Выберите, движущиеся ресурсы Возвращаются в базовую точку (если их сразу же не захватывает другой агент) или Остаются на месте.
Тип значения: boolean
Значение по умолчанию: Возвращаются в базовую точку (true)
Локальные переменные:
T agent — агент
Agent unit — ресурс

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

Завершение (возвращаться)
Здесь задается, когда будет выполняться завершающая задача для закончившего обслуживание своего агента ресурса: завершающая задача может выполняться всегда, или только если нет других задач, или же вы можете выбрать другое и задать приоритет и правило вытеснения для завершающей задачи с помощью приведенных ниже параметров. Завершающей задачей является возвращение ресурсов в их базовое местоположение, а также процесс, заданный с помощью диаграммы процесса, начинающейся с блока, соединенного с портом wrapUp, и заканчивающейся блоком ResourceTaskEnd. Если завершающая задача выполняется всегда, ее невозможно прервать любой другой задачей, включая задачи Downtime.
Локальные переменные:
T agent — агент
Agent unit — ресурс
Приоритет "Завершения"
[Параметр виден, если Завершение (возвращаться): другое]
Устанавливает приоритет задачи завершения.
Тип значения: double
Значение по умолчанию: 0
Локальные переменные: T agent — агент
Agent unit — ресурс
Правило вытеснения
[Параметр виден, если Завершение (возвращаться): другое]
Задает, что произойдет с завершающей задачей при поступлении другой задачи для этого же ресурса:
Вытеснения нет — завершающая задача не будет вытесняться другой задачей
Прекратить — завершающая задача будет вытеснена новой задачей и прекращена
Значение по умолчанию: Вытеснения нет
Допустимые значения:
Release.PP_NO_PREEMPTION — Вытеснения нет
Release.PP_TERMINATE — Прекратить
Локальные переменные:
T agent — агент
Agent unit — ресурс
В стат-ке "завершение"
Выберите, должно ли учитываться время, затраченное на завершающую задачу, как "занятое" время, или же как "свободное" время, или же оно не учитывается в статистике вообще.
Локальные переменные:
T agent — агент
Agent unit — ресурс

Действия

При входе
Код, выполняемый при поступлении агента в блок.
Локальная переменная: T agent — агент
При освобождении
Код, выполняемый при освобождении ресурса. Обратите внимание, что ресурсу может быть назначена завершающая задача (пост-процесс) — либо опцией возвращения после выполнения задачи в базовое местоположение ресурса, либо с помощью специальной диаграммы процесса, начинающейся с блока, соединенного с портом wrapUp, и заканчивающейся блоком ResourceTaskEnd.
Локальные переменные:
T agent — агент
Agent unit — ресурс
При выходе
Код, выполняемый, когда агент покидает блок.
Локальная переменная: T agent — агент
При прекращении пост-процесса
Код, выполняемый, когда прерывается выполнение завершающей задачи ресурса (в силу вытеснения другой задачей с более высоким приоритетом).
Локальные переменные:
T agent — агент, который изначально владел данным ресурсом
Agent unit — ресурс

Порты

in
Входной порт.
out
Выходной порт.
wrapUp
Порт, куда вы можете присоединить блок, который начинает завершающий процесс диаграммы. Эта диаграмма должна заканчиваться блоком ResourceTaskEnd.
Как мы можем улучшить эту статью?