Forrester’s System Dynamics
Copyright 2017 Graham Berrisford. A
paper at http://avancier.website. Last updated 04/05/2021 16:07
This chapter discusses the system dynamics developed by Jay Forrester. It looks at other system theory concepts through the lens of system dynamics. It includes notes on methodology, converting continuous dynamics into discrete dynamics, and viceversa.
Contents
A System Dynamics method – In short
A System Dynamics method – in detail
Much as Ashby defined a system as a set of
variables chosen for attention, and relationships between those variables,
Forrester defined a system as a set of “stocks” chosen for attention, and the
“flows” between those variables, be they observed or envisaged.
A
stock can represent any kind of population or resource. E.g. wolf and sheep populations, happiness level, sunlight
level, or variables that affect climate change. A stock level is a variable
quantity that represents the amount of the stock, which is increased and decreased
by flows. A flow, connecting two stocks, represents how increasing one stock
increases or decreases another stock.
A negative or balancing feedback loop, where
growth in one stock tends reduce another, tends restore a system to a stable
state, regardless of the initial conditions.
Growth in 
Feedback loop 
Growth
in 
Predators 
decreasesà ßincreases 
Prey 
House prices 
decreasesà ßincreases 
Buyers 
A positive or reinforcing feedback loop
drives the two coupled populations or resources to extreme levels (barring some
natural limit or control from another direction).
Growth in 
Feedback loop 
Growth in 
Virus population 
ßincreases increasesà 
Infected people 
Polar ice cap 
ßincreases increasesà 
Reflected sunlight 
In a network of feedback loops, radically
different end states are possible from very similar initial conditions. This is
the defining feature of “chaos theory”.
Typically, the modeller begins by drawing a
causal loop diagram that names stocks (in nodes) and connects them by flows
(arrows). To show whether a flow increases or decreases
a stock, the modeller annotates the flow arrow with + or – sign. For examples,
see this introductory book https://bit.ly/3blcJaT.
A
causal loop diagram is only a sketch of a system's dynamics. The modeller can
go on to complete the system dynamics model by defining the mathematical rules
for how flows modify stock quantities. When completed, the model can be
animated. You can give the state variables some initial values, then set the
system in motion. Its state will change in discrete timesteps, and the result
can be reported on a graph showing
stock level changes over time (lines of behavior).
Note that Forrester’s system is an abstraction that represents “accumulations”.
“All systems, everywhere, consist of these two
kinds of concepts levels and flowsand none other. Such a statement is powerful in
simplifying our view of the world. A financial report is presented on two
different pages—the balance sheet and the profit and loss statement. All
numbers on the balance sheet are levels representing accumulations that
have evolved over time. The profit and loss statement represents the flows that
cause the levels to change.” Forrester 1996.
Stock
and flow models <create and animate> <represent> System modellers <observe and envisage> Accumulations
in reality 
Stocks are abstractions from accumulations of things or qualities. Flows are abstractions from whatever causes stocks to change state in the real word – be they continuous forces or discrete events.
When system dynamics is used to model the behavior of entities in the real world, you might think of there being two abstract system models and two physical systems.
·
Abstract
system A: passive: a causal loop diagram, a graphical overview of B below.
·
Abstract
system B: passive: a complete system dynamics model, with parameters and rules
for the animation in C below.
·
Physical
system C: dynamic: an animation, by computer or experimenter, that transforms
initial parameters into a report of state changes over time
· Physical system D: dynamic: things in
reality behaving near enough like C, though having inputs and outputs
not mentioned in C
“Systems of informationfeedback control are fundamental to all life and human endeavor, from the slow pace of biological evolution to the launching of the latest space satellite. . . . Everything we do as individuals, as an industry, or as a society is done in the context of an informationfeedback system.” Jay W. Forrester (as quoted by Meadows)
When stocks are connected by
causal flows, they can be thought of as exchanging state information.

Feedback loop 

