NetLogo 实验设置

NetLogo Experiment Setup

我正在 Netlogo 中处理一个模型,但我在理解如何设置 "experiment" 时遇到了问题。在我的模型中,我有一个矩阵,其中包含我感兴趣的所有值(总共 6 个),只要满足条件(每次杀死 X 只海龟),矩阵就会更新,基本上捕获了那个时候的模型。矩阵中的先前值被清除,因此矩阵是 1x6,而不是 10000x6 矩阵,每个快照只更新一行。

我想做的是对我的模型 运行 进行数百次实验,每次为前 X 个快照或直到发生 Y 个滴答时收集此矩阵。但是我在实验设置中看不到这样做的方法?

这是否可行,或者我是否必须创建 100x6(100 个快照)然后将该矩阵以某种方式导出到 CSV?

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

我不确定我理解你的问题,但通常你会有一个设置函数和一个 运行 函数,对吗?所以我猜下面的代码结构应该是您正在寻找的。我已经有一段时间没有使用 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

如果我对您的问题的理解正确,那么您希望在 运行 期间的特定时间点报告 6 个值。这些报价是通过满足条件而不是一定数量的报价来选择的。 NetLogo 有一个名为 BehaviorSpace 的实验管理工具。设置数百个 运行s 很简单(滑块上的任何输入可能具有不同的值等)。只在某些刻度上输出并不是那么简单。

BehaviorSpace 对话框的每个刻度或仅在末尾都有一个复选标记。如果您将它设置为每个报价,那么您可以在每个报价自动导出您的六个数字。在您的情况下,这样做可能比尝试偶尔输出更容易。您可以添加第七个报告者,即 true/false 以判断矩阵是否正在重置此刻度。那么在 post-processing 中,您所要做的就是 select 第七个报告者为真的行。

如果您想要 运行 恰好 N 个快照的模型,那么您还需要设置一个全局变量,该变量在每个快照点递增。然后,您的 BehaviorSpace 设置将使用该计数器作为停止条件。