NetLogo实验设置

9

我正在Netlogo模型上工作,但是我无法理解如何设置一个“实验”。在我的模型中,我有一个矩阵,其中包含我感兴趣的所有值(总共为6个),每当满足条件时(每次杀死X只海龟),矩阵就会更新,基本上捕获该点的模型快照。矩阵中的先前值已被清除,因此矩阵是1x6,而不是10000x6矩阵,每个快照只更新一行。

我想做的是设置一个实验来运行我的模型数百次,在前X个快照或发生Y个滴答声之前每次收集此矩阵。但我无法在实验设置中找到任何方法?

这个可能可以做到,还是必须创建100x6(100个快照),然后通过某种方式将该矩阵导出到CSV中?

我从未在Netlogo中设置过实验,所以这可能非常容易做到,也可能完全不可能。


我使用BehaviorSpace做了一个答案,因为我认为那是最简单的方法。但是,创建一个csv文件并在每个快照被创建时追加它也没有问题。也就是说,你不需要有一个100x6的矩阵并导出它。我不推荐这种方法的原因是你还说你想要几百个单独的运行,这将为每个运行提供一个单独的csv文件。 - JenB
2个回答

3
如果我正确理解了你的问题,那么你想要在运行过程中特定时间点报告6个值。这些时间点是通过满足条件而不是特定的时间点选择的。NetLogo有一个名为BehaviorSpace的实验管理工具。设置几百次运行非常简单(可能具有滑块等任何输入的不同值)。但只在特定时间点输出并不那么容易。
BehaviorSpace对话框有每个时间点或仅最后一个时间点的复选框。如果设置为每个时间点,则可以自动导出每个时间点的六个数字。在你的情况下,这比尝试仅偶尔输出要容易得多。您可以添加第七个报告者,指示矩阵是否在此时间点被重置。然后,所有您需要在后处理中做的就是选择第七报告者为真的行。
如果您想要精确运行N个快照的模型,那么您还需要设置一个全局变量,该变量在每个快照点递增。您的BehaviorSpace设置将使用该计数器作为停止条件。

2

我不确定我理解你的问题,但通常你会有一个设置函数和一个运行函数,对吧?所以我猜下面的代码结构应该是你要找的。我已经有一段时间没用netlogo了,所以你需要自己弄清楚精确的矩阵代码。

globals your-1by6-matrix your-100by6-matrix

to setup
  ;reset your experiment
end

to run
  ;run your experiment
end

to run100times
  repeat 100[
    setup
    run
    ;save your 1by6matrix into your 100by6matrix
  ]
  ;use your 100by6matrix to plot or export
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接