Stock 
ßstate
information state informationà 
Stock 
Suppose stocks A and B are connected in a feedback loop by flows in both directions. The loop might be one of two kinds.
Kind of loop 
Short
term effect 
Long
term effect 
Positive, Amplifying or Reinforcing 
Increasing A increases B
increases A Chickens
<increase> Eggs <increase> Chickens 
The explosion or
exhaustion of a population or resource 
Negative, Dampening or Balancing 
Increasing A increases B
decreases A Sheep <increase>
Wolves <decrease> Sheep 
Maintains two variables
in a stable or homeostatic state 
Given positive feedback, where stock each reinforces changes in the other, radically different end states are possible from the same initial conditions. Given negative feedback, where each tends to offset any change in the other, the whole system tends move toward and then stay in a stable state, regardless of the initial conditions.
Forrester was concerned with entities
that can be modelled as having continuous dynamics. However,
there are alternative ways to model a system using discrete
dynamics.
SEE THE “DYNAMICS” CHAPTER
The trajectory of a stock’s level or quantity over
time is called a line of behavior. Knowing a system’s initial state and its
rules doesn’t tell you what direction a line of behavior will take, or when.
But given some initial values for stock levels, a software tool or experimenter can advance a system
dynamics model, time step by time step, and draw a graph
showing the lines of behavior (for each stock) over time.
Inputs
à 
System dynamics animated in a software tool 
à Output 
Initial stock quantities (state variable values) 
Flows change stock levels according to rules that refer to current stock levels 
As graph showing lines of behavior 
The graph may show
stocks are maintained in steady state, may grow or shrink dramatically, or be
exhausted so that the system grinds to a halt.
“Systems thinkers use graphs of system behavior to understand trends over time, rather than focusing attention on individual events. We also use behaviorovertime graphs to learn whether the system is approaching a goal or a limit, and if so, how quickly. The variable on the graph may be a stock or a flow. The pattern—the shape of the variable line—is important, as are the points at which that line changes shape or direction. The precise numbers on the axes are often less important.” (Meadows)
How to test the abstract system model is true or
useful? How accurately does it represent the
accumulations reality? Does it predict how realworld stocks, populations or
resources will change over time? The verification challenge is discussed
later.
A system dynamics model can be useful when it accurately represents the behavior of things in the real world – and how stocks, populations or resources change over time. However, there are many reasons what reality may turn out differently.
Dynamic systems studies usually are not designed to predict what will happen. Rather, they’re designed to explore what would happen, if a number of driving factors unfold in a range of different ways. (Meadows, chapter two)
Six essential
steps are outlined below. “Probably as good [a summary] as it gets at
this level of abstraction....” (Gene Bellinger)
Scope the system in
terms of quantities you care about
Define the state of your system as a collection of quantitative variables. You might think of each variable as the state variable of a small subsystem.
Draw a causal loop
diagram
Draw a diagram that shows every relationship between two quantities (or the same quantity) as a link arrow. Mark a link positive if the two quantities interact by changing in the same direction (both up or both down). Mark a link negative if the two quantities interact by changing in opposite directions (one up, one down).
Transform the causal
loop diagram into a stock and flow model
Draw a stock and flow diagram. Define the effect of one stock on another (or the same stock) as a flow rate that increases or decreases the stock in a given unit of time. Define all variables to be initialised before running the model. Review the structure and logic of the stock and flow model.
Initialise the model
Define how long each time step will be in the context of entity and model life times. Set the initial stock levels to whatever variable values you choose. Set any stilltobedefined flow rates to a fixed value or the result of a formula.
Run the model
Animate the system behavior by running the model forward one timeunit step at a time.
Review the results
and refine the model
See below.
System dynamics defines the state of a system as a
collection of quantitative variables. So, it can be applied to any situation
describable as quantities that can increase or decrease. A system dynamics model is composed from elements
of four kinds:
A stock is an aggregate’s level or amount: e.g. a stock level, a water volume (aka system state
variables).
A flow adds to a stock or subtracts from it.
A variable is a value used to calculate a stock level
or flow rate; it can be an equation that depends on other variables, or a
constant.
A link makes a value from one stock or flow available
to another stock or flow.
The method is elaborated and exemplified below. The simple
wolvessheep illustration comes from http://ccl.northwestern.edu/netlogo/docs/systemdynamics.html.
First, you identify something you care about, and can quantify. It could be pennies in a bank balance, human population, or the sum total of human happiness. Incrementally, you expand the system boundary to include whatever other quantities you recognise as affecting the ones you care about.
A predatorprey system is often used to illustrate the idea. The two variables we care about are total sheep in a flock, and total wolves in a pack. Both quantities will be increased and decreased by birth and death events. The wolves will deplete the flock of sheep by killing and eating them.
This is not a tutorial
on drawing causal loop diagrams, only an outline.
Consider each variable to be a quantity that is increased and decreased by events. Draw a diagram that shows every relationship between two quantities (or recursively in the case of selfreproducing entities). Mark a link positive if the two quantities interact by changing in the same direction (both up or both down), e.g. sheep population up, wolf population up. Mark a link negative if the two quantities interact by changing in opposite directions (one up, one down), e.g. wolf population up, sheep population down.
Now you have causal loop diagram. A feedback loop can be direct between two stocks, or indirect. Suppose we represent human happiness as a variable quantity.
· Happiness is increased by consumption of items in a food stock.
· The food stock is replenished by food item purchases.
· The food item purchases deplete a bank account.
· The bank account is replenished by payment per work hour.
· Work hours decrease happiness.
(This is silly example, but silly and profound models are equally buildable and runnable.)
This is not a tutorial
on stock and flow modelling, only an outline.
Draw a stock and flow diagram. Define the effect of one stock on another (or the same stock) as a flow rate that increases or decreases the stock in the given unit of time.
· sheepbirths = sheepbirthrate * sheep
· sheepdeaths = sheep * predationrate * wolves
· wolfbirths = wolves * predatorefficiency * predationrate * sheep
· wolfdeaths = wolves * wolfdeathrate.
(I imagine it is possible to simulate probabilistic flows by introducing random numbers into the mathematical expressions.)
Define all variables to be initialised before running the model.
· sheepbirthrate = a fixed value, a fraction of the population per year
· wolfdeathrate = a fixed value, a fraction of the population per year
· predatorefficiency = a fixed value
· predationrate = the result of a formula.
Review the structure and logic of the stock and flow model. Now you have a system dynamics model.
Define how long each time step will be in the context of entity and model life times. How long will each step take? One second? One hour? One year? Define this in the context of the natural life time of individual items in a quantity (say 2 years) and the expected life time of a simulation (say 50 years).
There can be delays between the internal steps in the model. E.g. the time between a stock input and the stock update. Such delays create can have a major impact upon the effects of feedback in the model. E.g. oscillations may move in or out of phase with one another causing amplification (in phase) or cancellation (out of phase) as the model evolves.)
Before you can run the model, you have to initialise it. Set the initial stock levels to whatever variable values you choose.
· Sheep flock = 100
· Wolf pack = 30
Set any stilltobedefined flow rates to a fixed value or the result of a formula. Set the natural birth and death rates to a fraction of the population per year.
· sheepbirthrate = 0.4
· wolfdeathrate = 0.15
Define the predation rate and efficiency.
· predatorefficiency = 0.8
· predationrate = 3.0E4
“System dynamics uses computer simulation models to reveal how known structures and policies often produce unexpected and troublesome behavior. The computer models are constructed from descriptive information that usually is already known. Such information relates to who is striving to do what, the information that each person has available, time delays in taking action, and what individuals will do under a variety of pressures. The same approach carries over to nonhuman systems in nature and physical change.” Forrester 1996
A computer can animate the system behavior by running the model forward one step at a time. The values of the system's variables change with each time step event exactly as your model defines. The longterm outcomes can be surprising. (See http://ccl.northwestern.edu/netlogo/docs/systemdynamics.html.)
A model of stocks and flows declares a theory of how some
part of the world works. How to prove or disprove the theory? Running a model
may give seductively interesting results, but does not prove that it models the
real world.
The ultimate test of a system dynamics model is that, when run, it mimics past and/or predicts future realworld behavior. If it fails to do that, then studying differences between the world and the model may help you recognise where the model is flawed or insufficient.
I have a slide show that explains the model of wolves predating sheep outlined above. It starts with a static model of individual entities and events, then incrementally abstracts from that a runnable system dynamics model. It shows slides of longterm outcomes from running the model.
It looks plausible, until I ask if anybody has noticed a flaw. The wolves survive by eating sheep; but the sheep live on thin air. Where are the stocks they depend on, of grass, sunlight and rain? And how to represent temperature? Do all sheep die by being eaten (rather than from other causes). Do all wolves eat only sheep (rather than other prey).
You can change anything – the stocks, the flows, the initial conditions, the rules – in an effort to modify the model incrementally until it passes some test of your choosing.
Some say a system
dynamics model shows us how complex behavior at the macro level can emerge from
simple behavior at the micro level. Some speak of selforganising systems. The
concepts of complexity and selforganization are discussed in
other chapters. This section makes only a few comments.
Size?
A system dynamics model can grow to be large; Gene Bellinger tells me one has 100,000 mathematical expressions. That sounds a lot but EA is about incredibly large and complex business activity systems. A software system may have millions or even billions of executable instructions. And what the programmer writes as one executable instruction may delegate work to many thousands of machinelevel instructions.
Complexity?
“System dynamics is an approach to understanding the behavior of complex systems over time. It deals with internal feedback loops and time delays that affect the behavior of the entire system. What makes it different from other approaches is the use of feedback loops, stocks and flows. These elements help describe how even seemingly simple systems display baffling nonlinearity.” Wikipedia
There is an ambiguity here, one which appears over and again in systems thinking discussions. Are we modelling complex systems or simple ones? Every realworld entity or situation we model is complex beyond our complete understanding. System dynamics gives us a way to model a complex world. The system in our model is massively simpler than the reality.
What can be baffling (surprising rather than complex) is that
when we run a simple model over time, the quantities in the model may
exponentially increase or decrease, zoom up or down in a nonlinear way, and
the system may exhaust some resource and stop completely. In other words, complexity of found not in the system
itself but in its lines of behavior.
The verification challenge
A causal loop diagram begins as a subjective “concept graph”. People draw such diagrams to illustrate an idea, present a belief, or tell a story. The diagram can be a good way express a hypothesis about the world. Still, it remains only a hypothesis until you complete a system dynamics model (or the differential equations that define the system dynamics) and verify it by testing.
How accurately does a system dynamics model represent reality? Does it predict how realworld stocks, populations or resources will change over time? Proving a model to be a usefully accurate model is very challenging.
First, it can be difficult to identify all the significant stocks and flows. You may have no obvious way to judge whether important stocks or flows have been omitted from the model. E,g, in modelling how the populations of wolves and sheep interact, you might omit the stock of grass on which the sheep depend.
Of course, no model of a natural, social and business system can be complete and perfect, because whereas the model is closed, the real world is open. However far we widen the scope of our model, we can never reach the edge of the real world.
Suppose you are confident you have identified all the important flows, and correctly annotated them with + and  signs. Still, the strength of those increase and decrease effects may be unclear.
You may define the interstock flow rules in mathematics, give every stock an initial quantity, and run a simulation to see how stocks rise and fall over time. Still, to prove that the model is accurate, you need to compare the result of the simulation with the result of some corresponding real world behavior, which may require a lot of time and effort.
Also, what you might assume is stable may change (e.g. global temperature, customer tastes, competitors' advertising, inflation, wages, share prices, exchange rates, government policy, and so on ad infinitum).
So, the further a model is run into the future, the more likely the model and reality will part company.
More on system dynamics http://systemdynamics.org/whatissd and https://lnkd.in/dJWsHwk
Agentbased models?
System Dynamics is based on modelling aggregates. Agentbased modelling tools can represent the existence of individual stock items as dots or icons on a screen, each representing one item of the total quantity.
A predatorprey model: https://cloud.anylogic.com/#/model/a701857637354700b9639d95611730d7;mode=SETTINGS.
A predator prey agentbased model: https://cloud.anylogic.com/#/model/4f5ce51f300346bb88b1d52e67f669e4;mode=SETTINGS.
An insight maker page on modelling: https://insightmaker.com/modeling.
Does this mean we
can build a continuous dynamics model of individual entities and events? As far as I know, the modelling of
individual stock items is limited to representing the units of a quantity as
icons on a screen. I suppose you could track some variables for each item, like
its life time in the software system, and current position on the screen. Modelling individual agents in the real world is different thing,
since it implies capturing qualitative characteristics of realworld
individuals and recognizing events in their lives  as a business information
system does.
Can system dynamics be useful in EA?
I haven’t met an architect who has applied system dynamics, so this section is speculative.
Might it be used to forecast changes in the volumes of stocks/populations (gas stocks, customer accounts) over the long term? Looking to optimise flow rates and use of resources, a business analyst might be able to use system dynamics to forecast the longterm effect of an eventdriven system on quantities of resources (queues, bottlenecks, hospital beds and nurses). Imagine a model in which the variables include the average delays between orders, deliveries and payments. Perhaps running the model will show it leads to a cash flow problem, a result of how money flows in and out of your account?
Perhaps, though it might require a degree of analysis beyond what can usually be achieved in practice.