Netlogo - 行为 Space

Netlogo - Behavior Space

我想 运行 使用行为 space 进行实验。然而,所需的实验次数取决于列表的长度,该列表是动态的,受加载的外部数据的影响。因此,我想做一些不受支持的事情:

这样做的正确方法是什么?谢谢

您注意到您使用 .bat 或 .sha 文件执行此操作。如果是这样,这里有一个 .bat 解决方案。但是,我不确定您的数据是什么样的 - 在本例中,我只是使用 csv 文件中的条目数来确定所需的运行次数。

所以,我有一个名为 'example_data.csv' 的数据文件,如下所示:

1
100
1000
10000

我有一个带有输入小部件的 .nlogo 文件,该小部件定义了一个名为 n_runsglobal 变量。我为 BehaviorSpace 实验提取了 xml 并将其保存在名为 "experiment_base.xml" 的文件中 - 它看起来像:

<experiments>
  <experiment name="experiment" repetitions="1" sequentialRunOrder="false" runMetricsEveryStep="false">
    <setup>setup</setup>
    <go>tick</go>
    <timeLimit steps="5"/>
    <metric>count turtles</metric>
    <steppedValueSet variable="n_runs" first="1" step="1" last="1"/>
  </experiment>
</experiments>

我有一个 .bat 文件:

  • 计算我的“example_data.csv”
  • 中的条目数
  • 读取 'experiment_base.xml' 文件并将 last="1" 替换为上面读取的数字,然后将其写入名为 'mod_experiments.xml'
  • 的新实验
  • 使用新生成的实验文件运行实验

整个 bat 文件如下所示:

@echo off
cls
setlocal EnableDelayedExpansion
set "cmd=findstr /R /N "^^" example_data.csv | find /C ":""

for /f %%a in ('!cmd!') do set number=%%a

powershell -Command "(gc experiment_base.xml) -replace '<steppedValueSet variable=\"n_runs\" first=\"1\" step=\"1\" last=\"1\"/>', '<steppedValueSet variable=\"n_runs\" first=\"1\" step=\"1\" last=\"%number%\"/>' | Set-Content mod_experiments.xml

echo "Running experiment..."

netlogo-headless.bat ^
--model dynamic_behaviorspace.nlogo ^
--setup-file mod_experiments.xml ^
--table table-output.csv 

这会输出 4 个实验的结果,因为我的数据文件中有 4 个值。如果我修改 csv 中的条目数并重新运行 .bat 文件,我将获得相应运行次数的结果。