Stefania Basiglio Matteo Mondino Davide Ritaccio

Simulation models for economics

"Free riders and public transport."

 

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.


Here you can find an introduction to the Free riders and public transport application.


powered by NetLogo

view/download model file: free-riders_and_public_transport.nlogo

WHAT IS IT?

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.

HOW IT WORKS

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.

HOW TO USE IT

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.

THINGS TO NOTICE

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).

THINGS TO TRY

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.

NETLOGO FEATURES

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.

CREDITS AND REFERENCES

• 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

CODE

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