Estoy interesado específicamente en el modelo más reciente de World3-03 de 2004. Me preguntaba si alguien sabe cómo obtienen realmente su modelo o alguna de sus predicciones. No he podido encontrar ninguna descripción matemática de su modelo. El libro hizo un gran despliegue, pero naturalmente me pongo nervioso cuando no encuentro ninguna ecuación adjunta a un modelo. Gracias, chicos.
Respuestas
¿Demasiados anuncios?No responde directamente al Model3-03, que es una evolución del Model3 original. La versión más reciente está disponible aquí: aru.figshare.com/articles/software/World3-03_Edited/11341697 (no Python). Creo que el .mdl es un archivo antiguo de simulink (matlab), pero si sólo quieres ver las ecuaciones, puedes mirar el archivo excel (para los parámetros históricos utilizados en la calibración del modelo), y cargar el archivo .mdl en un editor de texto o vs code / sublime.
No es tan limpio como tener un buen documento que explique las ecuaciones, pero supongo que se puede hacer.
En caso de que usted (o alguien) quiera probar la versión en Python, lo siguiente puede acelerar el progreso, especialmente si no está muy familiarizado con Python.
from pyworld3 import World3
import matplotlib.pyplot as plt
from pyworld3 import World3
from pyworld3.utils import plot_world_variables
elija los límites de tiempo y el paso:
- year_min: año de inicio de la simulación, por defecto es 1900.
- year_max: año final de la simulación, por defecto es 2100.
- dt: paso de tiempo de la simulación, por defecto es 1.
- pyear: fecha de aplicación de las nuevas políticas, por defecto es 1975.
- iphst : fecha de aplicación de la nueva política sobre el tiempo de servicio sanitario, por defecto es 1940
-
verbose : bool, opcional para imprimir información para la depuración. El valor por defecto es False
world3 = World3(year_min = 2000,year_max = 2200, dt=1, pyear = 1975, iphst = 1960, verbose = False )
establecer todos los valores iniciales: Ver los detalles sobre en la documentación de cada sector (algunos detalles seleccionados se comentan aquí).
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)
inicializar las variables y utilizar el archivo Json existente (Ninguno utiliza por defecto)
world3.init_world3_variables() # initialize all variables.
world3.set_world3_table_functions(json_file=None) # get tables from a json file (None uses default).
tienes dos opciones para el retraso fct: euler" u "odeint". El valor por defecto es "euler".
world3.set_world3_delay_functions(method='euler') # initialize delay functions.
ejecutar el modelo
world3.run_world3()
detalles de la parcela como desee
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")
La salida:
Si superpones el resultado del Modelo3 original puedes ver que es literalmente idéntico.
- mis parámetros modificados (posiblemente al azar)
También se puede tirar de sectores individuales:
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")
Hay una descripción de las partes básicas del modelo World3-3 en Modelización matemática por Stefan Heinz en las páginas 280-285.
Según el autor, el núcleo del modelo es la siguiente ecuación de crecimiento logístico:
$$\frac{dP}{dt} = \frac{1}{\tau}\left( 1 - \frac{M}{K-L} \right) (P-L) $$
donde $P$ es la población, $\tau$ es la "escala temporal característica", $K$ es la capacidad de carga, $L$ es el límite inferior de la población para que $P(-\infty)=L$ , $M$ es la función de pérdida de memoria.
$$M=\int_{-\infty}^t \mu ( t - s) \left( P(s)- L \right) ds$$
aquí $\mu ( t - s)$ es una función de memoria que tiene que ser definida de alguna manera. Por ejemplo, una posible formulación es:
$$ \mu ( t - s) = \frac{1}{\tau_M} \exp \{ \frac{-|t-s|}{\tau_M} \}$$
Lo anterior es compartido por el Mundo3 1-4, ahora para el Mundo3-3 específicamente se asume que:
$$ \frac{dK}{dt} = \theta (t-t_k) \frac{K-P}{\tau_K}$$
Lo anterior es, por supuesto, una vista de pájaro de las partes principales del modelo. La simulación real de World3-3 puede supuestamente incluye unas 150 ecuaciones (ya que, por ejemplo, la capacidad de carga de la tierra depende de muchos factores). Sin embargo, lo anterior es la descripción de las partes principales del modelo. Hay más detalles en el libro de Heinz.