Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.33 KB | None | 0 0
  1. ;; Seth Teekens
  2. ;; 5550068
  3. ;; s.v.teekens@students.uu.nl
  4.  
  5. ; globale variabelen
  6. globals [
  7. activestrategies
  8. scoretable
  9. proportions
  10. waverage
  11. proplist
  12. ]
  13.  
  14. to setup
  15. clear-all
  16.  
  17.  
  18. ; maak schaakbord
  19. ask patches with [(pxcor + pycor) mod 2 = 0] [set pcolor 1]
  20.  
  21. ;strategieën om uit te kiezen
  22. let strategies [ "always-cooperate" "always-defect" "unforgiving" "tit-for-tat" "play-random" "pavlov" "tit-for-two-tats" "Joss-5%-strategy" "pessimistic-strategy" "majority " ]
  23.  
  24. ; kiest aantal strategieën in volgorde en print naam
  25. if choose-contenders = "in-order"[
  26. set activestrategies []
  27. set activestrategies lput "always-cooperate" activestrategies
  28. let i 1
  29. repeat (nr-of-contenders - 1) [
  30. set activestrategies lput (item i strategies) activestrategies
  31. set i i + 1
  32. ]
  33. let x 0
  34. let y 0
  35. if nr-of-contenders > 0 [ask patch x y [set plabel "always cooperate" set plabel-color yellow] ]
  36. if nr-of-contenders > 1 [ask patch x (y - 1) [set plabel "always defect" set plabel-color yellow] ]
  37. if nr-of-contenders > 2 [ask patch x (y - 2) [set plabel "unforgiving" set plabel-color yellow] ]
  38. if nr-of-contenders > 3 [ask patch x (y - 3) [set plabel "Tit-for-tat" set plabel-color yellow] ]
  39. if nr-of-contenders > 4 [ask patch x (y - 4) [set plabel "play-random" set plabel-color yellow] ]
  40. if nr-of-contenders > 5 [ask patch x (y - 5) [set plabel "pavlov" set plabel-color yellow] ]
  41. if nr-of-contenders > 6 [ask patch x (y - 6) [set plabel "tit-for-two-tats" set plabel-color yellow] ]
  42. if nr-of-contenders > 7 [ask patch x (y - 7) [set plabel "Joss-5%-strategy" set plabel-color yellow] ]
  43. if nr-of-contenders > 8 [ask patch x (y - 8) [set plabel "pessimistic-strategy" set plabel-color yellow] ]
  44. if nr-of-contenders > 9 [ask patch x (y - 9) [set plabel "majority " set plabel-color yellow] ]
  45. ]
  46.  
  47. ; kiest aantal strategieën willekeurig en print naam
  48. if choose-contenders = "random"[
  49. set activestrategies (list)
  50. set activestrategies lput "always-cooperate" activestrategies
  51. set strategies remove "always-cooperate" strategies
  52. let x 0
  53. let y 0
  54. if nr-of-contenders > 0 [ask patch x y [set plabel "always cooperate" set plabel-color yellow] ]
  55. let i 0
  56. let q 1
  57. repeat (nr-of-contenders - 1) [
  58. set i random Length strategies ; 1<i<length active
  59. set activestrategies lput (item i strategies) activestrategies
  60. set strategies remove item i strategies strategies
  61. if nr-of-contenders > 1 [ask patch x (y - q) [set plabel item q activestrategies set plabel-color yellow] ]
  62. set q q + 1
  63.  
  64. ]
  65. ]
  66.  
  67.  
  68.  
  69. ; resize-world -4 (length activestrategies + 2) (0 - (length activestrategies + 2)) 0
  70. ; set-patch-size round (192 / (length activestrategies))
  71.  
  72. ;mogelijke proportie verdelingen
  73. if initialisation-method = "user" [
  74. set proportions user-proportions Length activestrategies
  75. ]
  76. if initialisation-method = "uniform" [
  77. set proportions uniform-proportion Length activestrategies
  78. ]
  79. if initialisation-method = "random" [
  80. set proportions random-proportion Length activestrategies
  81. ]
  82. if initialisation-method = "biased" [
  83. set proportions biased-proportion Length activestrategies
  84. ]
  85.  
  86. calcscoretable
  87.  
  88. ;berekend gewogen score
  89. let j 0
  90.  
  91. repeat Length activestrategies [
  92.  
  93. set waverage (list)
  94. let i 0
  95. let s (list)
  96. ask patch (j + 1) (- Length activestrategies) [set plabel precision (item j proportions) 1 set plabel-color cyan] ; toont proportie
  97.  
  98.  
  99. repeat Length activestrategies [
  100.  
  101. set s lput ((item i (item j scoretable)) * item i proportions) s ; M * p
  102. set waverage lput (reduce + s ) waverage
  103.  
  104. ask patch ( Length activestrategies + 2) (- j) [set plabel precision (item i waverage) 1 set plabel-color orange]
  105. set i i + 1
  106.  
  107. ]
  108.  
  109. set j j + 1
  110. ]
  111.  
  112. ; tekst monitor
  113. output-type "There are " output-type Length activestrategies output-print " activestrategies:"
  114. output-print ""
  115. let i 0
  116. let namen activestrategies
  117. repeat Length activestrategies[
  118. output-print item i namen
  119. set namen remove item i namen namen
  120.  
  121. ]
  122. output-print ""
  123. 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."
  124. output-print ""
  125. output-print ""
  126. output-type "Due to noise (every player does a " output-type noise output-type " % random move), scores may vary."
  127. output-print "- Green is average score."
  128. output-print "- Orange is score weighted by proportions."
  129. output-print "- Blue represents initial proportions."
  130. output-print "- Pink represents running proportions. (Same as what is plotted)."
  131.  
  132.  
  133.  
  134. reset-ticks
  135. end
  136.  
  137.  
  138.  
  139. ; berekent en toont de score tabel
  140. to calcscoretable
  141.  
  142. let i 0
  143. let s 0
  144. set scoretable (list) ;matrix
  145. repeat length activestrategies [
  146. let j 0
  147. let temp (list) ;score per strategie
  148.  
  149. repeat Length activestrategies[
  150. set temp lput score-functie (item i activestrategies) (item j activestrategies) temp
  151. ask patch (j + 1) (- i) [set plabel score-functie (item i activestrategies) (item j activestrategies)] ;toont score-tabel
  152. ; ask patch (i + 1) (- Length activestrategies) [set plabel precision (item i proportions) 1 set plabel-color cyan] ; toont proporties
  153. ; ask patch (j + 2) (- i) [set plabel ] ; berkenings score verwachting ;berekend gewogen score scoretable * proporties
  154.  
  155. set j j + 1
  156. ]
  157. let average 0
  158. set average precision ((average + ( reduce + temp ) / Length activestrategies)) 1 ;berekent gemiddelde
  159. ask patch (Length activestrategies + 1) (- i) [set plabel average set plabel-color lime] ;toont gemiddelde
  160.  
  161. set i i + 1
  162.  
  163. set scoretable lput temp scoretable
  164. ]
  165.  
  166.  
  167. end
  168.  
  169. to step
  170.  
  171.  
  172.  
  173.  
  174. end
  175.  
  176.  
  177. to-report payout[actie1 actie2]
  178.  
  179. if actie1 = 0 AND actie2 = 0 [report 3]
  180. if actie1 = 0 AND actie2 = 1 [report 0]
  181. if actie1 = 1 AND actie2 = 0 [report 5]
  182. if actie1 = 1 AND actie2 = 1 [report 1]
  183.  
  184. end
  185.  
  186. ;geeft gemiddelde payof van strat1 over aantal rondes en restarts
  187. to-report score-functie [ strat1 strat2 ]
  188.  
  189. let total 0
  190. ;repeat nr-of-contenders [
  191. repeat restarts [
  192. let history1 (list)
  193. let history2 (list)
  194.  
  195. repeat rounds [
  196. ;uit activestrategies lijst, de score van strategie ophalen
  197. show strat1
  198. show strat2
  199. let actie1 play strat1 history1 history2
  200. let actie2 play strat2 history2 history1
  201.  
  202. set history1 lput actie1 history1
  203. set history2 lput actie2 history2
  204. set total total + payout actie1 actie2
  205.  
  206. ]];]
  207.  
  208. report precision (total / (rounds * restarts)) 1
  209. end
  210.  
  211. ;proportiewaarden aan de hand van n aantal strategieën
  212. to-report user-proportions [ n ]
  213. end
  214.  
  215. to-report uniform-proportion [ n ]
  216. set proplist (list)
  217. repeat n [
  218. set proplist lput (1 / n) proplist
  219. ]
  220. report proplist
  221. end
  222.  
  223. to-report biased-proportion [ n ]
  224. set proplist (list)
  225. let i 0
  226.  
  227. while [i < (strategy-to-bias - 1)] [
  228. set proplist lput ((1 - bias) / (n - 1)) proplist
  229. set i i + 1
  230. ]
  231.  
  232. set proplist lput bias proplist
  233. set i i + 1
  234.  
  235. while [i < n][
  236. set proplist lput ((1 - bias) / (n - 1)) proplist
  237. set i i + 1
  238. ]
  239. report proplist
  240.  
  241. end
  242.  
  243. to-report random-proportion [ n ]
  244. report project-on-simplex n-values n [ 0 - ln random-float 1 ]
  245. end
  246.  
  247. ; Laat elementen tot 1 sommeren. Alle elementen uit "list" moeten niet-
  248. ; negatief zijn en ten minste een element uit "list" moet positief zijn.
  249. to-report project-on-simplex [ poslist ]
  250. let s sum poslist
  251. report map [ x -> x / s ] poslist
  252. end
  253.  
  254.  
  255.  
  256. to reset
  257. end
  258.  
  259. to rscenario
  260. end
  261.  
  262.  
  263. ;speel-functie, rapporteert de te spelen actie
  264. to-report play [ some-strategy my-history your-history ]
  265. report ifelse-value (random-float 1.0 < noise) [
  266. random 2 ; i.e., index van willekeurige actie
  267. ] [
  268. ; fabriceer de aanroepstring, en evalueer deze
  269. runresult (word some-strategy " my-history your-history")
  270. ]
  271. end
  272.  
  273. to inwendigproduct
  274.  
  275. end
  276.  
  277. ; strategiën 0 = C 1 = D
  278.  
  279. ;altijd C
  280. to-report always-cooperate [ my-history your-history ]
  281. report 0
  282. end
  283.  
  284. ;altijd D
  285. to-report always-defect [ my-history your-history ]
  286. report 1
  287. end
  288.  
  289. to-report unforgiving [ my-history your-history ] ; ook wel bekend als
  290. if member? 1 your-history [ report 1 ] ; Friedman of grim trigger
  291. report 0
  292. end
  293.  
  294. to-report play-random [ my-history your-history ]
  295. let rand random-float 1
  296. if rand < 0.5 [report 0]
  297. if rand >= 0.5 [report 1]
  298. end
  299.  
  300. to-report tit-for-tat [my-history your-history ]
  301. ifelse empty? your-history [ report 0 ][ ifelse last your-history = 0 [ report 0 ] [ report 1 ] ]
  302. end
  303.  
  304. to-report pavlov [my-history your-history]
  305. ifelse empty? my-history [ ifelse random 2 = 0 [ report 0] [ report 1 ] ] [
  306. ifelse last your-history = 0 [
  307. ifelse last my-history = 0 [ report 0 ] [ report 1 ] ] [
  308. ifelse last my-history = 0 [ report 1 ] [ report 0 ] ] ]
  309. end
  310.  
  311. to-report tit-for-two-tats [my-history your-history]
  312. ifelse length your-history < 2 [ report 0 ][
  313. ifelse (last your-history = 1) and (item (length your-history - 2) your-history = 1)
  314. [ report 1] [ report 0 ] ]
  315. end
  316.  
  317. ;Begin C. Als partner D speelt, speel jij ook D. Als partner C kiest, dan speel je met 5% kans (1 op 20) D
  318. to-report Joss-5%-strategy [my-history your-history]
  319. ifelse empty? my-history [ report 0 ] ; de eerste zet is C
  320. [ ifelse last your-history = 1 [ report 1]
  321. [ ifelse random random 100 < 5 [ report 1 ] [ report 0 ] ] ]
  322. end
  323. ;verwacht dat tegenstander D speelt, kijk DD en CD, kies strategie voor max winst
  324. to-report pessimistic-strategy [my-history your-history]
  325. ifelse empty? my-history [ report 1 ] ; de eerste zet is D
  326. [ ifelse last your-history = 1 ; als tegenstander D kiest
  327. [report 1] ; speel D
  328. [ report 0 ]] ; en anders C
  329. end
  330. ; Begin C. Kijk hoeveel tegenstander Cs en Ds heeft gespeeld. Speel welke hij het meest heeft gespeeld.
  331. ; Als evenveel Cs als Ds: C als 'weak-majority', D als 'weak-majority'. Wij kiezen voor strong, dus: C.
  332. to-report majority [my-history your-history]
  333. ifelse empty? your-history [ report 0 ][
  334. ifelse length filter [ x -> x = 0 ] your-history > (length my-history) / 2 [
  335. report 0 ] [ report 1 ] ]
  336. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement