The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Oracle's Java site.
powered by NetLogo
view/download model file: cooperation_vs._greed.nlogo
We model a society with three types of people: cooperative citizens, greedy citizens and stealers. The first two groups try to defend themselves from the third. We investigate how the difference in behaviour (cooperative or not) affects aggregate income.
The two groups of citizens have income which is given according to a normal distribution. Then cooperative citizens tax themselves, and with the revenues pay policemen (chosen among low income profiles in their group). Greedy citizens buy weapons, but not everyone can afford the expense. Both groups then invest their net incomes in the financial markets. Stealers take citizen’s income with a certain probability, this depends on weapons and on the presence of policemen in the neighbourhood.
Stealers can reproduce exceeded a certain amount of robbery, but the threshold increases exponentially with the amount of stealers. When stealers meet cops they loose the booty, which will be counted as aggregate income for cooperative citizens.
Press Setup button:
- incomes are distributed, cooperative citizens below a threshold become cops
- weapons are buyed and tax collected
Press Go button:
- agents start moving and stealers take others income with a certain probability
Important variables:
-Aggregatecit = measures invested income of cooperative citizens plus wage of cops and booty seized to stealers
-Aggregreedy = measures invested income of greedy citizens
-Aggregaterobberycit= amount of robbery stolen to cooperative citizens
-Aggregaterobberygreed = amount of robbery stolen to greedy citizens
Changes in these variables allow to understand which group is facing better the threat of stealers.
Sliders:
- Amount of cooperative and greedy citizens can be changed, as also the number of stealers.
- Mean value and standard deviation of the normal distribution of incomes. Interest rates at which citizens invest.
-Price of weapons: a fixed cost component as also a marginal cost component.
-Thresholds: the one under which cooperative citizens become cops and the one above which stealers reproduce themselves.
In order to make our inferences more applicable to reality, an implementation could be rethinking the entire model introducing values for the parameters closer to empiric ones. Our last experiment is just a first attempt in this direction. For example we could introduce microlevel data, describing places and daily activities of individuals, in order to represent their usual habits of movements.
breed [stealers stealer]
breed [cops cop]
breed [greedy-citizens greedy-citizen]
breed [friendly-citizens friendly-citizen]
globals [ farest-stealer victim aggrecit collectedtax aggregaterobberycit aggregaterobberygreed aggregreedy aggregatetreasure aggregaterobbery aggregatewage price reproduction-threshold ]
friendly-citizens-own [initincome tax netincome income]
greedy-citizens-own [initincome netincomeg incomeg] ;; price e total-stealers non "appartengono" ai greedy citizens, come toglierle?
stealers-own [robberycit robberygreed robbery netincome netincomeg income incomeg]
cops-own [initincome netincome wage income tax treasure]
to setup
clear-all
setup-stealers
setup-friendly-citizens
setup-greedy-citizens
setup-cops
set aggrecit sum [income] of friendly-citizens
set aggregaterobberycit sum [robberycit] of stealers
set aggregaterobberygreed sum [robberygreed] of stealers
set aggregaterobbery sum [robbery] of stealers
set aggregreedy sum [incomeg] of greedy-citizens
set aggregatewage sum [wage] of cops
set collectedtax sum [tax] of friendly-citizens
set reproduction-threshold intercept-reproduction
ask patches [ set pcolor white ]
reset-ticks
end
to setup-stealers
set-default-shape stealers "wolf"
create-stealers number-stealers [set color black setxy random-xcor random-ycor]
ask stealers
[set robberycit 0
set robberygreed 0
]
end
to setup-friendly-citizens
set-default-shape friendly-citizens "person"
create-friendly-citizens number-friendly-citizens [ set color red
setxy random-xcor random-ycor
]
ask friendly-citizens
[set initincome random-normal value-mean value-deviation
set tax trate * initincome
set netincome (initincome - tax)
set income netincome
]
end
to setup-greedy-citizens
set-default-shape greedy-citizens "person"
create-greedy-citizens number-greedy-citizens [ set color blue
setxy random-xcor random-ycor
]
ask greedy-citizens
[set initincome random-normal value-mean value-deviation
set price number-stealers * initcost + number-stealers * marginalcost
set netincomeg (initincome - price)
ifelse netincomeg > 0
[set incomeg netincomeg]
[set incomeg initincome]
] ;; provare differenziare robbery
end
to setup-cops
ask friendly-citizens
[ifelse initincome <= copthreshold
[set breed cops
set color green
setxy random-xcor random-ycor
set wage income
set treasure 0
]
[set breed friendly-citizens]
]
end
to go
ask turtles
[move-turtles]
ask friendly-citizens
[invest-cit]
ask greedy-citizens
[invest-greedy]
ask cops
[invest-cop]
ask stealers[
steal
reproduce]
update-variables
if all? greedy-citizens [incomeg = 0] or all? friendly-citizens [income = 0]
[stop]
tick
end
to move-turtles
right random 360
forward 1
end
to invest-cop
set wage wage + collectedtax / count cops
end
to invest-cit
set income income + income * interestfriendly - (income * interestfriendly) * trate
set tax (income * interestfriendly) * trate
end
to invest-greedy
set price count stealers * marginalcost
ifelse incomeg > 0
[set incomeg incomeg + incomeg * interestgreedy - (price)]
[set incomeg 0]
end
to steal
set victim max-one-of turtles [distance myself]
ask victim
[ set farest-stealer max-one-of stealers [distance myself]
ask farest-stealer
[if [breed] of myself = greedy-citizens
[if sum [count cops] of neighbors4 >= 1 and [netincomeg] of myself >= 0
[ifelse random-float 1.0 <= 0.3
[set robberygreed robberygreed + [incomeg] of myself
ask victim
[set incomeg 0]
]
[set robberygreed robberygreed]]
if sum [count cops] of neighbors4 < 1 and [netincomeg] of myself >= 0
[ifelse random-float 1.0 <= 0.7
[set robberygreed robberygreed + [incomeg] of myself
ask victim
[set incomeg 0]
]
[set robberygreed robberygreed]]
if sum [count cops] of neighbors4 >= 1 and [netincomeg] of myself < 0
[ifelse random-float 1.0 <= 0.5
[set robberygreed robberygreed + [incomeg] of myself
ask victim
[set incomeg 0]
]
[set robberygreed robberygreed]]
if sum [count cops] of neighbors4 < 1 and [netincomeg] of myself < 0
[ifelse random-float 1.0 <= 0.9
[set robberygreed robberygreed + [incomeg] of myself
ask victim
[set incomeg 0]
]
[set robberygreed robberygreed]]
]
if [breed] of myself = friendly-citizens
[if sum [count cops] of neighbors4 >= 1
[ifelse random-float 1.0 <= 0.5
[set robberycit robberycit + [income] of myself
ask victim
[set income 0]]
[set robberycit robberycit]]
if sum [count cops] of neighbors4 < 1
[ifelse random-float 1.0 <= 0.9
[set robberycit robberycit + [income] of myself
ask victim
[set income 0]
]
[set robberycit robberycit]
]]
if [breed] of myself = cops
[ ask victim
[ set treasure treasure + [robberycit] of myself + [robberygreed] of myself
set wage wage + treasure
ask farest-stealer
[set robberycit 0
set robberygreed 0]]
]
]
]
end
to reproduce
if robberygreed >= reproduction-threshold or robberycit >= reproduction-threshold
[ hatch 1
[lt 45 fd 1]
]
end
to update-variables
set aggrecit sum [income] of friendly-citizens
print aggrecit
set aggregreedy sum [incomeg] of greedy-citizens
print aggregreedy
set aggregatetreasure sum [treasure] of cops
print aggregatetreasure
set collectedtax sum [tax] of friendly-citizens
print collectedtax
set aggregaterobberycit sum [robberycit] of stealers
print aggregaterobberycit
set aggregaterobberygreed sum [robberygreed] of stealers
print aggregaterobberygreed
set aggregaterobbery aggregaterobberygreed + aggregaterobberycit
print aggregaterobbery
set aggregatewage sum [wage] of cops
print aggregatewage
ifelse count stealers >= number-friendly-citizens
[set reproduction-threshold exp((count stealers)^ 0.5) - exp((count stealers)^ 0.10)]
[set reproduction-threshold intercept-reproduction]
end