Netlogo — пространство поведения

#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, я получу результаты для соответствующего количества запусков.