Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; Seth Teekens
- ;; 5550068
- ;; s.v.teekens@students.uu.nl
- ; globale variabelen
- globals [
- activestrategies
- scoretable
- proportions
- waverage
- proplist
- ]
- to setup
- clear-all
- ; maak schaakbord
- ask patches with [(pxcor + pycor) mod 2 = 0] [set pcolor 1]
- ;strategieën om uit te kiezen
- let strategies [ "always-cooperate" "always-defect" "unforgiving" "tit-for-tat" "play-random" "pavlov" "tit-for-two-tats" "Joss-5%-strategy" "pessimistic-strategy" "majority " ]
- ; kiest aantal strategieën in volgorde en print naam
- if choose-contenders = "in-order"[
- set activestrategies []
- set activestrategies lput "always-cooperate" activestrategies
- let i 1
- repeat (nr-of-contenders - 1) [
- set activestrategies lput (item i strategies) activestrategies
- set i i + 1
- ]
- let x 0
- let y 0
- if nr-of-contenders > 0 [ask patch x y [set plabel "always cooperate" set plabel-color yellow] ]
- if nr-of-contenders > 1 [ask patch x (y - 1) [set plabel "always defect" set plabel-color yellow] ]
- if nr-of-contenders > 2 [ask patch x (y - 2) [set plabel "unforgiving" set plabel-color yellow] ]
- if nr-of-contenders > 3 [ask patch x (y - 3) [set plabel "Tit-for-tat" set plabel-color yellow] ]
- if nr-of-contenders > 4 [ask patch x (y - 4) [set plabel "play-random" set plabel-color yellow] ]
- if nr-of-contenders > 5 [ask patch x (y - 5) [set plabel "pavlov" set plabel-color yellow] ]
- if nr-of-contenders > 6 [ask patch x (y - 6) [set plabel "tit-for-two-tats" set plabel-color yellow] ]
- if nr-of-contenders > 7 [ask patch x (y - 7) [set plabel "Joss-5%-strategy" set plabel-color yellow] ]
- if nr-of-contenders > 8 [ask patch x (y - 8) [set plabel "pessimistic-strategy" set plabel-color yellow] ]
- if nr-of-contenders > 9 [ask patch x (y - 9) [set plabel "majority " set plabel-color yellow] ]
- ]
- ; kiest aantal strategieën willekeurig en print naam
- if choose-contenders = "random"[
- set activestrategies (list)
- set activestrategies lput "always-cooperate" activestrategies
- set strategies remove "always-cooperate" strategies
- let x 0
- let y 0
- if nr-of-contenders > 0 [ask patch x y [set plabel "always cooperate" set plabel-color yellow] ]
- let i 0
- let q 1
- repeat (nr-of-contenders - 1) [
- set i random Length strategies ; 1<i<length active
- set activestrategies lput (item i strategies) activestrategies
- set strategies remove item i strategies strategies
- if nr-of-contenders > 1 [ask patch x (y - q) [set plabel item q activestrategies set plabel-color yellow] ]
- set q q + 1
- ]
- ]
- ; resize-world -4 (length activestrategies + 2) (0 - (length activestrategies + 2)) 0
- ; set-patch-size round (192 / (length activestrategies))
- ;mogelijke proportie verdelingen
- if initialisation-method = "user" [
- set proportions user-proportions Length activestrategies
- ]
- if initialisation-method = "uniform" [
- set proportions uniform-proportion Length activestrategies
- ]
- if initialisation-method = "random" [
- set proportions random-proportion Length activestrategies
- ]
- if initialisation-method = "biased" [
- set proportions biased-proportion Length activestrategies
- ]
- calcscoretable
- ;berekend gewogen score
- let j 0
- repeat Length activestrategies [
- set waverage (list)
- let i 0
- let s (list)
- ask patch (j + 1) (- Length activestrategies) [set plabel precision (item j proportions) 1 set plabel-color cyan] ; toont proportie
- repeat Length activestrategies [
- set s lput ((item i (item j scoretable)) * item i proportions) s ; M * p
- set waverage lput (reduce + s ) waverage
- ask patch ( Length activestrategies + 2) (- j) [set plabel precision (item i waverage) 1 set plabel-color orange]
- set i i + 1
- ]
- set j j + 1
- ]
- ; tekst monitor
- output-type "There are " output-type Length activestrategies output-print " activestrategies:"
- output-print ""
- let i 0
- let namen activestrategies
- repeat Length activestrategies[
- output-print item i namen
- set namen remove item i namen namen
- ]
- output-print ""
- output-print "First row: score of always-cooperate against the rest in" output-type restarts output-type " tournaments of " output-type rounds output-type " rounds, and so on."
- output-print ""
- output-print ""
- output-type "Due to noise (every player does a " output-type noise output-type " % random move), scores may vary."
- output-print "- Green is average score."
- output-print "- Orange is score weighted by proportions."
- output-print "- Blue represents initial proportions."
- output-print "- Pink represents running proportions. (Same as what is plotted)."
- reset-ticks
- end
- ; berekent en toont de score tabel
- to calcscoretable
- let i 0
- let s 0
- set scoretable (list) ;matrix
- repeat length activestrategies [
- let j 0
- let temp (list) ;score per strategie
- repeat Length activestrategies[
- set temp lput score-functie (item i activestrategies) (item j activestrategies) temp
- ask patch (j + 1) (- i) [set plabel score-functie (item i activestrategies) (item j activestrategies)] ;toont score-tabel
- ; ask patch (i + 1) (- Length activestrategies) [set plabel precision (item i proportions) 1 set plabel-color cyan] ; toont proporties
- ; ask patch (j + 2) (- i) [set plabel ] ; berkenings score verwachting ;berekend gewogen score scoretable * proporties
- set j j + 1
- ]
- let average 0
- set average precision ((average + ( reduce + temp ) / Length activestrategies)) 1 ;berekent gemiddelde
- ask patch (Length activestrategies + 1) (- i) [set plabel average set plabel-color lime] ;toont gemiddelde
- set i i + 1
- set scoretable lput temp scoretable
- ]
- end
- to step
- end
- to-report payout[actie1 actie2]
- if actie1 = 0 AND actie2 = 0 [report 3]
- if actie1 = 0 AND actie2 = 1 [report 0]
- if actie1 = 1 AND actie2 = 0 [report 5]
- if actie1 = 1 AND actie2 = 1 [report 1]
- end
- ;geeft gemiddelde payof van strat1 over aantal rondes en restarts
- to-report score-functie [ strat1 strat2 ]
- let total 0
- ;repeat nr-of-contenders [
- repeat restarts [
- let history1 (list)
- let history2 (list)
- repeat rounds [
- ;uit activestrategies lijst, de score van strategie ophalen
- show strat1
- show strat2
- let actie1 play strat1 history1 history2
- let actie2 play strat2 history2 history1
- set history1 lput actie1 history1
- set history2 lput actie2 history2
- set total total + payout actie1 actie2
- ]];]
- report precision (total / (rounds * restarts)) 1
- end
- ;proportiewaarden aan de hand van n aantal strategieën
- to-report user-proportions [ n ]
- end
- to-report uniform-proportion [ n ]
- set proplist (list)
- repeat n [
- set proplist lput (1 / n) proplist
- ]
- report proplist
- end
- to-report biased-proportion [ n ]
- set proplist (list)
- let i 0
- while [i < (strategy-to-bias - 1)] [
- set proplist lput ((1 - bias) / (n - 1)) proplist
- set i i + 1
- ]
- set proplist lput bias proplist
- set i i + 1
- while [i < n][
- set proplist lput ((1 - bias) / (n - 1)) proplist
- set i i + 1
- ]
- report proplist
- end
- to-report random-proportion [ n ]
- report project-on-simplex n-values n [ 0 - ln random-float 1 ]
- end
- ; Laat elementen tot 1 sommeren. Alle elementen uit "list" moeten niet-
- ; negatief zijn en ten minste een element uit "list" moet positief zijn.
- to-report project-on-simplex [ poslist ]
- let s sum poslist
- report map [ x -> x / s ] poslist
- end
- to reset
- end
- to rscenario
- end
- ;speel-functie, rapporteert de te spelen actie
- to-report play [ some-strategy my-history your-history ]
- report ifelse-value (random-float 1.0 < noise) [
- random 2 ; i.e., index van willekeurige actie
- ] [
- ; fabriceer de aanroepstring, en evalueer deze
- runresult (word some-strategy " my-history your-history")
- ]
- end
- to inwendigproduct
- end
- ; strategiën 0 = C 1 = D
- ;altijd C
- to-report always-cooperate [ my-history your-history ]
- report 0
- end
- ;altijd D
- to-report always-defect [ my-history your-history ]
- report 1
- end
- to-report unforgiving [ my-history your-history ] ; ook wel bekend als
- if member? 1 your-history [ report 1 ] ; Friedman of grim trigger
- report 0
- end
- to-report play-random [ my-history your-history ]
- let rand random-float 1
- if rand < 0.5 [report 0]
- if rand >= 0.5 [report 1]
- end
- to-report tit-for-tat [my-history your-history ]
- ifelse empty? your-history [ report 0 ][ ifelse last your-history = 0 [ report 0 ] [ report 1 ] ]
- end
- to-report pavlov [my-history your-history]
- ifelse empty? my-history [ ifelse random 2 = 0 [ report 0] [ report 1 ] ] [
- ifelse last your-history = 0 [
- ifelse last my-history = 0 [ report 0 ] [ report 1 ] ] [
- ifelse last my-history = 0 [ report 1 ] [ report 0 ] ] ]
- end
- to-report tit-for-two-tats [my-history your-history]
- ifelse length your-history < 2 [ report 0 ][
- ifelse (last your-history = 1) and (item (length your-history - 2) your-history = 1)
- [ report 1] [ report 0 ] ]
- end
- ;Begin C. Als partner D speelt, speel jij ook D. Als partner C kiest, dan speel je met 5% kans (1 op 20) D
- to-report Joss-5%-strategy [my-history your-history]
- ifelse empty? my-history [ report 0 ] ; de eerste zet is C
- [ ifelse last your-history = 1 [ report 1]
- [ ifelse random random 100 < 5 [ report 1 ] [ report 0 ] ] ]
- end
- ;verwacht dat tegenstander D speelt, kijk DD en CD, kies strategie voor max winst
- to-report pessimistic-strategy [my-history your-history]
- ifelse empty? my-history [ report 1 ] ; de eerste zet is D
- [ ifelse last your-history = 1 ; als tegenstander D kiest
- [report 1] ; speel D
- [ report 0 ]] ; en anders C
- end
- ; Begin C. Kijk hoeveel tegenstander Cs en Ds heeft gespeeld. Speel welke hij het meest heeft gespeeld.
- ; Als evenveel Cs als Ds: C als 'weak-majority', D als 'weak-majority'. Wij kiezen voor strong, dus: C.
- to-report majority [my-history your-history]
- ifelse empty? your-history [ report 0 ][
- ifelse length filter [ x -> x = 0 ] your-history > (length my-history) / 2 [
- report 0 ] [ report 1 ] ]
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement