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

Pickup

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

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

Если блок Pickup выбирает агентов в режиме Точное количество (ожидать), то к порту inPickup этого блока можно подсоединить не только блок Queue, но и любой другой.

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

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

  • 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 Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Параметры

Подбирать
Определяет режим помещения агентов из очереди Queue в агента-контейнер: должен ли блок извлекать Всех доступных агентов из очереди, либо их Заданное количество (если доступно), либо дожидаться, пока не наберется необходимое количество агентов (Точное количество (ожидать)), либо только тех агентов, для которых выполняется заданное условие (Пока выполняется условие).
Имя: pickupType
Изменить значение: set_pickupType(новое значение)
Значение по умолчанию: Pickup.BY_CONDITION (пока выполняется условие)
Допустимые значения:
Pickup.ALL — Всех доступных агентов
Pickup.QUANTITY — Заданное количество (если доступно)
Pickup_EXACT_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
Выходной порт.
Как мы можем улучшить эту статью?