Many processes can be standardized and a library of atomic processes can be created. In process models one creates a set of agents or entities and models their flow through a network of processes. The network features several streams. Each stream starts at "Create" and ends at "Finalize". Multiple streams may synchronized, they may be created also a result of one stream through "Clone" or merged to one stream using "Merge".
Create - creates new entities (0:1)
Finalize - finalizes the entities (1:0)
Queue - puts entities into a queue (1:1)
Delay - delays entities for some time (1:1)
Attach - request resources and attach them (1:1)
Detach - free resource requests and detach them (1:1)
Collect - combine multiple entities into one collection entity (1:1)
Dispense - dispenses the collection entity (1:1)
Clone - creates one or multiple copies of an entity (1:n)
Merge - creates a new entity based on a number (n:1)
Distribute - select the next process based on some strategies (round-robin, custom) (1:1)
Sync - uses n streams of entities and synchronizes them (n:n)
Collect and dispense are 1:1 because entity collection would also be a sub-type of entity. The resources in Sim# are not subclasses of one common class. Some abstraction must be created that hides the used resource type.
The processes should feature event handlers such as OnEnter, OnExit to allow collecting statistics or perform other manipulation to the entity instance.
There is a DES library for the R language, called simmer, based around this very concept. They call the streams that entities flow through 'trajectories' and there is a nice paper about it that you be interested in reading.
Many processes can be standardized and a library of atomic processes can be created. In process models one creates a set of agents or entities and models their flow through a network of processes. The network features several streams. Each stream starts at "Create" and ends at "Finalize". Multiple streams may synchronized, they may be created also a result of one stream through "Clone" or merged to one stream using "Merge".
Collect and dispense are 1:1 because entity collection would also be a sub-type of entity. The resources in Sim# are not subclasses of one common class. Some abstraction must be created that hides the used resource type.
The processes should feature event handlers such as OnEnter, OnExit to allow collecting statistics or perform other manipulation to the entity instance.