Skip to Main Content
This paper documents a simulation engine developed to accurately and efficiently simulate work by multiple agents in complex dynamic systems. Agents (human or mechanical) are modeled as responding to, and changing, their environment by executing the actions that get and set the value of resources in the environment. Each action comprises the processes that need to be evaluated at the same time by the same agent, which are used to reference (get) resources, consider them according to simple or complicated processes, and then interact back on the environment by setting resources appropriately. This paper specifically addresses timing within the simulation. The simplest approach would update all actions at the smallest unit of conceivable time, an approach that is not only computationally inefficient, but also not an accurate representation of situated behavior. Instead, every action declares its next update time as required to accurately model its internal dynamics and the simulation engine executes them asynchronously. Thus, an action and the resources it “gets” from the environment are not inherently contemporary; instead, each action also specifies, for each resource value that it gets, the quality of service required in terms of its temporal currency. This reflects dynamics of the real processes being simulated: when, in actual operations, would the environment be sampled, and how accurately must its state be known? Additionally, this also reflects dynamics of environmental resources how often (or how fast) does each inherently change? Using these constructs, the list of actions to be simulated are sorted by the simulation engine according to their next update time. Each action, when its time comes, is given to their agent model to be executed, and then is sorted back into the action list according to its self-reported next update time. Thus, actions are each updated when they need to be. In situations where, for example, action Y needs to get a re- - source which, because action X has not set it recently, does not meet action Ys required Quality of Service. The simulation engine will invoke action X immediately before action Y, mimicking cases in the real system where one process calls on another to establish the conditions it needs. The presented simulation engine is a complete redevelopment, designed and written from scratch at the Cognitive Engineering Center at the Georgia Institute of Technology.