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 vice-versa.
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 time-steps, 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 flows--and 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 information-feedback 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 information-feedback 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 behavior-over-time 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 real-world 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 still-to-be-defined 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 time-unit 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
wolves-sheep 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 predator-prey 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 self-reproducing 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.
· sheep-births = sheep-birth-rate * sheep
· sheep-deaths = sheep * predation-rate * wolves
· wolf-births = wolves * predator-efficiency * predation-rate * sheep
· wolf-deaths = wolves * wolf-death-rate.
(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.
· sheep-birth-rate = a fixed value, a fraction of the population per year
· wolf-death-rate = a fixed value, a fraction of the population per year
· predator-efficiency = a fixed value
· predation-rate = 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 still-to-be-defined 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.
· sheep-birth-rate = 0.4
· wolf-death-rate = 0.15
Define the predation rate and efficiency.
· predator-efficiency = 0.8
· predation-rate = 3.0E-4
“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 non-human 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 long-term 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 real-world 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 long-term 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 self-organising systems. The
concepts of complexity and self-organization 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 machine-level 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 real-world 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 non-linear 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 real-world 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 inter-stock 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/what-is-sd and https://lnkd.in/dJWsHwk
Agent-based models?
System Dynamics is based on modelling aggregates. Agent-based 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 predator-prey model: https://cloud.anylogic.com/#/model/a7018576-3735-4700-b963-9d95611730d7;mode=SETTINGS.
A predator prey agent-based model: https://cloud.anylogic.com/#/model/4f5ce51f-3003-46bb-88b1-d52e67f669e4;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 real-world
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 long-term effect of an event-driven 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.