保持变量结果海龟死亡netlogo



寻找一种在海龟离开模型后将其停留时间存储在模型中的方法。我的模型运行了几个月,几千只海龟进入,经历过程,然后离开这个地区。这是一个复杂的模型(它是DES和ABM的混合),所以我试着复制下面的简单位。

海龟将在每次滴答时被创建,并给予随机的停留时间,但只有当它们移动到正确的区域(area-name)时才能开始处理,当它们的时间结束时,它们离开该区域。它们在系统中的时间反映了在该区域的等待时间以及我想在完成后保存的停留时间。如果我把它们留在模型中,它会在几个月后开始崩溃,我怀疑这是因为模型中有太多的海龟仍然在系统中进行计算,效率低下。

go
create turtles 2
[
set time-in-system 0
set length-of-stay ceiling ((random-normal 48 4) + ticks)]
set shape "person"
if any? area-name with [not any? turtles-here]
[move-to one-of area-name]
]
undergo-process
end

to-undergo-process
ask turtles with [shape = "person"]
[
set time-in-system time-in-system + 1
]
ask turtles-on area-name
[if ticks = length-of-stay
[set shape "dot"
move-to exit-door]
end

然后我可以绘制并实时查看以确保它正在工作

histogram time-in-system of turtles with [shape = "dot"]

,但似乎无法弄清楚如何将它们存储为模型运行后绘图的唯一值,并且我有一个结果数据集,而不将它们保存在模型中。只要我能在它们离开

后存储唯一的值,实时绘图就没有必要了如果我让他们死亡,那么我就会失去直方图中的唯一值。我不想要所有值的计数,但在它们离开后的过程结束时,每只海龟的唯一值-目前我必须存储它们的唯一解决方案是作为一个代理集在出口补丁中保持活跃,但随着模型的进展,这会占用大量的计算能力…

可能有一个非常简单的命令,但我一直在通过编程手册兜圈子试图找到它。任何提示,感谢

您应该创建一个列表来存储离开的海龟的值。

只隔离与此目的相关的代码,类似于:

globals [
times
]
to setup
set times (list)
end
to leave-simulation   ; This being executed by turtles.
set times lput (time-in-system times)
die
end

如果您的程序要运行几个月,我建议您使用file-write命令来存储数据。这样,即使程序因任何原因停止,数据也会被保存下来;它给了你更多的自由去做你想要的分析,而不需要再次运行完整的模拟。如果你写一个csv(逗号分隔值)文件,你可以使用几乎任何程序(excel, R, matlab, python, c#或回到netlogo)来绘制直方图。

最新更新