The applet requires Java 1.4.1 or higher. It will not run on Windows 95 or Mac OS 8 or 9. Mac users must have OS X 10.2.6 or higher and use a browser that supports Java 1.4. (Safari works, IE does not. Mac OS X comes with Safari. Open Safari and set it as your default web browser under Safari/Preferences/General.) On other operating systems, you may obtain the latest Java plugin from Sun's Java site.
powered by NetLogo
view/download model file: agriculture_and_competition.nlogo
The model explores the stability, the evolution and the sustainability of a system with technical progress, random shocks, non renewable resources, birth control and a welfare state.
The program creates a world with renewable resources and in which each citizen is generated, moves, eats, reproduces, gets old and dies.
The user, thanks to different sliders and switches, can introduces more variables and he can implement different kind of policies.
The fertility rate and the life expectancy change over time.
1. Adjust the slider parameters (see below), or use the default settings.
2. Press the SETUP button.
3. Press the GO button to begin the simulation.
4. Look at the monitors to check the variables of this model
5. Look at the TOTAL and POPULATION COMPOSITION plots to watch the population fluctuation over time
Parameters:
NUMBER-OF-CITIZENS: The initial size of the population
TECHNICAL-PROGRESS?:Whether or not to introduce progress by means of increasing productivity
SHOW-ENERGY?: Whether or not to show the energy of each citizen as a number
NON-RENEWABLE-RESOURCES?: Whether or not to reduce gradually the growth rate of the resources
BIRTH-CONTROL?: Whether or not to enable only adults citizen with less than 50 children to reproduce themselves
SHOCKS?: Whether or not to introduce random shocks which may modify the composition of the population
REDISTRIBUTION?: Whether or not to introduce a welfare state
EDUCATION?:Whether or not to introduce an education system
MARGINAL-TAX-RATE: the tax burden, i.e. citizens have to pay a tax which is equal to the marginal tax rate multiplied by their energy
POVERTY-LINE: citizens which have less energy than the poverty line are considered poor
POVERTY-REDUCTION: the import of the subsidy received by poor citizens is equal to poverty reduction times the difference between poverty line and the energy of the citizen
EDUCATION-EXPENDITURE-PERCAPITA: public expenditure per capita in order to offer a public education to young citizens
See the different patterns of population and population composition when different switches are activated. Some choice are sustainable in the long run and other ones tends to bring citizens towards extinction or are financial unsustainable.
Note that is very important the time in which some policies such as education system or welfare state are implemented. The results may be very different both in the short run and in the long run.
Note that the tax burder play a key role in stimulating or dampening the population growth.
Try to modify the initial number of citizens. Does the shorth run equilibrium change?
Try to activate only some switches and see the effects.
Try to balance a good welfare state and education sistem with their financial sustainability: if the government debt is more than 500000, there is the default of the State.
Try to see, modifing sliders and activating switches, if there is a long-run equilibrium, a trend or if the model is instable.
Some interesting things to add would be: pollution, diseases and health system, happyness of population and possibility of rebellions, different breeds which compete to survive.
Note the use of let in order to create temporary variables.
Note the use of global variables in order to set variables which affect all the citizens, such as productivity, life expectancy, grass growth rate, knowledge and government budget.
Note the use of mathematical function, such as the square root or the natural logarithm, in order to consider decreasing marginal improvement in progress, life expectancy and growth rate of natural resources.
Look at Wolf Sheep Predation for a model of interacting populations with limited resources and instability problems.
Paolo Bosi (a cura di), "Corso di scienza delle finanze", 2010 - Quinta edizione, Il Mulino. Cap. 7 - La spesa per il Welfare State
Giovanni Pavanelli, "Valore, distribuzione, moneta: un profilo di storia del pensiero economico", 2010 - Seconda edizione, FrancoAngeli. Cap. 5.1 - Malthus e il Saggio sul principio della popolazione
The World Bank, World Development Report 2008, "Agriculture for Development", Overview
globals [productivity-reds
productivity-blues
life-expectancy-reds
life-expectancy-blues
grass-growth-rate
energy-from-grass-reds
energy-from-grass-blues
government-budget-reds
government-budget-blues
knowledge-reds
knowledge-blues
productivity-of-the-young-reds
productivity-of-the-young-blues]
turtles-own [energy
age
children]
breed [blue-turtles blue-turtle]
breed [red-turtles red-turtle]
to setup
ca
ask patches [set pcolor one-of [green brown]]
create-blue-turtles initial-number-of-blue-citizens [setxy random-xcor random-ycor
set energy random 10
set color blue
set size 2
set age random 180]
create-red-turtles initial-number-of-red-citizens [setxy random-xcor random-ycor
set energy random 10
set color red
set size 2
set age random 180]
do-plots
end
to go
ifelse technical-progress-reds? [set-productivity-reds]
[set productivity-reds 0]
ifelse technical-progress-blues? [set-productivity-blues]
[set productivity-blues 0]
set energy-from-grass-reds 25 + productivity-reds
set energy-from-grass-blues 25 + productivity-blues
set life-expectancy-reds 180 + sqrt (ticks + productivity-reds)
set life-expectancy-blues 180 + sqrt (ticks + productivity-blues)
ifelse non-renewable-resources? [set-grass-growth-rate]
[set grass-growth-rate 10]
ask turtles[move-turtle
display-label]
let temp random 2
ifelse temp = 0 [ask red-turtles [eat-grass-reds
death-reds]
ask blue-turtles [eat-grass-blues
death-blues]]
[ask blue-turtles [eat-grass-blues
death-blues]
ask red-turtles [eat-grass-reds
death-reds]]
ask patches with [pcolor = brown] [grow-grass]
if redistribution-reds? or education-reds? [ask red-turtles [pay-taxes-reds]]
if redistribution-blues? or education-blues? [ask blue-turtles [pay-taxes-blues]]
if redistribution-reds? [ask red-turtles [redistribution-of-resources-reds]]
if redistribution-blues? [ask blue-turtles [redistribution-of-resources-blues]]
if education-reds? [implement-education-system-reds]
if education-blues? [implement-education-system-blues]
ifelse birth-control-reds? [reproduction-conditions1-reds]
[reproduction-conditions2-reds]
ifelse birth-control-blues? [reproduction-conditions1-blues]
[reproduction-conditions2-blues]
ask patches with [pcolor = brown] [grow-grass]
if shocks? [do-shock]
if count red-turtles = 0 or count blue-turtles = 0 [stop]
if government-budget-reds < -500000 [user-message ( word "Default of the State of the reds")
ask red-turtles [die]]
if government-budget-blues < -500000 [user-message ( word "Default of the State of the blues")
ask blue-turtles [die]]
tick
do-plots
end
to implement-education-system-reds
let education-expenditure-reds (education-expenditure-percapita-reds *
count red-turtles with [age < (30 + round(life-expectancy-reds / 10))])
set government-budget-reds (government-budget-reds - education-expenditure-reds - 2000)
set knowledge-reds (knowledge-reds + (1 + random 1) * education-expenditure-reds)
set productivity-of-the-young-reds (2 * education-expenditure-percapita-reds)
end
to implement-education-system-blues
let education-expenditure-blues (education-expenditure-percapita-blues *
count blue-turtles with [age < (30 + round(life-expectancy-blues / 10))])
set government-budget-blues (government-budget-blues - education-expenditure-blues - 2000)
set knowledge-blues (knowledge-blues + (1 + random 1) * education-expenditure-blues)
set productivity-of-the-young-blues (2 * education-expenditure-percapita-blues)
end
to set-productivity-reds
set productivity-reds sqrt (0.1 * ticks +
2 * count red-turtles with [age >= (30 + round(life-expectancy-reds / 10)) and
age <= (150 + round(life-expectancy-reds / 20))] +
(0.5 - productivity-of-the-young-reds) * count red-turtles with [age < (30 + round(life-expectancy-reds / 10))] +
0.2 * count red-turtles with [age > (150 + round(life-expectancy-reds / 20))]+
0.1 * knowledge-reds +
random-normal 0 1)
end
to set-productivity-blues
set productivity-blues sqrt (0.1 * ticks +
2 * count blue-turtles with [age >= (30 + round(life-expectancy-blues / 10)) and
age <= (150 + round(life-expectancy-blues / 20))] +
(0.5 - productivity-of-the-young-blues) * count blue-turtles with [age < (30 + round(life-expectancy-blues / 10))] +
0.2 * count blue-turtles with [age > (150 + round(life-expectancy-blues / 20))]+
0.1 * knowledge-blues +
random-normal 0 1)
end
to set-grass-growth-rate
set grass-growth-rate 10 - ln (1 + 0.001 * ticks + 0.00001 * count turtles)
end
to move-turtle
let steps random 10
right random 360
fd steps
set energy energy - steps
set age (age + 1)
end
to eat-grass-reds
if pcolor = green [set pcolor brown
set energy (energy + energy-from-grass-reds)]
end
to eat-grass-blues
if pcolor = green [set pcolor brown
set energy (energy + energy-from-grass-blues)]
end
to death-reds
if energy < 0 or age > life-expectancy-reds [die]
end
to death-blues
if energy < 0 or age > life-expectancy-blues [die]
end
to reproduction-conditions1-reds
ask red-turtles with [age >= (30 + round(life-expectancy-reds / 10)) and
age <= (150 + round(life-expectancy-reds / 20)) and
children < 51]
[generate-red-turtle]
end
to reproduction-conditions2-reds
ask red-turtles with [age >= (30 + round(life-expectancy-reds / 10)) and
age <= (150 + round(life-expectancy-reds / 20))]
[generate-red-turtle]
end
to generate-red-turtle
if count red-turtles in-radius 1 > 2
and energy > 50 + round (count red-turtles / 10) [set energy (energy / 2)
set children (children + 1)
hatch 1[set energy random 50
set age 0]]
end
to reproduction-conditions1-blues
ask blue-turtles with [age >= (30 + round(life-expectancy-blues / 10)) and
age <= (150 + round(life-expectancy-blues / 20)) and
children < 51]
[generate-blue-turtle]
end
to reproduction-conditions2-blues
ask blue-turtles with [age >= (30 + round(life-expectancy-blues / 10)) and
age <= (150 + round(life-expectancy-blues / 20))]
[generate-blue-turtle]
end
to generate-blue-turtle
if count blue-turtles in-radius 1 > 2
and energy > 50 + round (count blue-turtles / 10) [set energy (energy / 2)
set children (children + 1)
hatch 1[set energy random 50
set age 0]]
end
to grow-grass
if random-float 100 < grass-growth-rate [set pcolor green]
end
to display-label
ifelse show-energy? [set label round energy][set label "" ]
end
to pay-taxes-reds
set energy (energy - marginal-tax-rate-reds * energy)
set government-budget-reds (government-budget-reds + marginal-tax-rate-reds * energy)
end
to pay-taxes-blues
set energy (energy - marginal-tax-rate-blues * energy)
set government-budget-blues (government-budget-blues + marginal-tax-rate-blues * energy)
end
to redistribution-of-resources-reds
if energy < poverty-line-reds [let subsidy poverty-reduction-reds * (poverty-line-reds - energy)
set energy (energy + subsidy)
set government-budget-reds (government-budget-reds - subsidy - 1)]
end
to redistribution-of-resources-blues
if energy < poverty-line-blues [let subsidy poverty-reduction-blues * (poverty-line-blues - energy)
set energy (energy + subsidy)
set government-budget-blues (government-budget-blues - subsidy - 1)]
end
to do-shock
let probability-of-shock random-float 1
let population-striken random 4
if population-striken = 0[if probability-of-shock < 0.05 and probability-of-shock > 0.001
[ask n-of ((count turtles) * random-float 0.1) turtles [die]]
if probability-of-shock < 0.001
[ask n-of ((count turtles) * random-float 0.4) turtles [die]]]
if population-striken = 1[if probability-of-shock < 0.05 and probability-of-shock > 0.001
[ask n-of ((count turtles with [age < 50]) * random-float 0.1) turtles with [age < 50] [die]]
if probability-of-shock < 0.001
[ask n-of ((count turtles with [age < 50]) * random-float 0.4) turtles with [age < 50] [die]]]
if population-striken = 2[if probability-of-shock < 0.05 and probability-of-shock > 0.001
[ask n-of ((count turtles with [age >= 50 and age <= 150]) * random-float 0.1) turtles with [age >= 50 and age <= 150][die]]
if probability-of-shock < 0.001
[ask n-of ((count turtles with [age >= 50 and age <= 150]) * random-float 0.4) turtles with [age >= 50 and age <= 150][die]]]
if population-striken = 3[if probability-of-shock < 0.05 and probability-of-shock > 0.001
[ask n-of ((count turtles with [age > 150]) * random-float 0.1) turtles with [age > 150] [die]]
if probability-of-shock < 0.001
[ask n-of ((count turtles with [age > 150]) * random-float 0.4) turtles with[age > 150] [die]]]
end
to do-plots
set-current-plot "Totals"
set-current-plot-pen "red-citizens"
plot count red-turtles
set-current-plot-pen "blue-citizens"
plot count blue-turtles
set-current-plot-pen "resources"
plot (count patches with [pcolor = green])
set-current-plot-pen "red-poor"
plot count red-turtles with [energy < poverty-line-reds]
set-current-plot-pen "blue-poor"
plot count blue-turtles with [energy < poverty-line-blues]
set-current-plot "Population composition reds"
set-current-plot-pen "young"
plot ((count red-turtles with [age < (30 + round(life-expectancy-reds / 10))]) / count red-turtles)
set-current-plot-pen "old"
plot ((count red-turtles with [age > (150 + round(life-expectancy-reds / 20))]) / count red-turtles)
set-current-plot-pen "adult"
plot ((count red-turtles with [age >= (30 + round(life-expectancy-reds / 10)) and
age <= (150 + round(life-expectancy-reds / 20))]) / count red-turtles)
set-current-plot "Population composition blues"
set-current-plot-pen "young"
plot ((count blue-turtles with [age < (30 + round(life-expectancy-blues / 10))]) / count blue-turtles)
set-current-plot-pen "old"
plot ((count blue-turtles with [age > (150 + round(life-expectancy-blues / 20))]) / count blue-turtles)
set-current-plot-pen "adult"
plot ((count blue-turtles with [age >= (30 + round(life-expectancy-blues / 10)) and
age <= (150 + round(life-expectancy-blues / 20))]) / count blue-turtles)
end
; Copyright 2011 Dario Sansone. All rights reserved.
; Supervisor: Pietro Terna, Faculty of Economics, University of Turin