乌龟死后保持可变结果 netlogo

keeping variable results after turtle dies netlogo

寻找一种方法来存储海龟离开模型后在模型中停留的时间长度。我的模型 运行s 几个月,几千只海龟进入,经过处理然后离开该区域。这是一个复杂的模型(它是 DES 和 ABM 的混合体)所以我尝试重现下面的简单部分。

海龟将在每个刻度被创建并给予随机停留时间,但只有当它们移动到正确的区域(区域名称)并且当它们的时间到了它们离开该区域时才能开始处理。他们的系统时间反映了等待区域和我想在它们完成后保存的停留时间。如果我将它们留在模型中,它会在几个月后开始崩溃,我怀疑这是因为模型中仍有太多海龟用于计算并且效率低下。

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)来绘制直方图。