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

Seize

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

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

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

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

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

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

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

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

Если агент планирует захватить ресурс на какое-то определенное время, а затем освободить его, то попробуйте использовать для этой задачи блок Service, аналогичный последовательности блоков [Seize, Delay, Release].

Параметры

Захватить
Здесь вы можете выбрать, требуется ли захватить ресурсы одного типа или ресурсы разных типов ((альтернативный) набор ресурсов). Детальное описание см. в статье про использование ресурсов.
Синтаксис: boolean seizeFromOnePool
Набор ресурсов
[Параметр виден, если Захватить ресурсы: (Альтернативный) набор ресурсов]
Здесь вы можете задать требуемые наборы ресурсов (блоки ResourcePool). Вы можете добавить несколько наборов с помощью кнопки Добавить список. Ресурсы набираются согласно их доступности. Детальное описание см. в статье про использование ресурсов.
Локальная переменная: agent — агент
Тип ресурсов
[Параметр виден, если Захватить ресурсы: Ресурсы одного типа]
Блок ResourcePool, задающий требуемые ресурсы. Детальное описание см. в статье про использование ресурсов.
Локальная переменная: agent — агент
Количество ресурсов
[Параметр виден, если Захватить ресурсы: Ресурсы одного типа]
Выражение, возвращающее требуемое количество ресурсов для агента.
Тип значения: int
Локальная переменная: agent — агент
Правило захвата
Задает правило захвата:
Захватить весь набор сразу — агент ожидает, пока набор ресурсов не будет полностью доступен, а тогда он захватывает все его ресурсы.
Захватывать ресурсы один за другим — агент пытается захватить ресурсы любого альтернативного набора, как только ресурсы становятся доступны. Когда ресурс захвачен, он может, например, начать диаграмму процесс подготовки, пока остальные ресурсы не захвачены и даже окончательный набор ресурсов еще не известен (когда есть альтернативы).
Получить значение: seizePolicy
Значение по умолчанию: Захватить весь набор сразу (Seize.SEIZE_WHOLE_SET)
Допустимые значения:
Seize.SEIZE_WHOLE_SET — Захватить весь набор сразу
Seize.SEIZE_UNITS_ONE_BY_ONE — Захватывать ресурсы один за другим
Вместимость очереди
[Параметр виден, если не выбрана опция Максимальная вместимость]
Вместимость вложенной очереди queue.
Синтаксис: int capacity
Значение по умолчанию: 100
Изменить значение: set_capacity(новое значение)
Максимальная вместимость
Если опция выбрана (true), то вместимость очереди queue будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Изменить значение: set_maximumCapacity(новое значение)
Пересылать захваченные ресурсы
Если опция выбрана (true), захваченные ресурсы будут пересылаться в указанное местоположение.
Тип значения: boolean
Локальные переменные:
agent — агент
Agent unit — ресурс
Место назначения
[Параметр виден, если выбрана опция Пересылать захваченные ресурсы]
Задает место, куда будут пересылаться ресурсы. Ресурсы могут быть отправлены в следующее место назначения:
Агент — ресурсы пересылаются в местоположение указанного агента.
Узел сети — ресурсы пересылаются в указанный узел сети.
Аттрактор — ресурсы пересылаются в указанный аттрактор.
Другой захваченный ресурс — ресурсы пересылаются в текущее местоположение другого захваченного ресурса (указанного ниже в поле Ресурс).
Базовый узел захваченного ресурса — ресурсы пересылаются в базовое местоположение захваченного ресурса.
Точка — ресурсы пересылаются в точку с указанными координатами.
Получить значение: destinationType
Допустимые значения:
Seize.DEST_ENTITY — Агент
Seize.DEST_NODE — Узел сети
Seize.DEST_ATTRACTOR — Аттрактор
Seize.DEST_RESOURCE — Другой захваченный ресурс
Seize.DEST_RESOURCE_HOME — Базовый узел захваченного ресурса
Seize.DEST_XYZ — Точка
Узел
[Параметр виден, если Место назначения: Узел сети]
Узел сети, куда будут пересылаться ресурсы.
Тип значения: Node
Локальные переменные:
agent — агент
Agent unit — ресурс
Аттрактор
[Параметр виден, если Место назначения: Аттрактор]
Аттрактор, куда будут пересылаться ресурсы.
Тип значения: Attractor
Локальные переменные:
agent — агент
Agent unit — ресурс
Ресурс
[Параметр виден, если Место назначения: Другой захваченный ресурс]
Имя блока ResourcePool, задающего набор ресурсов, к захваченному ресурсу из которого будет пересылаться агент. Если захвачены несколько ресурсов одного типа, будет выбран первый из списка.
Тип значения: ResourcePool
Локальные переменные:
agent — агент
Agent unit — ресурс
Координаты X, Y, Z
[Параметр виден, если Местоположение прибытия: Точка]
Координаты точки, куда будут пересылаться ресурсы.
Тип значения: double
Локальные переменные:
agent — агент
Agent unit — ресурс
Присоединить захваченные ресурсы
Если опция выбрана (true), то захваченные ресурсы будут присоединены к агенту до того, как агент покинет этот блок.
Тип значения: boolean
Значение по умолчанию: false
Локальные переменные:
agent — агент
Agent unit — ресурс
Место агентов
Фигура разметки (путь или узел) для очереди.
Синтаксис: AnimationStaticLocationProvider entityLocationQueue

