Pickup


Удаляет агентов из заданного объекта Queue и добавляет их к содержимому поступающего агента-контейнера. Объект Queue может быть задан как графически, путем соединения его порта out с портом inPickup этого объекта Pickup, так и с помощью параметра Объект Queue (в случае одновременого использования обоих способов агенты будут извлекаться из объекта, указанного в параметре).

По прибытии агента в порт in объект Pickup просматривает в цикле агентов, содержащихся в очереди объекта Queue и выбирает оттуда агентов согласно выбранному в параметре Подбирать режиму: либо Всех агентов из очереди, либо первые N агентов (Заданное количество (если доступно)), либо только тех агентов, для которых выполняется заданное Условие. Вся операция занимает нулевое время.

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

Приведем некоторые примеры условия выбора агентов:

true - из очереди будут извлечены все агенты

container.contents().size() < maxSize - будут извлечены не более maxSize первых агентов. Здесь мы получаем доступ к текущему содержимому агента-контейнера с помощью функции агента-контейнера contents(). Количество хранящихся в контейнере агентов, соответственно, узнаем с помощью функции size(): container.contents().size()

agent instanceof Cat & ((Cat)agent).age < 3 - только коты не старше 3 лет

Впоследствии вы можете извлечь агентов из агента-контейнера либо с помощью объекта Dropoff, либо (если при этом нужно будет удалить самого агента-контейнер) - с помощью Unbatch. Если же вам нужно просто группировать ваших агентов, то, возможно, удобнее будет использовать для этого не Pickup, а Batch.

Демо модель: Pickup and Dropoff

Параметры

Подбирать
Определяет режим помещения агентов из очереди Queue в агента-контейнер: должен ли объект извлекать Всех доступных агентов из очереди, либо их Заданное количество (если доступно), либо только тех агентов, для которых выполняется заданное Условие (Пока выполняется условие).
Имя: pickupType
Изменить значение: set_pickupType(новое значение)
Значение по умолчанию
: Пока выполняется условие (Pickup.BY_CONDITION)
Допустимые значения: Pickup.ALL, Pickup.QUANTITY, Pickup.BY_CONDITION
Условие [динамический]
[Виден, если у параметра Подбирать выбрана опция Пока выполняется условие] Условие, вычисляемое для каждого агента в очереди и определяющее, должен ли данный агент быть помещен в агента-контейнер. Условие может зависеть как от агента-контейнера, так и от содержащихся в очереди агентов - "кандидатов" на добавление.
Тип значения: boolean
Локальные переменные: T agent - агент-"кандидат" на добавление в контейнер.
TContainer container - агент-контейнер.
Значение по умолчанию: true (в контейнер будут помещаться все агенты)
Количество [динамический]
[Виден, если у параметра Подбирать выбрана опция Заданное количество (если доступно)] Выражение, возвращающее количество агентов, которое должно быть помещено в агента-контейнер (если в очереди Queue будет содержаться такое количество агентоов).
Тип значения: int
Локальная переменная: TContainer container - агент-контейнер.
Значение по умолчанию: 1
Забрать из
Выберите способ задания блока-очереди Queue, из которого будут выбираться агенты для помещения в агент-контейнер: агенты могут выбираться либо из Соединенного с портом блока Queue, либо из Указанного блока Queue (в последнем случае блок задается в расположенном ниже параметре Блок Queue).
Синтаксис: boolean queueIsConnectedToPort
Блок Queue [динамический]
[Параметр виден и применим только если в параметре Забрать из выбрана опция Указанного блока Queue] Блок Queue, из которого будут подбираться агенты. Если блок будет указан, то он будет иметь приоритет над блоком Queue, графически соединенным к порту inPickup.
Тип значения: Queue
Локальная переменная: TContainer container - агент-контейнер.
Специфические
Выталкивать агентов
Если опция выбрана (true), то агенты, созданные этим блоком, будут немедленно вытолкнуты дальше независимо от состояния следующего блока.
Если опция не выбрана, агенты будут не выталкиваться, а выходить постепенно: только когда следующий блок готов принять еще одного агента, он запрашивает еого у этого блока, и тогда агент проходит дальше.
Синтаксис: boolean pushProtocol
Значение по умолчанию: false
Действия
При входе [код]
Код, выполняемый, когда агент-контейнер поступает в объект.
Локальная переменная: TContainer container - агент-контейнер.
При подборе [код]
Код, выполняемый для каждого агента, извлекаемого из очереди Queue и добавляемого в агент-контейнер.
Локальные переменные: T agent - добавляемый в контейнер агент.
TContainer container - агент-контейнер.
При выходе [код]
Код, выполняемый, когда агент-контейнер покидает объект.
Локальная переменная: TContainer container - агент-контейнер.

Порты

in
Входной порт.
inPickup
Входной порт, который должен быть соединен с портом out объекта Queue. Порт может быть оставлен несоединенным, если блок Queue задается в свойствах блока (выбрана опция Забрать из: Указанного блока Queue).
out
Выходной порт.