<p>There is a description of basic parts of World3-3 model in <a href="https://link.springer.com/book/10.1007/978-3-642-20311-4" rel="nofollow noreferrer">Mathematical Modeling
by Stefan Heinz</a> on pp 280-285.</p>
<p>According to the author at the heart of the model there is following logistic growth equation:</p>
<p><span class="math-container">$$\frac{dP}{dt} = \frac{1}{\tau}\left( 1 - \frac{M}{K-L} \right) (P-L) $$</span></p>
<p>where <span class="math-container">$P$</span> is population, <span class="math-container">$\tau$</span> is the 'characteristic time scale', <span class="math-container">$K$</span> is carrying capacity, <span class="math-container">$L$</span> is lower bound for population so that <span class="math-container">$P(-\infty)=L$</span>, <span class="math-container">$M$</span> is memory loss function.</p>
<p><span class="math-container">$$M=\int_{-\infty}^t \mu ( t - s) \left( P(s)- L \right) ds$$</span></p>
<p>here <span class="math-container">$\mu ( t - s)$</span> is a memory function that has to be defined in some way. For example, one possible formulation is:</p>
<p><span class="math-container">$$ \mu ( t - s) = \frac{1}{\tau_M} \exp \{ \frac{-|t-s|}{\tau_M} \}$$</span></p>
<p>The above is shared by World3 1-4, now for World3-3 specifically it is assumed that:</p>
<p><span class="math-container">$$ \frac{dK}{dt} = \theta (t-t_k) \frac{K-P}{\tau_K}$$</span></p>
<p>The above is of course birds eye view of the main parts of the model. Actual simulation of World3-3 can <a href="http://bit-player.org/2012/world3-the-public-beta" rel="nofollow noreferrer">reportedly</a> 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.</p>

CC BY-SA 4.0
2022-02-26T15:07:47.370Z
Thanks that's exactly the level of overview that I thought was missing from the book! The reference looks great
schroederadrian
CC BY-SA 4.0
2022-02-25T16:50:40.407Z
2022-02-25T16:50:40.407Z
1muflon1
<p>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.</p>
<p><a href="https://i.sstatic.net/m80d0.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/m80d0.png" alt="enter image description here" /></a></p>
<p>Not as neat as having a nice document that explains the equations, but doable I suppose.</p>
<p>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.</p>
<pre><code>from pyworld3 import World3
import matplotlib.pyplot as plt

from pyworld3 import World3
from pyworld3.utils import plot_world_variables
</code></pre>
<p>choose the time limits and step:</p>
<ul>
<li>year_min: start year of the simulation, default is 1900.</li>
<li>year_max: end year of the simulation, default is 2100.</li>
<li>dt: time step of the simulation, default is 1.</li>
<li>pyear: implementation date of new policies, default is 1975.</li>
<li>iphst : implementation date of new policy on health service time, default is 1940</li>
<li>verbose : bool, optional to print information for debugging. The default is False</li>
</ul>
<pre><code>    world3 = World3(year_min = 2000,year_max = 2200, dt=1, pyear = 1975, iphst = 1960,  verbose = False )
</code></pre>
<p>set all initial values: See the details about in the documentation of each sector (some selected details are commented here).</p>
<pre><code>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)
</code></pre>
<p>initialize the variables and use existing Json file (None uses default)</p>
<pre><code>world3.init_world3_variables()       # initialize all variables.
world3.set_world3_table_functions(json_file=None)  # get tables from a json file (None uses default).
</code></pre>
<p>you have two choices for the delay fct: euler&quot; or &quot;odeint&quot;. The default is
&quot;euler&quot;.</p>
<pre><code>world3.set_world3_delay_functions(method='euler')  # initialize delay functions.
</code></pre>
<p>run the model</p>
<pre><code>world3.run_world3()
</code></pre>
<p>plot details as you wish</p>
<pre><code>plot_world_variables(world3.time,
                     [world3.nrfr, world3.iopc, world3.fpc, world3.pop,
                      world3.ppolx],
                     [&quot;NRFR&quot;, &quot;IOPC&quot;, &quot;FPC&quot;, &quot;POP&quot;, &quot;PPOLX&quot;],
                     [[0, 1], [0, 1e3], [0, 1e3], [0, 16e9], [0, 32]],
                    # img_background=&quot;./img/fig7-7.png&quot;,
                     figsize=(12, 8),
                     title=&quot;World3 Akdemy run&quot;)
