Netlogo - 行为 Space
Netlogo - Behavior Space
我想 运行 使用行为 space 进行实验。然而,所需的实验次数取决于列表的长度,该列表是动态的,受加载的外部数据的影响。因此,我想做一些不受支持的事情:
这样做的正确方法是什么?谢谢
您注意到您使用 .bat 或 .sha 文件执行此操作。如果是这样,这里有一个 .bat 解决方案。但是,我不确定您的数据是什么样的 - 在本例中,我只是使用 csv 文件中的条目数来确定所需的运行次数。
所以,我有一个名为 'example_data.csv' 的数据文件,如下所示:
1
100
1000
10000
我有一个带有输入小部件的 .nlogo 文件,该小部件定义了一个名为 n_runs
的 global
变量。我为 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 文件,我将获得相应运行次数的结果。
我想 运行 使用行为 space 进行实验。然而,所需的实验次数取决于列表的长度,该列表是动态的,受加载的外部数据的影响。因此,我想做一些不受支持的事情:
这样做的正确方法是什么?谢谢
您注意到您使用 .bat 或 .sha 文件执行此操作。如果是这样,这里有一个 .bat 解决方案。但是,我不确定您的数据是什么样的 - 在本例中,我只是使用 csv 文件中的条目数来确定所需的运行次数。
所以,我有一个名为 'example_data.csv' 的数据文件,如下所示:
1
100
1000
10000
我有一个带有输入小部件的 .nlogo 文件,该小部件定义了一个名为 n_runs
的 global
变量。我为 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 文件,我将获得相应运行次数的结果。