Приоритеты

Приоритет задачи
Приоритет задачи для поступающего агента (чем больше значение, тем выше приоритет).
Тип значения: double
Значение по умолчанию: 0
Локальная переменная: agent — агент
Может вытеснять другие задачи
Если опция выбрана, задача может вытеснять производимую в текущий момент задачу (если возможно согласно свойствам задачи, и приоритет задачи ниже).
Тип значения: boolean
Значение по умолчанию: true
Локальная переменная: agent — агент
Правило вытеснения задач
Здесь вы можете выбрать, что будет делать блок, если поступает какая-либо новая задача для занятых ресурсов.
Вытеснения нет — продолжает выполнять текущую задачу
Ожидать оригинал ресурса — прерывает задачу и ожидает, когда тот же ресурс сможет ее закончить
Прекратить обслуживание — задача прерывается и более не возобновляется
Захватывать любой ресурс — прерывает задачу и пытается захватить любой ресурс указанного типа
Продолжать без ресурса — задача завершается без участия ресурса.
Значение по умолчанию: Вытеснения нет
Локальная переменная: agent — агент
Допустимые значения:
Seize.PP_NO_PREEMPTION — Вытеснения нет
Seize.PP_WAIT_FOR_ORIGINAL_RESOURCE — Ожидать оригинал ресурса
Seize.PP_TERMINATE_SERVING — Прекратить обслуживание
Seize.PP_SEIZE_ANY_RESOURCE — Захватывать любой ресурс
Seize.PP_CONTINUE_WITHOUT_RESOURCE — Продолжать без ресурса
Авто приостановка/возобновление
[Параметр виден, если Правило вытеснения задач: Ожидать оригинал ресурса или Захватывать любой ресурс]
Этим параметром задается, должен ли агент, выполнение задачи которого приостановлено, быть автоматически приостановлен в текущей диаграмме процесса и автоматически возобновлен, когда будут доступны ресурсы.
Синтаксис: boolean suspendResumeEntities
Значение по умолчанию: true
Обработка прекращенной задачи
[Параметр виден, если Правило вытеснения задач: Прекратить обслуживание]
Выберите, что делать при прекращении задачи: Перенаправить в блок Enter - в параметре ниже укажите блок Enter, в который нужно направить агента. Также вы можете либо удалить из диаграммы процесса этого агента, или просто ничего не делать. Если вы выбираете опцию ничего не делать, задача будет прекращена, но агент останется в блоке, пока не истечет заданное время задержки. В таком случае вам необходимо задать действия агента непосредственно в поле действия При прекращении задачи.
Синтаксис: terminatedTaskProcessing
Вход для прекращенных агентов
[Параметр виден, если Обработка прекращенной задачи: Перенаправить в блок Enter]
Блок Enterдля агентов, которые теряют все ресурсы, полученные ими в этом блоке из-за прекращения обслуживания, когда один из наборов ресурсов (заданных в этом блоке Seize) оказывается захваченным задачей с более высоким приоритетом.
Локальные переменные:
agent — агент
Agent unit — ресурс, который запустил прекращение

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

