System Dynamics
Overview
System dynamics models systems as networks of stocks (accumulations) and flows (rates of change), connected by feedback loops. Developed by Jay Forrester at MIT in the 1950s, it excels at modeling systems where feedback, delays, and nonlinearity create counterintuitive behavior.
System dynamics operates at an aggregate level — it models populations, not individuals. This makes it complementary to agent-based modeling.
Stocks and Flows
Stocks are quantities that accumulate over time: inventory, population, money in an account, water in a reservoir. Mathematically, a stock S evolves as:
dS/dt = inflow(t) - outflow(t)
S(t) = S(0) + ∫₀ᵗ [inflow(τ) - outflow(τ)] dτ
Flows are rates: births per year, dollars per month, liters per second. Flows fill or drain stocks.
inflow outflow
──────►[████████]──────►
Stock S
STRUCTURE Stock
value: real
PROCEDURE UPDATE_STOCK(stock, inflow, outflow, dt)
stock.value ← stock.value + (inflow - outflow) * dt
IF stock.value < 0.0 THEN stock.value ← 0.0 // physical constraint
// SIR epidemic as stocks and flows
STRUCTURE SirModel
susceptible: real
infected: real
recovered: real
beta: real // contact rate * transmission probability
gamma: real // recovery rate (1 / average duration)
PROCEDURE STEP(model, dt)
n ← model.susceptible + model.infected + model.recovered
infection_flow ← model.beta * model.susceptible * model.infected / n
recovery_flow ← model.gamma * model.infected
model.susceptible ← model.susceptible - infection_flow * dt
model.infected ← model.infected + (infection_flow - recovery_flow) * dt
model.recovered ← model.recovered + recovery_flow * dt
Causal Loop Diagrams (CLDs)
CLDs capture the qualitative feedback structure before building a quantitative model.
- Positive link (+): A increase causes B to increase (or A decrease causes B to decrease)
- Negative link (-): A increase causes B to decrease
Population ──(+)──► Births
▲ │
└──────(+)─────────┘
(Reinforcing loop R)
Population ──(+)──► Deaths
▲ │
└──────(-)─────────┘
(Balancing loop B)
Reading Loop Polarity
Count negative links in the loop:
- Even number (or zero) of negative links → Reinforcing (R) loop → exponential growth or collapse
- Odd number of negative links → Balancing (B) loop → goal-seeking, oscillation, or equilibrium
Feedback Loops
Positive (Reinforcing) Feedback
Amplifies change. Examples:
- Compound interest: more money → more interest → more money
- Word of mouth: more users → more recommendations → more users
- Arms race: more weapons by A → more weapons by B → more weapons by A
Unchecked reinforcing loops produce exponential growth or collapse.
Negative (Balancing) Feedback
Counteracts change, driving toward a goal. Examples:
- Thermostat: temperature gap → heating → reduced gap
- Inventory management: shortage → increased orders → replenished stock
- Predator-prey: more prey → more predators → fewer prey
Delays
Delays in feedback loops cause oscillation and overshoot. A supply chain with ordering delays will oscillate around the target inventory rather than smoothly converging.
Material delay (pipeline):
Outflow at time t = Inflow at time (t - delay)
Information delay (exponential smoothing):
dPerceived/dt = (Actual - Perceived) / delay_time
System Archetypes
Recurring feedback structures that produce common behavioral patterns:
Limits to Growth
A reinforcing loop drives growth, but eventually a balancing loop engages a constraint.
- Growth slows, peaks, potentially declines
- Example: product adoption hitting market saturation
Shifting the Burden
A symptomatic fix weakens the fundamental solution.
- Short-term relief undermines long-term capacity
- Example: overtime masking the need to hire
Tragedy of the Commons
Multiple agents exploit a shared resource, each benefiting individually while depleting the commons.
- Individual rational behavior leads to collective disaster
- Example: overfishing, overuse of shared infrastructure
Fixes that Fail
A fix produces unintended side effects that worsen the original problem after a delay.
- Example: pesticide use → resistance → more pesticide needed
Growth and Underinvestment
Growth approaches a limit that could be raised by investment, but investment is not made until performance drops.
- Example: infrastructure not expanded until congestion is severe
Forrester Diagrams (Stock-Flow Diagrams)
The quantitative counterpart of CLDs. Standardized notation:
┌─────┐
│Stock│ ← Rectangle (accumulation)
└──┬──┘
│
◄──┤──► ← Valve/flow regulator (hourglass shape)
│
───┘ ← Pipe (flow channel)
(cloud) ← Source or sink (boundary of model)
────○──── ← Information link (dashed arrow with circle)
Simulation Mechanics
System dynamics models are systems of ODEs solved by numerical integration.
Euler Integration
Simplest method; adequate for many SD models:
S(t + dt) = S(t) + dS/dt · dt
Runge-Kutta (RK4)
More accurate; recommended when dynamics are fast or nonlinear:
PROCEDURE RK4_STEP(f, t, state, dt) → new_state
n ← LENGTH(state)
k1 ← f(t, state)
s2 ← array: FOR i ← 0..n-1: state[i] + 0.5 * dt * k1[i]
k2 ← f(t + 0.5 * dt, s2)
s3 ← array: FOR i ← 0..n-1: state[i] + 0.5 * dt * k2[i]
k3 ← f(t + 0.5 * dt, s3)
s4 ← array: FOR i ← 0..n-1: state[i] + dt * k3[i]
k4 ← f(t + dt, s4)
RETURN array: FOR i ← 0..n-1:
state[i] + dt/6 * (k1[i] + 2*k2[i] + 2*k3[i] + k4[i])
Time Step Selection
- dt should be small relative to the shortest time constant in the model
- Rule of thumb: dt ≤ (shortest delay or time constant) / 4
- Halve dt and compare results to check numerical stability
Applications
Population Dynamics
Model birth, death, migration, age cohorts. Study demographic transitions, aging societies, workforce availability.
Supply Chain Management
Inventory stocks, order flows, production delays, demand forecasting. The beer game demonstrates the bullwhip effect — order amplification through the chain.
Policy Analysis
Model policy interventions (taxation, regulation, subsidies) and their long-term consequences including unintended feedback effects. Used for climate policy, healthcare policy, urban planning.
Business Strategy
Market share dynamics, capacity expansion, R&D investment, technology adoption curves. Capture reinforcing effects of learning curves and network externalities.
Resource Management
Renewable resource depletion (fisheries, forests), pollution accumulation and remediation, energy transition pathways.
Strengths and Limitations
Strengths:
- Captures feedback and delay effects that spreadsheet models miss
- Forces explicit articulation of causal assumptions
- Accessible to stakeholders through visual stock-flow diagrams
- Computes quickly (small ODE systems)
Limitations:
- Aggregate — cannot represent individual heterogeneity
- Requires continuous approximation of discrete processes
- Structural assumptions baked into diagram topology can be hard to validate
- Nonlinearity in table functions is opaque compared to explicit equations
Modeling Best Practices
- Start with a reference mode — Sketch the expected behavior pattern (growth, oscillation, S-curve) before building the model
- Build incrementally — Start with one feedback loop, verify behavior, then add complexity
- Use dimensional analysis — Every equation must be dimensionally consistent (stocks in units, flows in units/time)
- Test extreme conditions — Set stocks to zero or very large values; behavior should remain physically plausible
- Document every equation — Record the reasoning behind each functional relationship