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

Assembler

Этот блок позволяет осуществить сборку одного нового агента из определенного числа агентов, пришедших из различных источников (до 5). Тип нового агента, так же как и его инициализация, определяется пользователем. Число агентов, которые должны поступить на каждый отдельно взятый порт для того, чтобы мог быть создан один новый агент, задается с помощью параметров блока (Количество 1, Количество 2, и т.д.). Поступившие агенты ожидают поступления всех необходимых для сборки агентов. Как только новый агент может быть собран, начинается операция сборки. Время сборки задается в параметре Время задержки.

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

Новый агент может быть любым из первоначально поступивших в блок агентов (возможно, измененным пользователем), а может быть и совершенно новым, чьи свойства могут зависеть от свойств первоначальных агентов. Если, например, вы хотите, чтобы блок покидал тот же агент, что поступил в блок через первый входной порт, переключите параметр Новый агент в режим задания динамически вычисляемого выражения, и напишите в поле параметра queue1.removeFirst()

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

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

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

Параметры

Количество 1, 2, ...5
Количество агентов, требуемое для поступления во входной порт in1, in2, ..., in5 для создания одного агента.
Синтаксис: int quantity1, quantity2, ... quantity5
Значение по умолчанию: 1
Новый агент
Выражение, определяющее, какой агент будет создаваться (обычно просто вызов конструктора типа создаваемого агента). Упоминается ниже как T.
Тип значения: Agent
Локальные переменные:
Queue<T1> queue1, queue2, ... , queue5 — агенты, поступившие в порт in1, in2, ... , in5 и хранящиеся в данный момент в очереди queue1, queue2, ... , queue5
Изменить размеры
Если опция выбрана (true), можно будет изменить размеры агентов, создаваемых этим блоком, задав соответствующие значения в параметрах Длина, Ширина и Высота ниже.
Тип значения: boolean
Локальная переменная: T agent — агент
Длина
[Параметр виден, если выбрана опция Изменить размеры] Новая длина создаваемого агента.
Тип значения: double
Локальная переменная: T agent — агент
Ширина
[Параметр виден, если выбрана опция Изменить размеры] Новая ширина создаваемого агента.
Тип значения: double
Локальная переменная: T agent — агент
Высота
[Параметр виден, если выбрана опция Изменить размеры] Новая высота создаваемого агента.
Тип значения: double
Локальная переменная: T agent — агент
Захватить
Здесь вы можете выбрать, требуются ли для сборки ресурсы одного типа или ресурсы разных типов ((альтернативный) набор ресурсов). Детальное описание см. в статье Ресурсы.
Синтаксис: boolean seizeFromOnePool
Значение по умолчанию: false
Набор ресурсов
[Параметр виден, если Захватить: (альтернативный) набор ресурсов]
Здесь вы можете задать наборы ресурсов, требуемые для совершения сборки. Вы можете добавить несколько наборов с помощью кнопки Добавить список. Ресурсы набираются согласно их доступности. Детальное описание см. в статье Ресурсы
Локальная переменная: T agent — агент
Тип ресурсов
[Параметр виден, если Захватить: ресурсы одного типа]
Блок ResourcePool, задающий ресурсы, которые требуются для сборки агента. Детальное описание см. в статье Ресурсы
Локальная переменная: T agent — агент
Количество ресурсов
[Параметр виден, если Захватить: Ресурсы одного типа]
Выражение, возвращающее требуемое количество ресурсов для агента.
Тип значения: int
Значение по умолчанию: 1
Локальная переменная: T agent — агент
Время задержки
Выражение, вычисляющее время задержки, необходимое для сборки одного агента.
Тип значения: double
Локальная переменная: T agent — текущий агент
Вместимость буфера на выходе
Вы можете добавить буфер, в котором собранные новые агенты (материальные объекты) будут ожидать, когда их примет следующий блок в диаграмме процесса. Буфер может понадобиться, например, в том случае, если следующий блок в диаграмме процесса не успевает принимать собранных новых агентов или если следующему блоку необходимо знать координаты нового собранного агента. В данном параметре вы задаете максимальное количество агентов, которые могут ожидать в буфере. Если вы не используете буфер (т.е. значение данного параметра равно нулю), собранный агент будет удерживать ресурсы (если они есть), а его анимация появится в Месте нового агента.
Синтаксис: int outputBufferCapacity
Установить новое значение во время выполнения: set_outputBufferCapacity(новое значение)

