Problema 6.3 del libro Small System Dynamics Models for Big Issues: Triple Jump towards Real-World Complexity de Erik Pruyt.
Overshoot and collapse is a phenomenon found in many application domains. In this exercise, one needs to build and analyze a simple overshoot and collapse model related to renewable resource exploitation by an autarchic population, for example the population on an isolated island in ancient times.
Suppose that the population initially amounts to 1 million persons and that the initial renewable resources amounts to 5 million units of the resource (for example tons of fish or acres of arable land). Suppose that the births flow is proportional to the population, the per capita renewable resource availability and the normal birth rate of 0.35% person per person per year. Suppose that the deaths flow is proportional to the consumer population and inversely proportional to the resource availability dependent lifetime. The latter is equal to the normal lifetime times the per capita renewable resource availability. Add MAX(15,MIN(100, in front of and )) behind this equation to ensure the maximum average adapted lifetime is 100 years and the minimum average adapted lifetime is 15 years.
Per capita renewable resource availability is of course equal to the stock of renewable resources divided by the size of the population. Renewable resources only increase through regeneration and decrease through resource use. Regeneration consists of the sum of the minimum regeneration and the resource dependent regeneration. The minimum regeneration amounts to the carrying capacity times the minimum regeneration rate. Approximate the resource dependent regeneration with the following function: regeneration rate ∗ renewable resources ∗ ( renewable resources / carrying capacity ) ∗ (1 − renewable resources / carrying capacity ).
In times of abundance, the resource use is equal to the population times the renewable resource consumption per capita, but in times of scarcity it is limited to the amount of renewable resources divided by the rapid resource depletion time. The resource use equation could thus be written as: MIN( renewable resources / rapid resource depletion time , renewable resource consumption per capita ∗ population ).
Assume the regeneration rate amounts to 120%, the carrying capacity to 7,500,000 units of the resource, the minimum regeneration rate to 1% per year, the rapid resource depletion time to 1 year, and the renewable resource consumption per capita to 1 unit of resource per person per year.
#Representa el sistema en R, ¿qué tipo de dinámica en términos de población y recursos renovables obtuviste?, ¿qué pasa si _minimum regeneration rate_ es 10% por año?.
#PARA RESOLVER EL PROEBLEMA
# Limpiamos ambiente de trabajo
rm(list=ls())
# Cargamos bibliotecas
library(deSolve)
## Warning: package 'deSolve' was built under R version 4.1.3
# Arreglo de parametros
parameters<-c(normal.birth.rate = 0.35/100,
regeneration.rate = 1.2,
minimum.regeneration.rate=1/100,
carrying.capacity=7500000,
normal.lifetime=30,
rapid.resource.depletion.time=1,
renewable.resource.consumption.per.capita=1)
# Arreglo de condiciones iniciales
InitialConditions <- c(population=1000000,
renewable.resource=5000000)
# Arreglo del intervalo de tiempo
init <-0
final <-100
time_step <-1/12
#cada mes se plantea así con 1/12, si el tiempo fuera expresado en días sería 1/365
times <- seq(init,final,time_step)
# Método de integración
intg.method<-c("rk4")
# Definimos el modelo a resolver
model <- function(t, state, parameters) {
with(as.list(c(state,parameters)), {
#auxiliary endogenous variables
per.capita.renewable.resource.availability <- renewable.resource/population
beta <- normal.lifetime*per.capita.renewable.resource.availability
resource.availability.dependent.lifetime <- max(15,min(100,beta))
minimum.regeneration <- carrying.capacity*minimum.regeneration.rate
resource.dependent.regeneration <- regeneration.rate∗renewable.resource*( renewable.resource/carrying.capacity )∗( −renewable.resource/carrying.capacity)
#flow variables
birth.flow <- population*per.capita.renewable.resource.availability*normal.birth.rate
death.flow <- population/resource.availability.dependent.lifetime
regeneration <- minimum.regeneration+resource.dependent.regeneration
resource.use <- min(renewable.resource/rapid.resource.depletion.time,renewable.resource.consumption.per.capita*population)
#state variables
dpopulation <- birth.flow - death.flow
drenewable.resource <- regeneration -resource.use
list(c(dpopulation,drenewable.resource), resource.use = resource.use, resource.availability.dependent.lifetime=resource.availability.dependent.lifetime)
})
}
# Simulate model
out <- ode(y = InitialConditions, # y recibe las condiciones iniciales
times = times, # times recibe el arreglo del intervalo de tiempo
func = model, # func recibe el modelo a resolver
parms = parameters, # parms recibe los parámetros del modelo
method = intg.method # method recibe el método de integración
)
# Visualizamos los resultados
plot(out)