Pickup


Removes agents from a given Queue object and adds them to the contents of the incoming agent ("container"). The Queue object may be either connected to the inPickup port of Pickup or specified in the parameter queue (the latter has priority over connected object). When an agent arrives at in port, Pickup iterates through the contents of the queue and selects the agents according to the given mode, which can be: all agents, first N agents, agents for which the given condition is true. The whole operation takes zero time.

The pickup condition is evaluated when the agent is still in the queue, but On pickup action is called after the agent has been removed from the queue and added to the container.

Some examples of pickup condition:

true - all agents in the queue will be picked up

container.contents().size() < maxSize - at most maxSize first agents will be picked up. Here we access the agents currently contained in the agent-container using the container's function contents(). The current number of agents inside the container is obtained as container.contents().size()

agent instanceof Car & ((Car)agent).age < 3 - only cars younger than 3 years

Later on the added agents can be dropped off using the Dropoff object, or, with discarding the container agent, by Unbatch. Consider also using Batch instead of Pickup if you need just to group the agents.

Demo model: Pickup and Dropoff

Parameters

Pickup
Defines how the agents are selected to be picked up from the Queue object. You can set up this object to remove All available agents from the Queue, a Given quantity (if available), or remove agents for which the specified boolean condition is true (While condition is true).
Get value: pickupType
Set new value at runtime:
set_pickupTime(new value)
Valid values: While condition is true     -     Pickup.BY_CONDITION
                      Given quantity (if available) -  Pickup.QUANTITY
           
All available agents      -  Pickup.ALL
Condition [dynamic]
[Visible if agents are picked up While condition is true] Condition evaluated for each agent in the Queue to determine whether it should be picked up. The condition expression may depend on the contanter agent as well as on the "candidate" to be picked up.
Value type: boolean
Local variables: agent - the agent to be picked up
                          TContainer container - the container agent
Default value:   true - all agents are picked up
Quantity [dynamic]
[Visible if Given quantity (if available) of agents are being picked up] Expression evaluated to determine how many agents should be picked up.
Value type: int
Local variable: TContainer container - the container agent
Pick from
Choose here how you specify the Queue block storing the agents to be added into the agent-container.
You can set the block to pick agents from the Queue connected to the port (namely, to the lower inPickup port), or from the Specified Queue object (in this case you specify the block in the Queue object field below).
Syntax: boolean queueIsConnectedToPort
Queue object [dynamic]
[Visible and applies only if the option Pick from is set to Specified Queue object] The Queue block from which the agents will be picked up. If specified, has priority over the connected Queue block graphically connected to the inPickup port.
Value type: Queue
Local variable: TContainer container - the container agent
Advanced
Forced pushing
If the option is selected (true), when agents finish processing at the block, they are instantly pushed further regardless the state of the succeeding block.
If the option is not selected, agents are not pushed, but pulled: only when the succeeding block is ready to accept one more agent, it requests the agent from this block, and only then this agent passes further.
Syntax: boolean pushProtocol
Default value: false
Actions
On enter [code]
Code executed when the container enters this block.
Local variable: TContainer container - the container agent
On pickup [code]
Code executed for each agent that is removed from the queue and added to the container.
Local variables: agent - the agent being picked up
                          TContainer container - the container agent
On exit [code]
Code executed when the container exits this block.
Local variable: TContainer container - the container agent

Ports

in
The input port.
inPickup
The input port that should be connected to the out port of a Queue object. The port can be left unconnected if the Queue block is specified in the properties of this Pickup block (the option Pick from is set to Specified Queue object).
out
The output port.