Анимация

Место нового агента
Здесь задается местоположение созданных в этом блоке агентов. Выберите либо опцию Не задано, либо одну из следующих опций:
Узел сети / ГИС — агенты будут помещены в заданный узелсети, в ГИС точкуили в ГИС регион.
Аттрактор — агенты будут появляться в заданном аттракторе.
Точка — точка в координатах x, y, z, в которой будут появляться агенты.
(Широта/долгота) — агенты появляются в точке на карте с заданными координатами Широты и Долготы.
Географ. место — агенты появляются в определенном месте на карте. Вы можете задать это местоположение в параметре Имя места.
Имя: locationType
Допустимые значения:
Assembler.LOCATION_NOT_SPECIFIED — Не задано
Assembler.LOCATION_XYZ — Точка
Assembler.LOCATION_NODE — Узел сети / ГИС
Assembler.LOCATION_ATTRACTOR — Аттрактор
Assembler.LOCATION_LATLON — (Широта/долгота)
Assembler.LOCATION_GEO_PLACE — Географ. место
Узел
[Параметр виден, если Место нового агента: Узел сети / ГИС]
Узел сети, ГИС точка или ГИС регион, куда отправляются агенты, созданные этим блоком.
Локальная переменная: T agent — агент
Аттрактор
[Параметр виден, если Место нового агента: Аттрактор]
Аттрактор, куда отправляются агенты, созданные этим блоком.
Тип значения: Attractor
Локальная переменная: T agent — агент
Координаты X, Y, Z
[Параметр виден, если Место нового агента: Точка]
Координаты точки.
Тип значения: double
Локальная переменная: T agent — агент
... расположена
[Параметр виден, если Место нового агента: Точка (x, y, z)]
Здесь можно выбрать, где будет находиться точка, в которой окажется новый агент, когда он выйдет из блока: на уровне или в сети.
Тип значения: boolean destinationInNetwork
Значение по умолчанию: false
Уровень
[Параметр виден, если ...расположена: на уровне]
Уровень, на котором расположена точка, куда будет помещен новый агент, когда он выйдет из блока.
Тип значения: Level
Локальная переменная: T agent — агент
Сеть
[Параметр виден, если ...расположена: в сети]
Сеть, в которой расположена точка, куда будет помещен новый агент, когда он выйдет из блока.
Тип значения: INetwork Локальная переменная:T agent — агент
Широта, Долгота
[Параметр виден, если Место нового агента: (широта, долгота)]
Координаты широты и долготы точки на ГИС карте, где появляются агенты.
Тип значения: double
Локальная переменная: T agent — агент
Имя места
[Параметр виден, если Место нового агента: Географ. место]
Имя конкретного места на карте ГИС, где будут появляться агенты. Укажите имя как текст в кавычках, например, "London". ГИС карта выполнит поиск места по этому имени. Первый результат в списке результатов ГИС поиска будет использован в качестве местоположения, куда будут помещены агенты.
Тип значения: String
Локальная переменная: T agent — агент
Скорость
[Параметр виден, если Место нового агента задано одной из опций]
Скорость движения агентов, которых производит этот блок.
Тип значения: double
Значение по умолчанию: 10 м/с
Локальная переменная: T agent — агент
Место агентов (delay)
Фигура разметки (node или path), где располагаются агенты, пока они находятся во вложенном блоке Delay.
Синтаксис: AnimationStaticLocationProvider entityLocationDelay
Место агентов (queue)
Фигура разметки (node или path), где располагаются агенты, пока они находятся во вложенных блоках queue1, queue2, ... queue5.
Синтаксис: AnimationStaticLocationProvider entityLocationQueue1, entityLocationQueue2, ...

