Choosing a simulation method
Compare discrete-event, agent-based, and system-dynamics models by the questions each method answers best.
| Method | Model tracks | View | Good for |
|---|---|---|---|
| Discrete-event | Events, entities, queues, resources | Operational / process | Flow, waiting, capacity, schedules |
| Agent-based | Individual agents and interactions | Individual to system | Behavior, networks, adaptation, emergence |
| System dynamics | Stocks, flows, feedback, equations | Aggregate / strategic | Policy, feedback, long-term dynamics |
Choose the view that makes the important behavior easiest to build and check. You can combine model types later, but a single clear type is usually the best place to start.
Discrete-event simulation focuses on changes that occur at particular times: an entity arrives, service starts, a machine fails, a resource becomes available, or a job completes. Time can jump directly from one scheduled event to the next when nothing relevant happens between them.
It is a natural fit for operational processes involving queues, resources, routing, capacity, and delays.
Agent-based modeling starts with individual actors. Each agent has state and behavior, can interact with other agents or an environment, and may make local decisions. System-level patterns can emerge from many individual interactions even when no single agent directs the overall outcome.
Use it when people or objects differ from one another, who interacts with whom matters, or location and individual decisions change the result.
System dynamics takes an aggregate view. It represents accumulations as stocks, rates of change as flows, and causal feedback through equations and delays. Individual people or jobs are usually not modeled one by one.
Use it for questions about feedback, growth, depletion, delays, and totals changing over long periods.
A supply network might use a process model inside a warehouse, agents for independently behaving facilities, and stocks for long-term demand. Start with the main question and add another model type only when it represents something the first one cannot.