PDF格式的记忆效应
memory effect in PDG
我正在尝试用netlogo模拟一个PDG,研究配合下记忆的效果。我希望记忆是一个系数 m<1,它乘以当时的总收益加上累积的历史收益。我想研究记忆在合作模型中的作用,看看世界上有记忆和没有记忆的合作者的频率
提前谢谢你
globals [payoffs]
patches-own [payments]
to setup
clear-all
; green: cooperate, red: defect
ask patches [
set payments []
set pcolor green
ifelse ( random-float 1.0 < cooperative-probability) [
set pcolor green
] [
set pcolor red
]
;; cooperate: 0, defect 1
set payoffs [[3 0] [4 1]]
]
reset-ticks
end
to-report get-payment [my-color her-color]
let my-action ifelse-value (my-color = green) [0] [1]
let her-action ifelse-value (her-color = green) [0] [1]
report item her-action (item my-action payoffs)
end
to go
ask patches [
play
]
ask patches [
update
]
tick
end
; returns the first x elements in l, or fewer.
to-report first-x [x l]
let result []
if (length l = 0) [report []]
repeat x [
set result lput (first l) result
set l butfirst l
if (length l = 0) [
report result
]
]
report result
end
; patches methods
to play
let chosen-one one-of neighbors
set payments fput (get-payment pcolor [pcolor] of chosen-one) payments
end
to-report gain
report sum first-x history-length payments
end
to update
let chosen-one one-of neighbors
if ([gain] of chosen-one > gain) [
set pcolor [pcolor] of chosen-one
]
end
我对你的问题的解释是你想有一种方法来计算衰减的累积变量值(收益)。这样做的方法是存储变量的当前值,并在每次更新时用新收益的总和和旧累积收益的贴现值更新该值。这意味着,例如,过去两个报价的收益在累积中已经打了两次折扣。
这里以完整模型为例。我已将收益固定为每个滴答 5,因此您可以看到内存的影响。
globals [ memory ] ; how much to retain each tick
turtles-own [ payoff ]
to setup
clear-all
set memory 0.9
create-turtles 1
inspect one-of turtles
reset-ticks
end
to go
ask turtles
[ let new-payoff 5
set payoff new-payoff + memory * payoff
]
end
第一次报价后,收益为 5。第二次报价后,收益为 9.5 (=5+0.9*5)。第三次报价后,收益为 13.55(=5+0.9*9.5,也就是 5 + 0.9 * 5 + 0.9 * 0.9 * 5)
我正在尝试用netlogo模拟一个PDG,研究配合下记忆的效果。我希望记忆是一个系数 m<1,它乘以当时的总收益加上累积的历史收益。我想研究记忆在合作模型中的作用,看看世界上有记忆和没有记忆的合作者的频率 提前谢谢你
globals [payoffs]
patches-own [payments]
to setup
clear-all
; green: cooperate, red: defect
ask patches [
set payments []
set pcolor green
ifelse ( random-float 1.0 < cooperative-probability) [
set pcolor green
] [
set pcolor red
]
;; cooperate: 0, defect 1
set payoffs [[3 0] [4 1]]
]
reset-ticks
end
to-report get-payment [my-color her-color]
let my-action ifelse-value (my-color = green) [0] [1]
let her-action ifelse-value (her-color = green) [0] [1]
report item her-action (item my-action payoffs)
end
to go
ask patches [
play
]
ask patches [
update
]
tick
end
; returns the first x elements in l, or fewer.
to-report first-x [x l]
let result []
if (length l = 0) [report []]
repeat x [
set result lput (first l) result
set l butfirst l
if (length l = 0) [
report result
]
]
report result
end
; patches methods
to play
let chosen-one one-of neighbors
set payments fput (get-payment pcolor [pcolor] of chosen-one) payments
end
to-report gain
report sum first-x history-length payments
end
to update
let chosen-one one-of neighbors
if ([gain] of chosen-one > gain) [
set pcolor [pcolor] of chosen-one
]
end
我对你的问题的解释是你想有一种方法来计算衰减的累积变量值(收益)。这样做的方法是存储变量的当前值,并在每次更新时用新收益的总和和旧累积收益的贴现值更新该值。这意味着,例如,过去两个报价的收益在累积中已经打了两次折扣。
这里以完整模型为例。我已将收益固定为每个滴答 5,因此您可以看到内存的影响。
globals [ memory ] ; how much to retain each tick
turtles-own [ payoff ]
to setup
clear-all
set memory 0.9
create-turtles 1
inspect one-of turtles
reset-ticks
end
to go
ask turtles
[ let new-payoff 5
set payoff new-payoff + memory * payoff
]
end
第一次报价后,收益为 5。第二次报价后,收益为 9.5 (=5+0.9*5)。第三次报价后,收益为 13.55(=5+0.9*9.5,也就是 5 + 0.9 * 5 + 0.9 * 0.9 * 5)