HealTheWorldCausal loop model of world dynamics |
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.campaignTarget |
Value: 1 / 0.3 Type: Real Description: Target multiplier for the elasticity coefficient |
---|---|
campaignStart |
Value: 31556952 Type: Time (s) Description: Start time for the intervention |
campaignDuration |
Value: 94670856 Type: Time (s) Description: Duration of the intervention |
withIntervention |
Value: true Type: Boolean Description: = true, if there is to be a compaign to raise public awareness |
modelOutput |
Type: DataOutPort Description: Index levels for the model's stocks |
---|
modelSettings |
Type: ModelSettings Description: Setting important global variables within a model |
|
---|---|---|
societalAction |
Type: SimpleInformationLevel Description: Information level for CLD-like modeling |
|
environmentalLoad |
Type: SimpleInformationLevel Description: Information level for CLD-like modeling |
|
population |
Type: SimpleInformationLevel Description: Information level for CLD-like modeling |
|
consumption |
Type: SimpleInformationLevel Description: Information level for CLD-like modeling |
|
campaign |
Type: InputControl Description: Awareness campain as 'control' |
|
p1 |
Type: ExponentialChange Description: Exponential growth of the population |
|
r1 |
Type: Elasticity Description: Population growth is tightly coupled to increases in environmental load |
|
r2 |
Type: Elasticity Description: Societal action increases will slightly decrease population growth |
|
r3 |
Type: Elasticity Description: Increases in environmental load will slightly decrease population growth |
|
r4 |
Type: Elasticity Description: Societal action is tightly coupled to decreases in resource consumption |
|
r5 |
Type: Elasticity Description: Environmental load increase will rather strongly increase the level of resource consumption |
|
r6 |
Type: Elasticity Description: Growth in the environmental load will slightly increase growth of societal action |
|
r7 |
Type: Elasticity Description: Increases in the level of resource consumption will slightly increase population growth |
|
r8 |
Type: Elasticity Description: Increases in resource consumption are tightly coupled to increases in environmental load |
|
R1 |
Type: LoopIndicator_CW Description: consumption > environmentalLoad > consumption |
|
R2 |
Type: LoopIndicator_CW Description: population > environmentalLoad > consumption > population |
|
B1 |
Type: LoopIndicator_CCW Description: population > environmentalLoad > population |
|
B2 |
Type: LoopIndicator_CCW Description: population > environmentalLoad > societalAction > population |
|
B3 |
Type: LoopIndicator_CCW Description: population > environmentalLoad > societalAction > consumption > population |
|
lab1 |
Type: MatFlowIndicator Description: Directional indicator for material flows in a diagram |
|
indexInfo |
Type: StockInformation[4] Description: Index levels for the model's stocks |
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
.