我有一个NetLogo模型,简化为:
to setup
clear-all
create-turtles 1000 [
fd 100
]
end
当我使用mean [xcor] of turtles
之类的报告器将监视器小部件添加到UI时,然后运行setup
,监视器中的值会不断变化。它可能会先显示0.2305090322262271
,然后再显示0.2305090322262268
,然后再显示另一个相似的数字。
是什么让监视器小部件像这样闪烁或闪烁?我该如何预防?
答案 0 :(得分:6)
这是由以下因素共同引起的:
turtles
之类的代理集总是以随机顺序返回。因此,监控程序会不断地重新运行其mean [xcor] of turtles
报告程序,但是turtles
代理集会以随机顺序提供海龟,因此mean
的浮点误差将累积在由于顺序不同,每次的方式都略有不同。最终结果是,在什么都没有发生的情况下,您看到的监视器控件中闪烁的数字略有不同。
在执行sum [xcor] of turtles
或variance [xcor] of turtles
时,您也会遇到相同的问题-每当您将一堆浮点数从一个代理集中减少为一个单一值时。您还可以看到直接在命令中心重复运行报告程序代码的问题,而根本没有监视器小部件。
幸运的是,修复非常简单:
mean sort [xcor] of turtles
,sum sort [xcor] of turtles
,variance sort [xcor] of turtles
。如果数字顺序相同,则浮点精度仍然会很小,但是每次都相同,因此您不会看到值发生变化。这可能是最好的解决方案,但是如果您的代理集非常大,它可能会很慢。Decimal places
设置更改为您不会注意到更改值的数字。由于结果的差异应该很小,因此通常是可能的。