

Push Protocol: the block will be pushed to the receiving block without any request. If not, then the agent stays where it is and the receiving block will try to get it again in the future when it’s able to receive something. If the receiving block is able to receive that agent, then the agent is sent. Pull Protocol: the block will notify the receiving block that there’s an agent ready to exit. The protocol applies to the block that is attempting to send the agent to the next block. In the default AnyLogic world, all the blocks use the pull protocol, with the exception of the blocks that are able to generate agents (for instance the source and enter blocks), which use the push protocol. When you connect two blocks in a discrete events model, you are basically generating a communication gateway for these blocks. And as agents do, the blocks communicate with each other.

You have a delay agent, a queue agent, etc. How does this happen? Well, first let’s acknowledge the fact that the blocks that you find in the Process Modeling Library are nothing but agents in disguise. The agent is in fact just an unanimated stone that is pushed and pulled around the process flow by the blocks themselves.

If you ask a beginner, the answer will come from pure intuition: “Well, if the agent is in a delay block and the delay time is over, the agent will just know that it has to move to the next block”. Simple right? But have you stopped for a moment to ask yourself why they are even moving? What is that thing that makes them move? You are developing your discrete events model, and you see your agents moving from one block to the next.
