I started my career in simulation building process-based models. That is, of course, a classic approach to simulation modeling, and it generally worked pretty well for the manufacturing applications that I was involved with. Fabrication and assembly work flows to often map very nicely to processes in a simulation model.
Except when they don’t.
I found the process-based model began breaking down when work flows and/or resource allocation are more dynamic and adaptive. Perhaps a particular job can be performed using a number of different configurations of equipment and people, the choice depending on the other work being performed at that time. Perhaps crew members are assigned and reassigned, in varying numbers, to jobs as they enter a shop or as other jobs are completed. This type of dynamic resource allocation problem is applicable to other domains as well – think of a hospital emergency department, for example.
What we are trying to model in these cases, are flexible systems managed through near real time (and often human) decision making. These systems can, to at least some extent, be modeled through a process-based approach, but it is often difficult and awkward. I would usually find myself creating phantom supervisory processes, running for the entire simulation, which monitored the model state and allocated resources accordingly. This kind of approach required synchronization between the supervisory and “real” processes (the ones representing actual work), which generally got really ugly, really fast. The available modeling constructs were often just not designed for that.
The problems I am describing would seem to lend themselves to an actor or agent-based modeling approach, in which decision-making agents are the primary simulation entities. I, however, would prefer a hybrid approach, making room for both processes and agents within a single model. This allows a model to develop and evolve more naturally. I might, for example, start with a simple process-based model, adding more complex resource allocation algorithms via agents later. One of my original goals was to create a simulation framework that supports these kinds of models. How to do that is not an insignificant challenge; I’ll be discussing some ideas down the line.