我创建了一个意见动态模型,效果很好。但现在我想看看,我所有的海龟的意见是如何变化的。所以我创建了记者“报告[意见]海龟”。当我把它放在行为空间中时,我得到的结果与我观察到的不符。如果我用单独的海龟测试这个,比如“report [opinion] of turtle 0”,我会得到我期望看到的平滑曲线进展。
有谁知道为什么会这样?如果我必须将每只海龟单独放在我的行为空间中,我会发现它相当笨拙,因为我有滑动的 Agentsnumbers。
答案 0 :(得分:1)
你可以让每只海龟都有一个列表变量,在每个海龟的开头都会记录它的ID。在每一步,每只海龟都会附加它的 opinion
值。
然后你可以有一个全局变量,你将使用它作为一个列表列表,在模拟结束时每只海龟将附加自己的列表。
在 BheaviorSpace 中,您只需要在每次实验运行结束时使用一个报告器(列表列表)。
请参阅下面的工作示例:
globals [
results
]
turtles-own [
opinion
my-list
]
to setup
clear-all
reset-ticks
set results (list)
create-turtles 3 [
set opinion random 10
set my-list list self opinion
]
end
to go
if (ticks = 5) [
ask turtles [
set results lput my-list results
]
stop
]
ask turtles [
set opinion opinion + 1
set my-list lput opinion my-list
]
tick
end
在每次运行结束时,results
报告器将如下所示:
[[(turtle 2) 3 4 5 6 7 8] [(turtle 0) 0 1 2 3 4 5] [(turtle 1) 5 6 7 8 9 10]]
请注意,这样一来,results
中的列表将始终按随机顺序排列。
如果您有兴趣根据某种标准订购它们,您可以这样做。
下面的示例将 if (ticks = 5)
语句更改为根据海龟的 ID 对 results
进行排序,但是您可以对任何您感兴趣的特征使用 sort
。
if (ticks = 5) [
let sorted-turtles sort turtles
foreach sorted-turtles [this-turtle -> ask this-turtle [set results lput my-list results]]
stop
]