#netlogo
#netlogo
Вопрос:
Я хочу провести эксперименты, используя пространство поведения. Однако количество необходимых экспериментов зависит от длины списка, который является динамическим в зависимости от загружаемых внешних данных. Следовательно, я хочу сделать что-то вроде приведенного ниже, которое не поддерживается:
каков правильный способ сделать это? Спасибо
Комментарии:
1. Как вы указываете своей модели, какой внешний набор данных загружать при запуске без BehaviorSpace?
2. существует прецедент импорта данных. Я хочу, чтобы пространство поведения автоматически определяло, сколько запусков необходимо, на основе длины данного импортированного списка из внешнего источника данных, который динамически меняется каждый день. Я собираюсь развернуть эту модель на удаленном сервере для повторного использования.
3. Вы смотрели руководство пользователя по запуску этого без головы? Возможно, имеет смысл настроить ваш эксперимент в формате xml, а затем иметь скрипт для ежедневного редактирования параметров xml, чтобы при необходимости отражать ваши внешние данные.
4. я использую файл bat или sha для его запуска. как решить мою проблему с автоматической настройкой максимального количества запусков в экспериментах?
5. Лучшее, что я могу придумать, это установить диапазон для «run-number» на значение, которое, как вы знаете, будет выше, чем
length shift-plan
, затем добавить условие остановки к вашему эксперименту сrun-number > length shift-plan
. Это не идеально, но может приблизиться к тому, что вы хотите.
Ответ №1:
Обратите внимание, что вы делаете это с помощью файла .bat или .sha. Если это так, вот решение .bat. Однако я не уверен, как выглядят ваши данные — в этом примере я просто использовал количество записей в файле csv, чтобы определить количество необходимых запусков.
Итак, у меня есть файл данных под названием ‘example_data.csv’, который выглядит следующим образом:
1
100
1000
10000
У меня есть файл .nlogo с виджетом ввода, который определяет global
переменную с именем n_runs
. Я извлек XML для эксперимента BehaviorSpace и сохранил его в файле под названием «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 ‘ - запускает эксперимент, используя недавно созданный файл experiments
Весь этот 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, я получу результаты для соответствующего количества запусков.