HealTheWorld

Causal loop model of world dynamics

Diagram

Information

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.

DiagramView
ModelDiagram.png

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:

  • What will happen if there is some exogenous impact to one or more system states?

  • If the system turns out to be instable,i.e., grow or deteriorate without bounds, what can be done?

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:

Simulation Plots
Graphs.svg

Notes

While this, of course, is a toy model, system dynamics modelers coming from other tools may take a moment to reflect upon the following:

  • This model fits a single page and has just four stocks—how would this model look in conventional system dynamics tools?

  • The causal loop (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).

  • Finally, we also see the improved reusability of object-oriented models at work when we consider that we may simply remove the exponential growth process from population and connect it to consumption without having to change anything else in the model.

See also

SoftwareReleaseProject

Parameters (4)

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

Connectors (1)

modelOutput

Type: DataOutPort

Description: Index levels for the model's stocks

Components (22)

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

Revisions

  • Added in v2.0.0.

  • Moved check for 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.