</code></pre>
<p>Output:</p>
<ul>
<li>default
<a href="https://i.sstatic.net/7Kmrd.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/7Kmrd.png" alt="enter image description here" /></a></li>
</ul>
<p>If you overlay the original Model3 result you can see it is literally identical.
<a href="https://i.sstatic.net/uIBTp.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/uIBTp.png" alt="enter image description here" /></a></p>
<ul>
<li>my (arguably randomly) modified parameters</li>
</ul>
<p><a href="https://i.sstatic.net/O7LLg.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/O7LLg.png" alt="enter image description here" /></a></p>
<p>You can also pull individual sectors:</p>
<pre><code>plot_world_variables(world3.time,
                     [world3.ly, world3.al, world3.fpc, world3.lmf,
                      world3.pop],
                     [&quot;LY&quot;, &quot;AL&quot;, &quot;FPC&quot;, &quot;LMF&quot;, &quot;POP&quot;],
                     [[0, 4e3], [0, 4e9], [0, 8e2], [0, 1.6], [0, 16e9]],
                     #img_background=&quot;./img/fig7-9.png&quot;,
                     figsize=(12, 8),
                     title=&quot;World3 standard run - Agriculture sector&quot;)
</code></pre>
<p><a href="https://i.sstatic.net/Kaioj.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/Kaioj.png" alt="enter image description here" /></a></p>

CC BY-SA 4.0
2022-02-24T16:34:12.183Z
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 :)
schroederadrian
CC BY-SA 4.0
2022-02-23T22:55:22.990Z
2022-02-24T19:50:08.633Z
2022-02-24T19:50:08.633Z
AKdemy
<p>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!</p>

CC BY-SA 4.0
2022-02-23T13:46:03.137Z
Supposedly, the model is described in the 1974 book "Dynamics of Growth in a Finite World." [This thesis](https://pure.tue.nl/ws/files/3428351/79372.pdf) discussing the model might be useful.
Michael Greinecker
CC BY-SA 4.0
2022-02-23T20:04:01.777Z
https://aru.figshare.com/articles/software/World3-03_Edited/11341697
AKdemy
CC BY-SA 4.0
2022-02-23T21:25:15.820Z
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
schroederadrian
CC BY-SA 4.0
2022-02-23T21:48:42.457Z
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](https://github.com/cvanwynsberghe/pyworld3) implementation of Model 3. It is well documented from what I saw looking at bits and pieces.
AKdemy
CC BY-SA 4.0
2022-02-23T22:10:42.487Z
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.
AKdemy
CC BY-SA 4.0
2022-02-23T22:19:21.883Z
Wow that looks really cool thanks AKdemy!
schroederadrian
<reference-request><economic-growth><simulations>
Where are the equations? Limits to Growth, Meadows et al., 2004
schroederadrian
# Where are the equations? Limits to Growth, Meadows et al., 2004

(Asked by: username_0 on 2022-02-22)

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!

**Tags:** reference-request, economic-growth, simulations

> **Comments:**
> **username_1**: Supposedly, the model is described in the 1974 book "Dynamics of Growth in a Finite World." [This thesis](https://pure.tue.nl/ws/files/3428351/79372.pdf) discussing the model might be useful.  
> **username_2**: https://aru.figshare.com/articles/software/World3-03_Edited/11341697  
> **username_0**: 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  
> **username_2**: 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](https://github.com/cvanwynsberghe/pyworld3) implementation of Model 3. It is well documented from what I saw looking at bits and pieces.  
> **username_2**: 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.  
> **username_0**: Wow that looks really cool thanks username_2!  

---

## 2 answers

### Answer by username_2 on 2022-02-23. Score: 5 | Accepted answer

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](https://i.sstatic.net/m80d0.png)](https://i.sstatic.net/m80d0.png)

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 username_2 run")

```

Output:

* default
  [![enter image description here](https://i.sstatic.net/7Kmrd.png)](https://i.sstatic.net/7Kmrd.png)

If you overlay the original Model3 result you can see it is literally identical.
[![enter image description here](https://i.sstatic.net/uIBTp.png)](https://i.sstatic.net/uIBTp.png)

* my (arguably randomly) modified parameters

[![enter image description here](https://i.sstatic.net/O7LLg.png)](https://i.sstatic.net/O7LLg.png)

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](https://i.sstatic.net/Kaioj.png)](https://i.sstatic.net/Kaioj.png)

> **Comments:**
> **username_0**: 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 :)  

---

### Answer by username_3 on 2022-02-25. Score: 1

There is a description of basic parts of World3-3 model in [Mathematical Modeling
by Stefan Heinz](https://link.springer.com/book/10.1007/978-3-642-20311-4) 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](http://bit-player.org/2012/world3-the-public-beta) 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.

> **Comments:**
> **username_0**: Thanks that's exactly the level of overview that I thought was missing from the book! The reference looks great  

---

