This information is part of the Business Simulation Library (BSL). Please support this work and ► donate.
Using the classes in the →CausalLoop
package we can quickly start out with a model that captures the
important dynamics in a system. This simplified model of world
dynamics is given by Hartmut Bossel [25] who
reduces the world system to four main variables indicating the
state of the world: population, consumption,
environmental load, and societal action.
These states or stocks may be initialized with
a value of 1.0 representing the respective current
level, i.e., an index. In the next step, we must identify
direct causal influences between the model variables,
i.e., a change in A will affect B (A → B). To more
precisely capture the dynamics of the system we may ask ourselves
for any impact: If A increases by r_A
percent, what will be the fractional rate
(r_B) of change for B?. The elasticity
coefficient is simply the factor of proportionality between
the fractional rates and we can use it to embedd the stocks in a
dynamic model of impact as shown in the diagram below.
![]() |
For example, we state that a change in the level of the world
population will affect a change in the level of
environmentalLoad and that the polarity for
this relation is positive, i.e., an increase will
cause an increase and, conversely, a decrease
will cause a decrease. We further assume the percentage
change in the level of environmentalLoad to be
equivalent to that in the population and accordingly
we have set coefficient = +1.0 for the relation
(r1) between the two stocks.
The elasticity coefficient for the impact of
societalAction upon the level of
consumption is set to -1.0, which
indicates that any fractional increase in societal
action will cause a decrease in consumption at
the same fractional rate.
Since all dynamics in a model are solely driven by relative changes, the model is in equilibrium initially, i.e., there will be no dynamics. Two typical questions are of interest in using such a model:
In this example, we will assume that the population
will grow exponentially during the next 10 years at a fractional
rate of 1% per year. As a potential intervention, we
are considering a public awareness campaign that will start one
year into the simulation and last for three years. In the model the
intervention (campaign) will affect the elasticity
coefficient for the impact of environmentalLoad upon
societalAction, which in the base run settings is
+0.3. The effect upon the coefficient is modeled as a
multiplication; campainTarget = 1/0.3 implies
that at the end of the intervention the elasticity coefficient will
have risen to a value of +1.0—tightly coupling
societalAction to environmentalLoad.
The simulation results for the base run (without intervention) and the policy run (with intervention) are shown in the plots below:
While this, of course, is a toy model, system dynamics modelers coming from other tools may take a moment to reflect upon the following:
B1)between
population and environment introduces a
cycle with regard to variables that are not stocks (e.g., rates of
flow to the stocks); the compactness of modeling that we see here
is possbile, because Modelica allows algebraic next to
differential equations(→DAE).population
and connect it to consumption without having to change
anything else in the model.| Name | Description |
|---|---|
| Parameter definitions for the Base Case |
campaignStart from
min attribute to assert statement to
guarantee that attribute values are presented in evaluated form
(e.g., as structural parameter values);
modelSettings.modelStartTime has fixed =
false.