Задать выбор ресурса
Если эта опция выбрана, вы можете указать для выполнения операции определенные ресурсы (используя параметр Условие выбора ресурса, расположенный ниже).
Если вы моделируете ресурсы, у которых есть возможность выбирать задачи, воспользуйтесь свойством Настроить выбор задачи в свойствах соответствующего блока ResourcePool.
Синтаксис: boolean customizeResourceChoice
Значение по умолчанию: false
Условие выбора ресурса
[Параметр виден, если выбрана опция Задать выбор ресурса]
Здесь вы можете указать булево выражение, которое будет вычисляться, чтобы найти требуемые ресурсы для выполнения операции. Если нет доступных ресурсов, подходящих под условие (условие возвращает false, блок Seize будет ожидать первый доступный ресурс, для которого выполняется условие. Обычно вы задаете какой-либо параметр внутри типа агента (например, myAssistant, помещаете туда ссылку на ресурс, когда он начинает работать с агентом (agent.myAssistant=unit), и затем указываете здесь условие agent.myAssistant==unit, позволяющее только этому конкретному ресурсу продолжать работу с этим конкретным агентом.
Тип значения: boolean
Значение по умолчанию:true
Локальные переменные:
agent — агент
Agent unit — ресурс
ResourcePool pool — набор ресурсов
Политика выбора ресурса
Здесь вы можете выбрать, как должен выбираться ресурс. Если выше выбрана опция Задать выбор ресурса, то ресурс будет выбираться только из того набора ресурсов, которые удовлетворяют заданному выше Условию выбора ресурса. Возможные варианты:
Не применяется — Политика выбора ресурса не применяется, просто выбирается какой-то из доступных ресурсов.
Ближайший к агенту — Выбирается ресурс, ближайший к текущему агенту.
Ближайший к агенту по пути (ГИС) — Выбирается ресурс, который при осуществлении движения по существующим путям в ГИС расположен ближе всего к текущему агенту.
Наиболее предпочтительный — Ресурс выбирается путем сравнения ресурсов друг с другом. Алгоритм сравнения (или его вызов) помещается в поле unit1 предпочтительнее, чем unit2.
По рейтингу — Выбирается ресурс с лучшим рейтингом. Рейтинг (или алгоритм его вычисления) задается пользователем в поле Рейтинг ресурса.
Синтаксис: Seize.DispatchingPolicy dispatchingPolicy
Локальные переменные:
agent — агент
ResourcePool pool — набор ресурсов
Допустимые значения:
Seize.RESOURCE_SELECTION_SOME_UNIT — Не применяется
Seize.RESOURCE_SELECTION_NEAREST — Ближайший к агенту
Seize.RESOURCE_SELECTION_NEAREST_BY_ROUTE — Ближайший к агенту по пути (ГИС)
Seize.RESOURCE_SELECTION_BASED_ON_COMPARISON — Наиболее предпочтительный
Seize.RESOURCE_SELECTION_BASED_ON_RATING_VALUE — По рейтингу
unit1 предпочтительнее, чем unit2
[Параметр виден, если выбрана Политика выбора ресурса: Наиболее предпочтительный]
Вызов алгоритма сравнения ресурсов для определения ресурса, наиболее подходящего для выполнения задачи данного агента. Алгоритм должен возвращать true, если сравниваемый ресурс unit1 предпочтительнее, чем ресурс unit2 (а если наоборот, включая равенство при сравнении, - то возвращается значение false). Алгоритм должен соблюдать транзитивность.
Тип значения: boolean
Локальные переменные:
Agent unit1 — первый ресурс для сравнения
Agent unit2 — второй ресурс для сравнения
T agent — текущий агент
Рейтинг ресурса
[Параметр виден, если выбрана Политика выбора ресурса: По рейтингу]
Значение рейтинга ресурса (чем больше значение, тем выше рейтинг). С помощью рейтинга производится выбор ресурса для выполнения операции текущего агента - выбирается ресурс с высшим рейтингом. Чаще всего здесь помещается алгоритм или вызов функции, производящей подсчет рейтинга с помощью имеющихся в распоряжении локальных переменных.
Тип значения: double
Значение по умолчанию: 0
Локальные переменные:
Agent unit — ресурс
agent — текущий агент
Указать подготовительные задачи
Выберите, как будут заданы подготовительные задачи: соединением блоков диаграммы процесса или списком блоков (укажите блоки в параметре ниже).
Синтаксис: boolean taskStartBlocksAreConnected
Значение по умолчанию: true
Блоки ResourceTaskStart
[Параметр виден, если Указать подготовительные задачи: Списком блоков]
Список блоков ResourceTaskStart, задающих подготовительные задачи.
Синтаксис: taskStartBlocks
Разрешить уход по таймауту
Если опция выбрана (true), то агенты могут покидать очередь по таймауту. После проведения в очереди максимально допустимого времени агенты будут покидать блок через специальный порт outTimeout.
Синтаксис: boolean enableTimeout
Значение по умолчанию: false
Таймаут
[Параметр виден, если выбрана опция Разрешить уход по таймауту]
Выражение, вычисляющее значение таймаута (максимально допустимое время, которое агент может провести в очереди) для агента.
Тип значения: double
Локальная переменная: agent — агент
Разрешить вытеснение
Если опция выбрана (true), то агенты помещаются в очередь в соответствии с их приоритетами и могут быть вытеснены из очереди агентами с более высокими приоритетами.
Синтаксис: boolean enablePreemption
Значение по умолчанию: false
При отмене задачи, ресурсы
Здесь вы можете задать, что будет происходить с ресурсами, которые были захвачены, когда их агент уже был удален из этого блока Seize либо по таймауту / вытеснению, либо вызовом функции remove(). Выберите, что делают ресурсы: остаются на месте, возвращаются в базовую точку или отправляются в блок Release.
Получить значение: canceledUnitsBehavior
Изменить значение: set_canceledUnitsBehavior(новое значение)
Значение по умолчанию: остаются на месте
Допустимые значения:
Seize.CANCELED_UNITS_STAY_WHERE_THEY_ARE — остаются на месте
Seize.CANCELED_UNITS_RETURN_TO_HOME_LOCATION — возвращаются в базовую точку
Seize.CANCELED_UNITS_GO_TO_RELEASE_WRAP_UP — отправляются в блок Release
Блок Release
[Параметр виден, если При отмене задачи ресурсы: отправляются в блок Release]
Блок Release для ресурсов, которые были захвачены, но их задачи были отменены.
Локальные переменные:
agent — агент
Agent unit — захваченный ресурс
Выталкивать агентов
Если опция выбрана (true), то агенты, созданные этим блоком, будут немедленно вытолкнуты дальше независимо от состояния следующего блока.
Синтаксис: boolean pushProtocol
Значение по умолчанию: false
Вернуть агента в исходную точку
Если опция выбрана, агенты возвращаются в свое начальное местоположение (узел или путь, где они находились до того, как попали в блок Seize), после того, как покинут фигуру разметки, заданную в параметре Место агентов.
Синтаксис: boolean restoreEntityLocationOnExit
Включить сбор статистики
Блок содержит внутренний блок, для которого собирается статистика. Если сбор статистики глобально отключен для всех блоков Библиотеки моделирования процессов с помощью блока PML Settings, то эта опция позволяет переопределить эту настройку и включить сбор статистики для этого конкретного блока. Иначе статистика собирается вне зависимости от этой настройки.
Синтаксис: boolean forceStatisticsCollection
Значение по умолчанию: false

Действия

Во всех действиях текущий агент доступен как локальная переменная agent.

При входе
Код, выполняемый, когда агент поступает в блок.
При уходе по таймауту
[Параметр виден, если выбрана опция Разрешить уход по таймауту]
Код, выполняемый, когда агент покидает блок по таймауту (прождав в очереди максимально допустимое время) через специальный порт outTimeout.
При вытеснении
[Параметр виден, если выбрана опция Разрешить вытеснение]
Код, выполняемый, когда агент покидает блок через порт outPreempted в результате вытеснения.
При захвате ресурса
Код, выполняемый при захвате ресурса.
Локальные переменные:
agent — агент
Agent unit — захваченный ресурс
При подготовке ресурса
Код, выполняемый при окончании подготовки ресурса.
Локальные переменные:
agent — агент
Agent unit — захваченный ресурс
При выходе
Код, выполняемый, когда агент покидает блок через порт out.
При приостановке задачи
[Параметр виден, если Правило вытеснения задач: Ожидать оригинал ресурса или Захватывать любой ресурс]
Код, выполняемый, когда задача агента приостановлена из-за этих правил вытеснения, когда его ресурс захватывается другой задачей с более высоким приоритетом.
Локальные переменные:
agent — агент
Agent unit — ресурс
При возобновлении задачи
[Параметр виден, если Правило вытеснения задач: Ожидать оригинал ресурса или Захватывать любой ресурс]
Код, выполняемый, когда агент возобновляет выполнение своей задачи после того, как был приостановлен из-за этих правил вытеснения.
Локальные переменные:
agent — агент
Agent unit — ресурс
При прекращении задачи
[Параметр виден, если Правило вытеснения задач: Прекратить обслуживание]
Код, выполняемый, когда агент теряет все ресурсы, полученные в этом блоке из-за правила вытеснения, когда один из наборов ресурсов (заданных в этом блоке) оказывается захваченным задачей с более высоким приоритетом.
Локальные переменные:
agent — агент
Agent unit — ресурс, который запустил прекращение
При извлечении
Код, выполняемый, когда агент умышленно извлекается из блока посредством вызова функции агента remove(). Этот код вызывается автоматически после вызова функции remove().
Локальная переменная: agent — агент

Функции

Функция Описание
int size() Возвращает количество агентов, находящихся в данный момент в очереди Queue.
T get( int index ) Возвращает агента, находящегося в очереди в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).
T remove(Agent agent) Извлекает агента agent из очереди и возвращает его. Если такого агента в очереди обнаружено не будет, функция вернет null.
T resume(Agent agent) Возобновляет ранее приостановленный блок Delay (если он не был приостановлен, выдает ошибку).
T suspend(Agent agent) Приостанавливает задержку на заданный таймаут dt.
void recalculateResourceChoiceConditions(Agent agent) Заново проверяет условия выбора ресурсов для заданного агента, который сейчас находится в очереди этого блока. Эту функцию можно использовать, когда некоторые ресурсы, ранее недоступные для захвата конкретным агентом, возможно, стали доступными, поскольку условия изменились.
Эта функция также заново проверяет условия для зарезервированных ресурсов (если выбрано правило захвата Захватить весь набор сразу), но не проверяет уже захваченные ресурсы (если выбрано правило захвата Захватывать ресурсы один за другим).
void recalculateResourceChoiceConditions() Заново проверяет условия выбора ресурсов для всех агентов, которые сейчас находится в очереди этого блока. Эту функцию можно использовать, когда некоторые ресурсы, ранее недоступные для захвата, возможно, стали доступными, поскольку условия изменились.
Эта функция также заново проверяет условия для зарезервированных ресурсов (если выбрано правило захвата Захватить весь набор сразу), но не проверяет уже захваченные ресурсы (если выбрано правило захвата Захватывать ресурсы один за другим).
void recalculateAgentPriority(agent) Заново рассчитывает приоритет задачи для указанного агента, который в данный момент находится в очереди этого блока Seize. Вызов этой функции может повлечь за собой вытеснение ресурсов.
Если в этом блоке Seize выбрано Правило захвата: Захватывать ресурсы один за другим и агент уже успел захватить один или несколько ресурсов, могут игнорироваться некоторые наборы ресурсов, необходимые для начала выполнения задачи. Речь идет о наборах ресурсов, которые невозможно захватить целиком (укомплектовать), поскольку некоторые ресурсы из них в данный момент захвачены. Перерасчет приоритета не обновит проигнорированные наборы ресурсов, т.е. агент сможет захватывать только те ресурсы, которые необходимы для комплектации не игнорируемых наборов.
Если у блока Seize очередь с ограниченной вместимостью, перерасчет не повлияет на агентов, которые ждут входа в блок Seize.
void recalculatePriorities() Заново рассчитывает приоритет задач для всех агентов, которые в данный момент находятся в очереди этого блока Seize. Вызов этой функции может повлечь за собой вытеснение ресурсов.
Если в этом блоке Seize выбрано Правило захвата: Захватывать ресурсы один за другим и агент уже успел захватить один или несколько ресурсов, могут игнорироваться некоторые наборы ресурсов, необходимые для начала выполнения задачи. Речь идет о наборах ресурсов, которые невозможно захватить целиком (укомплектовать), поскольку некоторые ресурсы из них в данный момент захвачены. Перерасчет приоритета не обновит проигнорированные наборы ресурсов, т.е. агент сможет захватывать только те ресурсы, которые необходимы для комплектации не игнорируемых наборов.
Приоритеты рассчитываются заново только для агентов, которые в данный момент находятся в очереди этого блока Seize. Если у блока Seize очередь с ограниченной вместимостью, перерасчет не повлияет на агентов, которые ждут входа в этот блок.
boolean isStatisticsCollected() Возвращает true, если блок собирает статистику.

Внутренний блок

Wait queue
Внутренняя очередь.

Порты

in
Входной порт.
outTimeout
Выходной порт для агентов, покидающих блок по таймауту (вследствие истечения заданного времени ожидания).
outPreempted
Выходной порт для агентов, покидающих блок в результате вытеснения.
out
Выходной порт.
preparedUnits
Выходной порт для готовых ресурсов, которые закончили выполнять свои задачи. Сюда вы можете присоединить последний блок диаграммы подготовки ресурсов. Эта диаграмма процесса должна начинаться с блока ResourceTaskStart.
Как мы можем улучшить эту статью?