Public Good

Public Good preview image

1 collaborator

Uri_dolphin3 Uri Wilensky (Author)

Tags

(This model has yet to be categorized with any tags)
Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0beta1 • Viewed 635 times • Downloaded 47 times • Run 0 times
Download the 'Public Good' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

Public Good is a game that asks each of the players to contribute to a common pool that will then be multiplied by the game leader and redistributed to all players.

The standard economic prediction based on 'rational' behavior is that all individuals will contribute nothing. However, in practice, players show a wide diversity of strategies. This game also allows players to pay to remove money from players who are 'doing too well.'

The game can be used to demonstrate basic multiplication, cooperative behavior, and the evolution of altruism as players negotiate fair play.

HOW IT WORKS

At the beginning of the game, all players are given the same amount of money. Each turn begins with players anonymously deciding how much money to contribute to a common pool held by the game leader. Then the game leader collects the money and multiplies it by a number greater than one, and then redistributes this money to all the players. At any point during the game a player may press the "punish the rich" button which takes away one dollar from the presser and one dollar from the richest player. The game continues like this until the game leader decides it is an appropriate time to stop.

HOW TO USE IT

To begin the game, have students log into the game by initiating their HubNet clients.

Once all players have logged in, the game leader can press "Go" to make players visible in the public space. Then press "Restart Activity" to give each player their starting amount of money (10$). After pressing "Restart Activity" the players should be asked to move their "fraction-put-in" slider to control the amount of money they want to contribute to the common pool to be collected by the game leader. The game moves through "Take Money"-"Give Money" cycles. "Take Money" collects money from all the players and removes it from their individual accounts; the cumulative amount taken is visible in the "Bank". This turns each player's turtle the color white. Then the money is doubled and redistributed equally to all players by pressing "Give Money." This returns the players to their former color.

Players can press the "pay-1-dollar-to-punish-the-rich" button at any time, which takes one dollar from their accounts but also removes one dollar from the wealthiest players account.

The game leader may choose to end the game after a certain number of turns or after a certain player reaches a specific dollar amount in their account.

"labels-on?" will allow players to see names next to each of the accounts visible in the public viewing space. By turning the labels "off" students can remain anonymous during the game.

THINGS TO NOTICE

Discussion on the following topics may be appropriate for different levels of players:

  • How does the fraction slider affect how much money is given to the bank?
  • How does the participation of other players affect the outcome for each individual?
  • Can predictions be made about how much money will be returned for specific investments? Are the predictions correct? Why or why not?
  • How do different individuals play? What is the best way to play? Would this change if individuals were put into small teams who competed against one another?
  • What role does punishment play in this game? How can it be used effectively?
  • How is this game like or not like real life situations where cooperation is necessary?
  • How might situations like this in real life lead to altruistic behavior on the part of the participants?

THINGS TO TRY

Try playing the game once with labels "Off" then once with labels "On." Does this change the game play?

Try changing the multiplier that the bank uses to increase the money before it is redistributed.

CREDITS AND REFERENCES

Here are some references to increase your understanding and appreciation of this game and others like it

Henrich, J. and R. Boyd and S.Bowles and C. Camerer and E.Fehr and H. Gintis and R. McElreath (2001) Cooperation, Reciprocity and Punishment in Fifteen Small-scale Societies," Working Papers 01-01-007, Santa Fe Institute.

Sanfey, A. et al. (2003) The Neural basis of economic decision-making in the ultimatum game. Science 300: 1755-1758.

HOW TO CITE

If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software:

COPYRIGHT AND LICENSE

Copyright 2003 Uri Wilensky.

CC BY-NC-SA 3.0

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

This activity and associated models and materials were created as part of the projects: PARTICIPATORY SIMULATIONS: NETWORK-BASED DESIGN FOR SYSTEMS LEARNING IN CLASSROOMS and/or INTEGRATED SIMULATION AND MODELING ENVIRONMENT. The project gratefully acknowledges the support of the National Science Foundation (REPP & ROLE programs) -- grant numbers REC #9814682 and REC-0126227.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Variable and Breed declarations ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

globals
[
   turn
   bank

   good-patches
]

breed [ students student ]

students-own
[
  user-id
  investment
  my-money
  return-investment
  invested
  fraction-put-in
  punishing
  base-color
]


;;;;;;;;;;;;;;;;;;;;;
;; Setup Functions ;;
;;;;;;;;;;;;;;;;;;;;;

to startup
  setup
  hubnet-reset
end 

to setup
  reset-ticks
  ask patches [ set pcolor white ]
  set good-patches patches with [pxcor mod 2 = 0 xor pycor mod 2 = 0 and ( abs ( pxcor - min-pxcor) > 2 ) ]
end 

