The world around us appears to be “continuous”: the greater majority of processes we observe consist of continuous changes. However, when we analyze those processes, in many cases it makes sense to abstract from their continuous nature and consider only some “important moments”, “events” in the system lifetime. The modeling paradigm that suggests to approximate the real-world processes with such events is called Discrete Event Modeling. (The term Discrete Event is also used in the narrower sense to denote “process-centric” modeling where the system is described as a process flowchart.) Discrete Event modeling is fully supported by AnyLogic as well as System Dynamics and Agent Based Modeling.
Here are some examples of events: a customer arrives at a shop, a truck finishes unloading, a conveyor stops, a new product is launched, the inventory level reaches a certain threshold, etc. In discrete event modeling the movement of e.g. a train from point A to point B would be modeled with two events: departure and arrival, and the actual movement will become a time delay (interval) between them. (This does not mean however that you cannot animate the train as moving, in fact in AnyLogic you can produce visually continuous animations for logically discrete models).
Event in AnyLogic model (which as you know is an abstraction) takes zero time to execute, is atomic (will not interfere with any other event execution), may change the model when it is executed, in particular may schedule other events. If AnyLogic engine is executing a purely discrete model, the time is essentially a sequence of events, and the engine just jumps from one event to another. If several events are scheduled to occur at the same time (are simultaneous), they are serialized, i.e. executed one after another in some internal (not guaranteed) order. If the order is important for you, you should take care of it when developing the model so that the simulation results do not depend on the engine implementation.
At the low level (at the level of AnyLogic modeling primitives) events may be scheduled by two types of objects: events and statecharts. There is however, a library of higher-level objects that help you to create discrete event patterns frequently used in process-centric modeling (queuing, resource usage, agent generation, etc.) — it is called Process Modeling Library.
How can we improve this article?