Приоритеты / вытеснение

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

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

Задать выбор ресурса
Если эта опция выбрана, вы можете указать для выполнения операции определенные ресурсы (используя параметр Условие выбора ресурса, расположенный ниже).
Синтаксис: boolean customizeResourceChoice
Значение по умолчанию: false
Условие выбора ресурса
[Параметр виден, если выбрана опция Задать выбор ресурса]
Здесь вы можете указать булево выражение, которое будет вычисляться, чтобы найти требуемые ресурсы для выполнения операции. Если нет доступных ресурсов, подходящих под условие (условие возвращает false), блок Assembler будет ожидать первый доступный ресурс, для которого выполняется условие. Обычно вы задаете какое-либо поле внутри типа агента (например, myAssistant), помещаете туда ссылку на ресурс, когда он начинает работать с агентом (agent.myAssistant=unit), и затем указываете здесь условие agent.myAssistant==unit, позволяющее только этому конкретному ресурсу продолжать работу с этим конкретным агентом.
Тип значения: boolean
Значение по умолчанию: true
Локальные переменные:
T agent — агент
Agent unit — ресурс
ResourcePool pool — набор ресурсов
Выбор ресурса
Здесь вы можете указать политику выбора ресурса.
Не применяется — политика выбора ресурса не применяется, просто выбирается какой-то из доступных ресурсов.
Ближайший к агенту — выбирается ресурс, ближайший к текущему агенту.
Наиболее предпочтительный — ресурс выбирается путем сравнения ресурсов друг с другом. Алгоритм сравнения (или его вызов) помещается в поле "unit1 предпочтительнее unit2".
По рейтингу — выбирается ресурс с лучшим рейтингом. Рейтинг (или алгоритм его вычисления) задается пользователем в поле Рейтинг ресурса.
Значение по умолчанию: Не применяется
Допустимые значения:
Assembler.RESOURCE_SELECTION_SOME_UNIT) — Не применяется
Assembler.RESOURCE_SELECTION_NEAREST — Ближайший к агенту
Assembler.RESOURCE_SELECTION_BASED_ON_COMPARISON — Наиболее предпочтительный
Assembler.RESOURCE_SELECTION_BASED_ON_RATING_VALUE — По рейтингу
Локальные переменные:
T agent — агент
ResourcePool pool — набор ресурсов
"unit1 предпочтительнее unit2"
[Параметр виден, если Выбор ресурса: Наиболее предпочтительный]
Вызов алгоритма для сравнения ресурсов для определения наиболее подходящего для выполнения задачи данного агента. Алгоритм должен возвращать true, если сравниваемый ресурс unit1 предпочтительнее, чем ресурс unit2, а если наоборот, включая равенство при сравнении, то возвращается значение false). Алгоритм должен соблюдать транзитивность.
Тип значения: boolean
Локальные переменные:
Agent unit1 — первый ресурс для сравнения
Agent unit2 — второй ресурс для сравнения
T agent — текущий агент
Рейтинг ресурса
[Параметр виден, если Выбор ресурса: По рейтингу]
Значение рейтинга ресурса (чем больше значение, тем выше рейтинг). С помощью рейтинга производится выбор ресурса для выполнения операции текущего агента — выбирается ресурс с высшим рейтингом. Чаще всего здесь помещается алгоритм или вызов функции, производящей подсчет рейтинга с помощью имеющихся в распоряжении локальных переменных.
Тип значения: double
Локальные переменные:
T agent — агент
Agent unit — ресурс
Добавить объединенных агентов в
Здесь вы можете указать, куда будут помещены агенты, созданные этим блоком, в популяцию по умолчанию или в другую популяцию агентов, которую вы можете выбрать ниже.
Синтаксис: boolean addToCustomPopulation
Значение по умолчанию: популяцию по умолчанию ( false)
Популяция агентов
[Параметр виден, если Добавить объединенных агентов в: другую популяцию агентов]
Имя популяции агентов, куда будут помещены агенты, созданные этим блоком.
Тип значения: AgentList
Локальная переменная: T agent — агент, созданный в этом блоке
Включить сбор статистики
Блок содержит внутренние блоки, для которых собирается статистика. Если сбор статистики глобально отключен для всех блоков Библиотеки моделирования процессов с помощью блока PML Settings, то эта опция позволяет переопределить эту настройку и включить сбор статистики для этого конкретного блока. Иначе статистика собирается вне зависимости от этой настройки.
Синтаксис: boolean forceStatisticsCollection
Значение по умолчанию: false

