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: rat_race.nlogo
(a general understanding of what the model is trying to show or explain)
(what rules the agents use to create the overall behavior of the model)
(how to use the model, including a description of each of the items in the Interface tab)
(suggested things for the user to notice while running the model)
(suggested things for the user to try to do (move sliders, switches, etc.) with the model)
(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)
(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)
(models in the NetLogo Models Library and elsewhere which are of related interest)
(a reference to the model’s URL on the web if it has one, as well as any other necessary credits, citations, and links)
breed [workers worker]
breed [firms firm]
workers-own [myFirm productivity friends pastFirm myFriends My_Friends]
firms-own [employees wage_rate total_productivity workers_hired average_productivity past_employees]
to setup
ca
setup-patches
setup-workers
setup-firms
friend
reset-ticks
end
to setup-patches
ask patches [set pcolor blue]
end
to setup-workers
create-workers initial_lowP_workers [set color red set productivity 1.0 set friends random 4]
create-workers initial_medP_workers [set color yellow set productivity 2.0 set friends random 4]
create-workers initial_highP_workers [set color green set productivity 3.0 set friends random 4]
ask workers [
set shape "person"
set size 1
setxy random-xcor random-ycor
set myFirm nobody
set pastFirm []
set myFriends []
set My_Friends[] ]
end
to setup-firms
create-firms initial_lowW_firms [set size 1.5 set wage_rate 1.0]
create-firms initial_medW_firms [set size 2.0 set wage_rate 2.0]
create-firms initial_highW_firms [set size 2.5 set wage_rate 3.0]
ask firms [
set shape "factory"
set color white
setxy random-xcor random-ycor
set employees []
set past_employees [] ]
end
to friend
ask workers with [ myFriends = []]
[ if friends = 3
[ set myFriends workers with [friends = 3]
ask myFriends [set My_Friends lput myself My_Friends]]
if friends = 2
[ set myFriends workers with [friends = 2]
ask myFriends [set My_Friends lput myself My_Friends]]
if friends = 1
[ set myFriends workers with [friends = 1]
ask myFriends [set My_Friends lput myself My_Friends]]]
end
to go
search-for-job
show-firms
hire-workers
show-workers
research-for-job
;do-plots
if (count firms with [ color = white ]) = 0 [stop]
if (count workers with [ size = 1] + count workers with [ size = 2 ]) = 0 [stop]
tick
end
to search-for-job
ask workers
[ ifelse discrimination? and ticks > (discrimination)
[
ask workers with [myFirm = nobody and size = 1 and myFriends != [] ]
[ move-to one-of myFriends with [size = 2 and myFirm != nobody ]
set myFirm one-of firms with [color = white] in-radius 0
if myFirm != nobody [set size 2
ask myFirm [set employees lput myself employees
set total_productivity (sum [ productivity] of workers-here with [myFirm != nobody])
set workers_hired (count workers-here with [myFirm != nobody])
set average_productivity (total_productivity / workers_hired) ]]]
]
[
ask workers
[ if myFirm = nobody and pastFirm = []
[
set myFirm one-of firms with [color = white] in-radius (searchRadius)
if myFirm != nobody [set size 2
move-to myFirm
ask myFirm [set employees lput myself employees
set total_productivity (sum [productivity] of workers-here with [myFirm != nobody])
set workers_hired (count workers-here with [ myFirm != nobody])
set average_productivity (total_productivity / workers_hired)
]]]
if myFirm = nobody and pastFirm != [ ]
[
set myFirm one-of firms with [color = white] in-radius (searchRadius)
if myFirm != nobody and [who] of myFirm != length pastFirm [set size 2
move-to myFirm
ask myFirm [set employees lput myself employees
set total_productivity (sum [productivity] of workers-here with [myFirm != nobody])
set workers_hired (count workers-here with [myFirm != nobody])
set average_productivity (total_productivity / workers_hired)
]]]]
]
]
end
to show-firms
ask firms
[
show length employees
]
end
to hire-workers
ask firms with [employees != []]
[
if average_productivity = wage_rate [set color black
ask workers-here with [ myFirm != nobody] [set size 3.5 ]]
if average_productivity < wage_rate
[
ask min-one-of workers-here with [ myFirm != nobody] [productivity] [set size 1
set pastFirm lput myself pastFirm
ask myFirm [ set employees remove myself employees set past_employees lput myself past_employees]
set myFirm nobody
]
]
if average_productivity > wage_rate
[
ask max-one-of workers-here with [ myFirm != nobody] [productivity] [set size 1
set pastFirm lput myself pastFirm
ask myFirm [ set employees remove myself employees set past_employees lput myself past_employees]
set myFirm nobody
]]
]
end
to show-workers
ask firms
[
show length past_employees
set workers_hired ( count workers-here with [myFirm != nobody] )
set total_productivity ( sum [ productivity] of workers-here with [myFirm != nobody] )
ifelse employees = []
[set average_productivity 0 ]
[set average_productivity (total_productivity / workers_hired) ]
if length past_employees > 5 [set past_employees [] ] ]
end
to research-for-job
ask workers with [myFirm = nobody] [ setxy random-xcor random-xcor]
ask workers[
if length pastFirm > 5 [set pastFirm [] ]]
end
to do-plots
set-current-plot "Unemployed workers"
set-current-plot-pen "LowP_workers"
plot count workers with [size = 1 and color = red]
set-current-plot-pen "MedP_workers"
plot count workers with [size = 1 and color = yellow]
set-current-plot-pen "HighP_workers"
plot count workers with [size = 1 and color = green]
set-current-plot "Firms with jobs available"
set-current-plot-pen "Firms with jobs available"
plot count firms with [color = white]
set-current-plot "Total unemployed workers"
set-current-plot-pen "Unemployed workers"
plot count workers with [size = 1] + count workers with [size = 2]
end