gpt4 book ai didi

当没有发生任何事情时,NetLogo 监视器小部件显示会发生变化

转载 作者:行者123 更新时间:2023-12-02 18:35:24 25 4
gpt4 key购买 nike

我有一个 NetLogo 模型,简化为:

to setup
clear-all
create-turtles 1000 [
fd 100
]
end

当我将监视器小部件添加到 UI 时,使用像 mean [xcor] ofturtles 这样的报告器,然后运行 ​​setup,监视器中的值会发生轻微变化不断地点。它可能会先显示 0.2305090322262271,然后再显示 0.2305090322262268,然后不断显示另一个类似的数字。

是什么让我的显示器小部件像这样闪烁或闪烁?我该如何预防?

最佳答案

这是由以下几个因素共同造成的:

  1. NetLogo 使用 float ,这可能会产生一些小的精度问题。请参阅 NetLogo 编程指南中的浮点精度:https://ccl.northwestern.edu/netlogo/docs/programming.html#math
  2. 诸如海龟之类的代理集始终以随机顺序返回。
  3. 即使您没有使用永久按钮或通过命令中心运行任何模型代码,监视器也会不断重新运行报告器计算。

因此,监视器不断地重新运行其海龟平均[xcor]报告器,但是海龟代理集以随机顺序给出海龟,因此 float -由于顺序差异,mean 的点不准确度每次都会以略有不同的方式累积。最终结果是您看到监视器小部件中闪烁的数字略有不同,而没有任何反应。

在执行海龟的求和[xcor]海龟的方差[xcor]时,您会看到同样的问题 - 每当您从以下位置减少一堆 float 时将代理集转换为单个值。您还可以直接在命令中心重复运行报告程序代码来查看问题,而根本不需要监视器小部件。

幸运的是,修复非常简单:

  • 在计算之前对数字进行排序:海龟的均值排序 [xcor]海龟的求和排序 [xcor]海龟的方差排序 [xcor] 。如果数字的顺序相同,您仍然会有小的浮点误差,但它们每次都会相同,因此您不会看到值发生变化。这可能是最好的解决方案,但如果您有一个非常大的代理集,它可能会很慢。
  • 将显示器的小数位数设置更改为您不会注意到变化的数字。由于结果差异应该很小,因此这通常是可能的。

关于当没有发生任何事情时,NetLogo 监视器小部件显示会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55500613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com