Действия

При входе 1, 2, ..., 5
Код, выполняемый при поступлении агента в порт in1, in2, ..., in5.
Локальная переменная: T1, T2, ... T5 agent — агент.
При начале задержки
Код, выполняемый, когда агент поступает во вложенный блок delay.
Локальные переменные:
T agent — агент
double delayTime — время задержки, вычисленное для агента
При подходе к выходу
Код, выполняемый, когда время задержки для агента заканчивается и агент готов покинуть блок (если следующий блок свободен).
Локальная переменная: T agent — агент
При выходе
Код, выполняемый, когда собранный агент покидает блок.
Локальная переменная: T agent — агент
При приостановке задачи
[Параметр виден, если Правило вытеснения задач: Ожидать оригинал ресурса или Захватывать любой ресурс]
Код, выполняемый, когда задача агента приостановлена из-за этих правил вытеснения, когда его ресурс захватывается другой задачей с более высоким приоритетом.
Локальные переменные:
T agent — агент
Agent unit — ресурс
При возобновлении задачи
[Параметр виден, если Правило вытеснения задач: Ожидать оригинал ресурса или Захватывать любой ресурс]
Код, выполняемый, когда агент возобновляет выполнение своей задачи после того, как был приостановлен из-за этих правил вытеснения.
Локальные переменные:
T agent — агент
Agent unit — ресурс
При прекращении задачи
[Параметр виден, если Правило вытеснения задач: Прекратить обслуживание]
Код, выполняемый, когда агент теряет все ресурсы, полученные в этом блоке из-за правила вытеснения, когда один из наборов ресурсов (заданных в этом блоке Assembler) оказывается захваченным задачей с более высоким приоритетом.
Синтаксис: terminatedTasksEnter
Локальные переменные:
T agent — агент
Agent unit — ресурс, который запустил прекращение

Функции

Функция Описание
int queueSize(int n) Возвращает количество агентов в очереди с заданным номером.
Agent queueGet(int n, int index) Возвращает агента, находящегося в очереди с заданным индексом n в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).
int delaySize() Возвращает количество агентов во вложенном блоке Delay.
T delayGet(int index) Возвращает агента, находящегося во вложенном блоке Delay в позиции с номером index (самый "старый" агент находится в позиции с номером 0).
T remove(Agent agent) Извлекает агента agent из очереди и возвращает его. Если такого агента в очереди обнаружено не будет, функция вернет null.
T resume(Agent agent) Возобновляет работу ранее приостановленного блока (если он не был приостановлен, выдает ошибку).
T suspend(Agent agent) Приостанавливает работу блока.
double utilization() Возвращает средний коэффициент загрузки этого блока. Возвращаемое значение — среднее количество обслуженных агентов, собранное за какое-то время.
boolean isStatisticsCollected() Возвращает true, если блок собирает статистику.
void resetStats() Удаляет статистику, собранную на этот момент.
void recalculateResourceChoiceConditions(Agent agent) Заново проверяет условия выбора ресурсов для заданного агента, который сейчас находится в очереди этого блока. Эту функцию можно использовать, когда некоторые ресурсы, ранее недоступные для захвата конкретным агентом, возможно, стали доступными, поскольку условия изменились.
void recalculateResourceChoiceConditions() Заново проверяет условия выбора ресурсов для всех агентов, которые сейчас находится в очереди этого блока. Эту функцию можно использовать, когда некоторые ресурсы, ранее недоступные для захвата, возможно, стали доступными, поскольку условия изменились.

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

Queue queue1, queue2, queue3, queue4, queue5
Внутренние очереди.

Порты

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