4 min read
On this page

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

  1. Start with a reference mode — Sketch the expected behavior pattern (growth, oscillation, S-curve) before building the model
  2. Build incrementally — Start with one feedback loop, verify behavior, then add complexity
  3. Use dimensional analysis — Every equation must be dimensionally consistent (stocks in units, flows in units/time)
  4. Test extreme conditions — Set stocks to zero or very large values; behavior should remain physically plausible
  5. Document every equation — Record the reasoning behind each functional relationship