我有一个NetLogo模型,简化为:
to setup
clear-all
create-turtles 1000 [
fd 100
]
end
Run Code Online (Sandbox Code Playgroud)
当我将UI监视器小部件添加到UI中时,带有一个类似Report的报表器,mean [xcor] of turtles然后运行setup,该监视器中的值就会不断变化。它可能会显示0.2305090322262271一个瞬间,然后显示下一个瞬间0.2305090322262268,然后再显示另一个相似的数字。
是什么让监视器小部件像这样闪烁或闪烁?我该如何预防?
这是由以下因素共同引起的:
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将显示器的设置更改为您不会注意到变化值的数字。由于结果的差异应该很小,因此通常是可能的。