;;;;;;;;;;;;;;;;;;;;;;;
;; Runtime Functions ;;
;;;;;;;;;;;;;;;;;;;;;;;

to go
  ;; get commands and data from the clients
  listen-clients

  every 0.5 [
    ask students
    [
      ifelse (labels-on?)
      [
        set label ( word  user-id ", $" my-money )
      ]
      [
        set label ( word  my-money )
      ]
    ]
    tick
 ]
end 

to start-over
  set turn 1
  ask students [ reset-student-money ]
end 

to reset-student-money
  set my-money 10
  hubnet-send user-id "my-money" standardize-money my-money
  set investment 5
  hubnet-send user-id "Money Put In" (investment)
  set invested 0
  set return-investment 0
  set label ""
  set bank 0
  set punishing 0
end 

to-report standardize-money [ money ]
  report precision money 2
end 

to take-money
   ask students
   [
     set investment round ( fraction-put-in * my-money )
     hubnet-send user-id "Money Put In" (investment)
   ]

  ;;;turn turtles from green to white
  ask turtles [set color base-color]
  wait .1
  repeat 3
  [
    ask turtles [set color color + 1]
    wait .1
  ]
  ask turtles [set color base-color + 4.5]
  wait .2
  ;;;end of turning turtles from green to white

  ask students
  [
    set bank  investment  + bank
    set my-money standardize-money ( my-money -  investment )
    hubnet-send user-id "my-money" (my-money)
    set punishing 0
  ]
  plot bank
  wait 1
end 

to give-money
  ;;;turn turtles from white to green
  ask students [set color base-color + 4.5]
  wait .3
  ask students [set color base-color + 3]
  wait .2
  repeat 3
  [
    ask students
    [set color color - 1]
    wait .1
  ]
  ;;;end of turning turtles from white to green

  set turn turn + 1
  set bank bank * 2

  ask students
  [
    set my-money my-money + ( bank / count students )
    set my-money standardize-money my-money

    hubnet-send user-id "my-money" (my-money)
    ifelse (labels-on?)
    [
      set label ( word  user-id ", " my-money )
    ]
    [
      set label ( word  my-money )
    ]
    set punishing 0
  ]
  set bank 0
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Code for interacting with the clients ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; determines which client sent a command, and what the command was

to listen-clients
  while [ hubnet-message-waiting? ]
  [
    hubnet-fetch-message
    ifelse hubnet-enter-message?
    [ create-new-student display ]
    [
      ifelse hubnet-exit-message?
      [ remove-student display ]
      [ execute-command hubnet-message-tag ]
    ]
  ]
end 

to execute-command [command]
  if command = "fraction-put-in"
  [
      ask students with [user-id = hubnet-message-source]
      [
        set fraction-put-in hubnet-message
      ]
      ask students
      [
        set investment round ( fraction-put-in * my-money )
        hubnet-send user-id "Money Put In" (investment)
      ]
  ]

  if command = "pay-1-dollar-to-punish-the-rich"
  [
    ask students with [user-id = hubnet-message-source]
    [
      set my-money my-money - 1
      hubnet-send user-id "my-money" (my-money)
    ]

    ask max-one-of students [my-money]
    [
      set my-money my-money - 1
      hubnet-send user-id "my-money" (my-money)
      set punishing 1
    ]
  ]
end 

to create-new-student
  create-students 1
  [
    setup-student-vars
    send-info-to-clients
  ]
end 

;; sets the turtle variables to appropriate initial values

to setup-student-vars  ;; turtle procedure
  set user-id hubnet-message-source
  set shape "circle"
  set base-color one-of [ blue gray yellow brown red orange magenta cyan violet ]
  set color base-color
  set label-color black
  set fraction-put-in 0.50
  let my-patch one-of good-patches with [ not any? turtles-here ]
  ifelse (my-patch != nobody)
    [ move-to my-patch ]
    [ setxy random-xcor random-ycor ]
  reset-student-money
end 

;; sends the appropriate monitor information back to the client

to send-info-to-clients
  hubnet-send user-id "You are:" (user-id)
end 

;; Kill the turtle, set its shape, color, and position
;; and tell the node what its turtle looks like and where it is

to remove-student
  ask students with [user-id = hubnet-message-source]
  [ die ]
end 


; Copyright 2003 Uri Wilensky.
; See Info tab for full copyright and license.

There are 7 versions of this model.

Uploaded by When Description Download
Uri Wilensky almost 11 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky over 11 years ago Updated version tag Download this version
Uri Wilensky over 11 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky over 12 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Public Good Download this version
Uri Wilensky almost 14 years ago Public Good Download this version

Attached files

File Type Description Last updated
Public Good.png preview Preview for 'Public Good' about 11 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.