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: free-riders_and_public_transport.nlogo
Starting from an empirical observation of public transport in the city of Turin, we decided to build a simulation model in order to better understand and analyze the social and economical dynamics of the free riding problem and the consequences of choosing a public or private mean of transportation.
The aim is to create an accurate representation of the reality and to highlight how the choice of few people can affect collectivity’s decisions. We are interested in the consequences of choosing between public or private transports in terms of environmental issues, costs and benefits.
Two different kinds of choices are taken into account in our model: random ones and rational ones. Random choices reflect a stochastic component in the population that represents users who prefer to move by bus or by car according to their specific necessity or irrational preferences. Rational choices, instead, are made by comparing Costs and Benefits of moving by public transports or by private transports. Within this context, an important assumption has been made in our model: in fact, considering equal costs for public transport and for private transport, users earn more benefits by moving by car than by taking bus. Furthermore, we want to consider environmental sensibility and car costs in order to simulate different situations and in order to have different cases to analyze. Nevertheless, preferences are changeable, each cycle users “come back to home” and re-decide how to move around. So again, we will have a part of the population choosing randomly and a part that form preferences by rational comparisons. Moreover, agents have a short memory in which they store the information about crowdedness of their last travel. Information refer to bus if they used buses and to car if they used cars.
From the interface we can modify the following characteristics using different sliders:
• Cycle-length: number of ticks from 5 to 50 that pass between two new “days” in which agents make their choice on the mode of transport.
• Cars Cost / Bus cost: represent the cost of using respectively the cars and the buses. Both are changeable from 0 to 1.
• Number of inspector which goes from 1 to 10.
• Laziness switch: by setting this on, inspectors are not going to do efficiently their job. For instance, they are not motivated to work or just taking a nap.
• Pticket: is the only slider that can change during the simulation. It represents the probability of non-owning the ticket.
It is important to understand the different agents colours:
• the green has been used to highlight the inspector(s) among all users;
• the blue identifies users who move by public transports;
• the magenta characterizes agents who travel by private transports;
• the white users are the ones choosing randomly their mean of transport;
• the red is exclusively for the free-riders caught by the inspector(s).
Among many free experiments that could be done, we strongly recommend the following ones:
• Highlighting the relation between the duration of the travel and the probability of non-owning the ticket by changing cycle-length and observe the long-run behavior of pticket.
• Focus on memory effect on rational choices: by changing the different costs. Even though it is more convenient to choose the cheapest mode of transport, whenever an uncomfortable travel occurs, a short-memory affects further choices.
• Environmental sensibility (ES). By increasing or decreasing the ES it is possible see how “thinking green” affects population choices and which are the effects on the long-run.
• Lazy inspector(s). What if inspectors do not work efficiently? “Playing” with the “Laziness switch” will give us the answer.
• Oil crisis. What if a overall increase of the cost of cars and buses arise? Which are the marginal effects? Different costs give us different scenarios even the extreme case in which most agents prefer to move on foot.
• More and more inspectors. Is it convenient for the bus company to increase the number of inspectors? Up to which level? For which purposes? The answers are behind the number of inspectors slider.
In order to make a more likely representation of the reality several stochastic components have been implemented in different contexts: irrational (random) choices of agents, movement of inspectors and users of buses and also to establish each personal level of environmental sensibility.
• J. P. Carpenter
“Punishing Free-Riders: How Group Size Affects Mutual Monitoring and the Provision of Public Goods”
Available at: http://ftp.iza.org/dp1337.pdf
• U. Fischbacher & S. Gaechter
“Heterogeneous Social Preferences and the Dynamics of Free Riding in Public Goods”
Available at: http://ftp.iza.org/dp2011.pdf
• N.M. Gotts, J. G. Polhill & A. N. R. Law
“Agent-Based Simulation in the Study of Social Dilemmas”
Available at: http://dl.acm.org/citation.cfm?id=608970
• “Non saranno più gratis i bus a Verbania”, from Eco delle Città, 29/04/2013
Available at: http://www.ecodallecitta.it/notizie.php?id=102486
globals[private_cost public_cost bus-time cars-time publicmemo privatememo] breed [users user] breed [ticket_inspectors inspector] users-own [ticket publicusersmemo privateusersmemo] to setup clear-all ask patches with [pxcor >= 8] [set pcolor 47] ;; private transport zone ask patches with [pxcor <= -8] [set pcolor 27] ;; public transport zone ask patches [if pxcor < 8 and pxcor > -8 [set pcolor turquoise]] ;; no transport zone create-users 100 ask users [ set shape "person" set size 1.5 set color blue setxy (0 - random 4) random-ycor ;; agents are created in the central zone set heading 360 set publicusersmemo  set privateusersmemo ] create-ticket_inspectors number-inspectors ask ticket_inspectors [ set shape "person" set size 1.5 set color green setxy (-8 - random 8) random-ycor ] set private_cost cars-cost set public_cost bus-cost set bus-time 0 set cars-time 0 set publicmemo  set privatememo  reset-ticks end to go go-home choose_randomly choose-private choose-public check-ticket tick end to go-home if remainder ticks cycle-length = 0 [ifelse bus-cost = 0 [set pticket 0] [if count users with [color = red] = 0 and pticket < 1 and count users-on patches with [pcolor = 27] > 0 [set pticket (pticket + 0.01)]] set publicmemo lput count users-on patches with [pcolor = 27] publicmemo set privatememo lput count users-on patches with [pcolor = 47] privatememo ask users [ setxy (0 - random 4) random-ycor set ticket false set bus-time 0 set cars-time 0 set color blue set label "" set publicusersmemo last publicmemo set privateusersmemo last privatememo ]] end to choose_randomly ask n-of 10 users ;; ten agents move randomly [if pcolor = turquoise and remainder ticks cycle-length = 0 [ifelse random-float 1 < 0.5 [move-to one-of patches with [pcolor = 47] set cars-time (cars-time + 1) set color white] [move-to one-of patches with [pcolor = 27] set bus-time (bus-time + 1) set color white ifelse random-float 1 > pticket [set ticket true] [set ticket false]]] ] end to choose-private ask users [if pcolor = turquoise and remainder ticks cycle-length = 0 [if ( 1 - ( cars-time / count users)) > cars-cost + (environment_sensibility * random 10) [move-to one-of patches with [pcolor = 47] set cars-time (cars-time + 1) set color magenta set publicusersmemo ] if random-float 1 < 0.5 [if privateusersmemo >= 70 [move-to one-of patches with [pcolor = 27] set cars-time (cars-time - 1) set bus-time (bus-time + 1) ifelse random-float 1 > pticket [set ticket true] [set ticket false]]]] ] end to choose-public ask users [if pcolor = turquoise and remainder ticks cycle-length = 0 [ifelse bus-cost = 0 [set ticket true move-to one-of patches with [pcolor = 27] set privateusersmemo  set bus-time (bus-time + 1)] [if ( 1 - ( bus-time / count users)) > bus-cost [move-to one-of patches with [pcolor = 27] set bus-time (bus-time + 1) set privateusersmemo ifelse random-float 1 > pticket [set ticket true] [set ticket false]]] if random-float 1 < 0.5 [if publicusersmemo >= 70 [move-to one-of patches with [pcolor = 47] set bus-time (bus-time - 1) set cars-time (cars-time + 1)]]] ] end to check-ticket ask ticket_inspectors [if bus-cost = 0 [stop] ifelse lazy_inspector? [set label "zzz"] [set label "" move-to one-of patches with [pcolor = 27] let control one-of users-here ;; the inspector controls whether the agent in the public transport zone has or not the ticket; if control != nobody [ask control [if ticket = false and pcolor = 27 [set pticket (pticket - 0.01) set label "catched" set color red set heading 360 setxy (0 - random 4 ) random-ycor ]]]] ] end