6
$\begingroup$

I'm specifically interested in the most recent World3-03 model from 2004. I was just wondering if someone knows how they actually derive their model or any of their predictions? I couldn't find any mathematical description of their model? Book made a big splash but I naturally grow nervous when I don't find any equations attached to a model. Thanks guys!

$\endgroup$
6
  • 1
    $\begingroup$ Supposedly, the model is described in the 1974 book "Dynamics of Growth in a Finite World." This thesis discussing the model might be useful. $\endgroup$ Feb 23 at 13:46
  • 1
    $\begingroup$ aru.figshare.com/articles/software/World3-03_Edited/11341697 $\endgroup$
    – AKdemy
    Feb 23 at 20:04
  • $\begingroup$ Thanks for the links! The linked thesis is extremely helpful. I love how a grad student is better at describing the model than a bunch of MIT people in their 2004 book. It's just words there $\endgroup$ Feb 23 at 21:25
  • $\begingroup$ if the old world 3 (not just 3-03) is also interesting (my link has the model and code for 3-03 but it is hard to read, at least for me)., you can look at this python implementation of Model 3. It is well documented from what I saw looking at bits and pieces. $\endgroup$
    – AKdemy
    Feb 23 at 21:48
  • 1
    $\begingroup$ I got curious an tried the Python version on my end. It runs smoothly. world3.py explains all the params, and the constants and their unit are defined in the documentation of the corresponding sectors. $\endgroup$
    – AKdemy
    Feb 23 at 22:10

2 Answers 2

5
$\begingroup$

Not directly answering the Model3-03, which is an evolution of the original Model3. The newer version is available here: aru.figshare.com/articles/software/World3-03_Edited/11341697 (not Python). I think .mdl is an old simulink (matlab) file but if you just want to see the equations, you can look at the excel file (for the historical parameters used in calibrating the model), and load the .mdl file in a texteditor or vs code / sublime.

enter image description here

Not as neat as having a nice document that explains the equations, but doable I suppose.

In case you (or someone) want to try the Python version, the below may potentially speed up the progress, especially if you are not too familiar with Python.

from pyworld3 import World3
import matplotlib.pyplot as plt

from pyworld3 import World3
from pyworld3.utils import plot_world_variables

choose the time limits and step:

  • year_min: start year of the simulation, default is 1900.
  • year_max: end year of the simulation, default is 2100.
  • dt: time step of the simulation, default is 1.
  • pyear: implementation date of new policies, default is 1975.
  • iphst : implementation date of new policy on health service time, default is 1940
  • verbose : bool, optional to print information for debugging. The default is False
    world3 = World3(year_min = 2000,year_max = 2200, dt=1, pyear = 1975, iphst = 1960,  verbose = False )

set all initial values: See the details about in the documentation of each sector (some selected details are commented here).

world3.init_world3_constants(p1i=92e7, # for example  initial [persons]. The default is 65e7
                         p2i=70e7, p3i=19e7, p4i=6e7,
                          dcfsn=3,  # desired completed family size normal. The default is 4.
                         fcest=4000, hsid=20, ieat=3, 
                         len=42, # life expectancy normal. default is 28 
                          lpd=20, mtfn=12, pet=4000, rlt=30, sad=20,
                          zpgt=4000, ici=2.1e11, sci=1.44e11, iet=4000, 
                          iopcd=400,lfpf=0.75, lufdt=2, icor1=3, icor2=3, 
                          scor1=1, 
                          scor2=1, alic1=14, alic2=14, alsc1=20, alsc2=20,
                          fioac1=0.43, fioac2=0.43,
                          ali=0.9e9, pali=2.3e9, lfh=0.7, palt=3.2e9,
                          pl=0.1, alai1=2, alai2=2, io70=7.9e11, lyf1=1,
                          lyf2=1, sd=0.07, uili=8.2e6, alln=6000, uildt=10,
                          lferti=600, ilf=600, fspd=2, sfpc=230,
                          ppoli=2.5e7, ppol70=1.36e8, ahl70=1.5, amti=1,
                          imti=10, imef=0.1, fipm=0.001, frpm=0.02,
                          ppgf1=1, ppgf2=1, ppgf21=1, pptd1=20, pptd2=20,
                          nri=1e12, nruf1=1, nruf2=1)

initialize the variables and use existing Json file (None uses default)

world3.init_world3_variables()       # initialize all variables.
world3.set_world3_table_functions(json_file=None)  # get tables from a json file (None uses default).

you have two choices for the delay fct: euler" or "odeint". The default is "euler".

world3.set_world3_delay_functions(method='euler')  # initialize delay functions.

run the model

world3.run_world3()

plot details as you wish

plot_world_variables(world3.time,
                     [world3.nrfr, world3.iopc, world3.fpc, world3.pop,
                      world3.ppolx],
                     ["NRFR", "IOPC", "FPC", "POP", "PPOLX"],
                     [[0, 1], [0, 1e3], [0, 1e3], [0, 16e9], [0, 32]],
                    # img_background="./img/fig7-7.png",
                     figsize=(12, 8),
                     title="World3 Akdemy run")

Output:

  • default enter image description here

If you overlay the original Model3 result you can see it is literally identical. enter image description here

  • my (arguably randomly) modified parameters

enter image description here

You can also pull individual sectors:

plot_world_variables(world3.time,
                     [world3.ly, world3.al, world3.fpc, world3.lmf,
                      world3.pop],
                     ["LY", "AL", "FPC", "LMF", "POP"],
                     [[0, 4e3], [0, 4e9], [0, 8e2], [0, 1.6], [0, 16e9]],
                     #img_background="./img/fig7-9.png",
                     figsize=(12, 8),
                     title="World3 standard run - Agriculture sector")

enter image description here

$\endgroup$
1
  • 2
    $\begingroup$ This is great thanks for digging in! I'll leave the question up until the end of the week or so just to see if anyone is able to track down the -03 model with equations, otherwise I'll accept yours as answer :) $\endgroup$ Feb 24 at 16:34
1
$\begingroup$

There is a description of basic parts of World3-3 model in Mathematical Modeling by Stefan Heinz on pp 280-285.

According to the author at the heart of the model there is following logistic growth equation:

$$\frac{dP}{dt} = \frac{1}{\tau}\left( 1 - \frac{M}{K-L} \right) (P-L) $$

where $P$ is population, $\tau$ is the 'characteristic time scale', $K$ is carrying capacity, $L$ is lower bound for population so that $P(-\infty)=L$, $M$ is memory loss function.

$$M=\int_{-\infty}^t \mu ( t - s) \left( P(s)- L \right) ds$$

here $\mu ( t - s)$ is a memory function that has to be defined in some way. For example, one possible formulation is:

$$ \mu ( t - s) = \frac{1}{\tau_M} \exp \{ \frac{-|t-s|}{\tau_M} \}$$

The above is shared by World3 1-4, now for World3-3 specifically it is assumed that:

$$ \frac{dK}{dt} = \theta (t-t_k) \frac{K-P}{\tau_K}$$

The above is of course birds eye view of the main parts of the model. Actual simulation of World3-3 can reportedly include around 150 equations (since for example carrying capacity of earth depends on many factors). However, the above is the description of main parts of the model. There are more details in Heinz's book.

$\endgroup$
1
  • 1
    $\begingroup$ Thanks that's exactly the level of overview that I thought was missing from the book! The reference looks great $\endgroup$ Feb 26 at 15:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.