Public Good
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:
- Wilensky, U. (2003). NetLogo HubNet Public Good model. http://ccl.northwestern.edu/netlogo/models/HubNetPublicGood. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
COPYRIGHT AND LICENSE
Copyright 2003 Uri Wilensky.
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Public Good.png | preview | Preview for 'Public Good' | over 11 years ago, by Uri Wilensky | Download |
This model does not have any ancestors.
This model does not have any descendants.