This page was automatically generated by NetLogo 5.0beta2. Questions, problems? Contact feedback@ccl.northwestern.edu.
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 Sun's Java site. If the display appear cut off with Firefox, then try another browser (Safari works).
powered by NetLogo
view/download model file: SIPD-async-alter.nlogo
This section could give a general understanding of what the model is trying to show or explain.
This section could explain what rules the agents use to create the overall behavior of the model.
SETUP is used to initialize a new simulation.
GO FOR… runs for a specified number of generations
GO runs when clicked, stops when unclicked.
ROUNDS determines the number of rounds of interaction (or game
play) per generation.
The second group of sliders controls the payoff matrix (CC-R, CD-S, DC-T, DD-P). You will not need to change them for this project unless you want to investigate effects of the payoff matrix. For example DC-T is your reward when you defect but your opponent cooperates (the “Temptation”).
The next group of sliders controls the initial populations of the five strategies (N-All-C, N-All-D, N-TFT, N-Pav, N-RAN). Only the relative values of these quantities matter, and they are used to probabilistically initialize the starting population.
RANCOOP controls the Rand strategy's probability of cooperating.
NOISE controls the probability that in a given interaction a cell
will act randomly rather than in accord with its strategy.
METRIC controls the plot, either the size of the subpopulations or
their running average scores.
INSERT-STRATEGY allows you to select the strategy to be inserted.
TOGGKLE INSERT allows you to use the mouse to paint the chosen
strategy anywhere in the space. Click to paint.
The current generation number and the populations of the different strategies are shown by the six monitors. Note that the total population (number of cells) is 2500.
Watch for the formation of clusters of homogeneous strategies, which then spread.
This section could give some ideas of things for the user to try to do (move sliders, switches, etc.) with the model.
Try adding a mutation rate, which allows a strategy to change randomly rather than in accord with the evolution rule.
This section could point out any especially interesting or unusual features of NetLogo that the model makes use of, particularly in the Procedures tab. It might also point out places where workarounds were needed because of missing features.
This model is an extension and reimplementation in NetLogo of the sipd program described in ch. 17 of Gary William Flake’s “Computational Beauty of Nature” (MIT Press, 1998).
To refer to this model in academic publications, please use: MacLennan, B.J. (2007). NetLogo Spatial Iterated Prisoner’s Dilemma (SIPD) model. http://www.cs.utk.edu/~mclennan. Dept. of Electrical Engineering & Computer Science, Univ. of Tennessee, Knoxville.
In other publications, please use: Copyright 2007, 2012 Bruce MacLennan. All rights reserved. See http://web.eecs.utk.edu/~mclennan/420/NetLogo/SIPD-async-alter.html for terms of use.
globals [ All-D-color All-C-color TFT-color Rand-color Pav-color color-list pen-names num-strategies gen pop rel-nbrs inserting pops ] patches-own [ age strategy score previous-cooperations plan-coop? ] to startup set All-D-color red set All-C-color black set TFT-color green set Rand-color blue set Pav-color violet set color-list (list All-D-color All-C-color TFT-color Rand-color Pav-color) set pen-names ["All-D" "All-C" "TFT" "Rand" "Pav"] set num-strategies 5 set rel-nbrs [[0 1] [1 1] [1 0] [1 -1] [0 -1] [-1 -1] [-1 0] [-1 1]] end to setup ca startup set pop N-All-D + N-All-C + N-TFT + N-Ran + N-Pav set pops map [? / pop] (list N-All-D N-All-C N-TFT N-Ran N-Pav) ask patches [ initialize-patch ] set gen 0 reset-ticks do-plots end to initialize-patch let choice random pop ifelse choice < N-All-D [ init-patch-strategy 0 ] [ ifelse choice < (N-All-D + N-All-C) [ init-patch-strategy 1 ] [ ifelse choice < (N-All-D + N-All-C + N-TFT) [ init-patch-strategy 2 ] [ ifelse choice < (N-All-D + N-All-C + N-TFT + N-Ran) [ init-patch-strategy 3 ] [ init-patch-strategy 4 ]]]] set age random rounds end to init-patch-strategy [strat] ifelse strat = 0 [ initialize-All-D ] [ ifelse strat = 1 [ initialize-All-C ] [ ifelse strat = 2 [ initialize-TFT ] [ ifelse strat = 3 [ initialize-Rand ] [ initialize-Pav ]]]] set pcolor item strategy color-list set score 0 set previous-cooperations n-values 8 [true] end to initialize-All-D set strategy 0 set plan-coop? n-values 8 [false] end to initialize-All-C set strategy 1 set plan-coop? n-values 8 [true] end to initialize-TFT set strategy 2 set plan-coop? n-values 8 [true] end to initialize-Rand set strategy 3 set plan-coop? n-values 8 [ (random-float 1 < RANcoop) ] end to initialize-Pav set strategy 4 set plan-coop? n-values 8 [true] end to go repeat rounds [ do-one-round ] set gen gen + 1 do-plots end to do-one-round ask patches [ plan-act-with-all-neighbors ] ask patches [ do-act-with-all-neighbors ] end to plan-act-with-all-neighbors (foreach n-values 8 [?] previous-cooperations [ plan-act-with-one-neighbor ?1 ?2 ]) end to plan-act-with-one-neighbor [nbr prev-coop?] ifelse strategy = 0 [ All-D-interact nbr prev-coop? ] [ ifelse strategy = 1 [ All-C-interact nbr prev-coop? ] [ ifelse strategy = 2 [ TFT-interact nbr prev-coop? ] [ ifelse strategy = 3 [ Rand-interact nbr prev-coop? ] [ Pav-interact nbr prev-coop? ]]]] if noise > 0 [ if random-float 100 < noise [ set plan-coop? replace-item nbr plan-coop? not (item nbr plan-coop?) ]] end to All-D-interact [nbr prev-coop?] set plan-coop? replace-item nbr plan-coop? false end to All-C-interact [nbr prev-coop?] set plan-coop? replace-item nbr plan-coop? true end to TFT-interact [nbr prev-coop?] ifelse prev-coop? [ set plan-coop? replace-item nbr plan-coop? true ] [ set plan-coop? replace-item nbr plan-coop? false ] end to Rand-interact [nbr prev-coop?] set plan-coop? replace-item nbr plan-coop? (random-float 1 < RANcoop) end to Pav-interact [nbr prev-coop?] if not prev-coop? [ set plan-coop? replace-item nbr plan-coop? not (item nbr plan-coop?) ] end to do-act-with-all-neighbors (foreach n-values 8 [?] plan-coop? [ let ndx item 0 (item ?1 rel-nbrs) let ndy item 1 (item ?1 rel-nbrs) let rev-index position (list (- ndx) (- ndy)) rel-nbrs do-act-with-one-neighbor ?1 ?2 [item rev-index plan-coop?] of patch-at ndx ndy ]) set age age + 1 if age > rounds [ evolve ] end to do-act-with-one-neighbor [nbr coop? nbr-coop?] ifelse strategy = 0 [ All-D-act nbr coop? nbr-coop? ] [ ifelse strategy = 1 [ All-C-act nbr coop? nbr-coop? ] [ ifelse strategy = 2 [ TFT-act nbr coop? nbr-coop? ] [ ifelse strategy = 3 [ Rand-act nbr coop? nbr-coop? ] [ Pav-act nbr coop? nbr-coop? ]]]] end to All-D-act [nbr coop? nbr-coop?] ifelse nbr-coop? [ set score score + DC-T ] [ set score score + DD-P ] end to All-C-act [nbr coop? nbr-coop?] ifelse nbr-coop? [ set score score + CC-R ] [ set score score + CD-S ] end to TFT-act [nbr coop? nbr-coop?] ifelse coop? [ ifelse nbr-coop? [ set score score + CC-R set previous-cooperations replace-item nbr previous-cooperations true ] [ set score score + CD-S set previous-cooperations replace-item nbr previous-cooperations false ]] [ ifelse nbr-coop? [ set score score + DC-T set previous-cooperations replace-item nbr previous-cooperations true ] [ set score score + DD-P set previous-cooperations replace-item nbr previous-cooperations false ]] end to Rand-act [nbr coop? nbr-coop?] ifelse coop? [ ifelse nbr-coop? [ set score score + CC-R ] [ set score score + CD-S ] ] [ ifelse nbr-coop? [ set score score + DC-T ] [ set score score + DD-P ] ] end to Pav-act [nbr coop? nbr-coop?] ifelse coop? [ ifelse nbr-coop? [ set score score + CC-R set previous-cooperations replace-item nbr previous-cooperations true ] [ set score score + CD-S set previous-cooperations replace-item nbr previous-cooperations false ] ] [ ifelse nbr-coop? [ set score score + DC-T set previous-cooperations replace-item nbr previous-cooperations true ] [ set score score + DD-P set previous-cooperations replace-item nbr previous-cooperations false ] ] end to evolve let best-nbr one-of (neighbors with-max [score]) if score < [score] of best-nbr [ set strategy [strategy] of best-nbr set pcolor item strategy color-list ] set previous-cooperations n-values 8 [true] set score 0 set age 0 end to do-plots set pops map [count patches with [strategy = ?]] n-values num-strategies [?] ifelse metric = "population" [ set-plot-y-range 0 world-width * world-height foreach n-values num-strategies [?] [ set-current-plot-pen item ? pen-names plot item ? pops ] ][ set-plot-y-range 0 max (list CC-R CD-S DC-T DD-P) foreach n-values num-strategies [?] [ set-current-plot-pen item ? pen-names plot (mean lput 0 [score] of patches with [strategy = ?]) / (rounds * 8) ] ] end to deposit-agents if mouse-down? [ask patches [if ((abs (pxcor - mouse-xcor)) < 1) and ((abs (pycor - mouse-ycor)) < 1) [ init-patch-strategy position insert-strategy ["All-D" "All-C" "TFT" "Rand" "Pav"] set age rounds ] ]] set pops map [count patches with [strategy = ?]] n-values num-strategies [?] end