Netlogo Api Controller - просмотр таблицы - PullRequest
3 голосов
/ 10 октября 2019

Я использую Netlogo Api Controller. С пружинной загрузкой это мой код (я получил его по этой ссылке )

HeadlessWorkspace workspace = HeadlessWorkspace.newInstance();
        try {
             workspace.open("models/Residential_Solar_PV_Adoption.nlogo",true);

             workspace.command("set number-of-residences 900");
             workspace.command("set %-similar-wanted 7");
             workspace.command("set count-years-simulated 14");
             workspace.command("set number-of-residences 500");
             workspace.command("set carbon-tax 13.7");
             workspace.command("setup");
             workspace.command("repeat 10 [ go ]");
             workspace.command("reset-ticks");
             workspace.dispose();

             workspace.dispose();
        }
        catch(Exception ex) {
                  ex.printStackTrace();
        }

Я получил этот результат в консоли:

enter image description here

Но я хочу получить представление таблицы и сохранить в базе данных. Какую команду я могу использовать, чтобы получить представление таблицы?

Представление таблицы:

enter image description here

любая помощь, пожалуйста?

1 Ответ

2 голосов
/ 16 октября 2019

Если вы можете уточнить, почему вы пытаетесь сгенерировать данные таким образом, я или другие люди могут дать лучший совет.

Нет единой команды NetLogo или метода NetLogo API для генерации этой таблицы. , вы должны использовать BehaviorSpace, чтобы получить его. Вот некоторые параметры, перечисленные в грубом порядке от самого простого к сложному.

Опция 1

Если возможно, я бы рекомендовал просто запускать эксперименты BehaviorSpace из командной строки длясоздать свою таблицу. Это даст вам точно такой же результат, который вы ищете. Вы можете найти информацию о том, как это сделать, в Руководстве по поведению NetLogo . Если необходимо, вы можете запустить NetLogo без командной строки из командной строки из Java-программы, просто ищите ресурсы для вызова внешних программ из Java, возможно, с помощью ProcessBuilder.

Если вы работаете изнутриJava, чтобы настроить и изменить параметры ваших экспериментов BehaviorSpace таким образом, который вы не можете сделать из программы, вместо этого вы можете сгенерировать экспериментальные XML-файлы на Java для передачи в NetLogo из командной строки. См. документы в формате XML .

Опция 2

Вы можете воссоздать содержимое таблицы, используя расширение CSV в вашей модели идобавив еще несколько команд для генерации данных. Это не приведет к созданию точно такой же таблицы, но будет выводить данные в компьютерном и удобочитаемом формате.

В чистом коде NetLogo вы захотите что-то похожее на приведенное ниже. Обратите внимание, что вы можете управлять большей частью поведения (например, именами файлов или желаемыми переменными), выполнив другие команды перед экспериментом перед запуском setup или go в вашем коде Java. Вы также можете запустить специфичный для CSV файл кода из Java с помощью управляющего API и оставить модель без изменений, но вам нужно будет написать собственную версию NetLogo-кода примитива csv:to-row.

globals [
  ;; your model globals here

  output-variables
]

to setup
  clear-all

  ;;; your model setup code here

  file-open "my-output.csv"
  ; the given variables should be valid reporters for the NetLogo model
  set output-variables [ "ticks" "current-price" "number-of-residences" "count-years-simulated" "solar-PV-cost" "%-lows" "k" ]
  file-print csv:to-row output-variables

  reset-ticks
end

to go
  ;;; the rest of your model code here

  file-print csv:to-row map [ v -> runresult v ] output-variables
  file-flush
  tick
end

Опция 3

Если вам действительно нужно точно воспроизвести экспорт таблицы BehaviorSpace, вы можете попробовать запустить эксперимент BehaviorSpace непосредственно из Java. Таблица генерируется с помощью этого кода , но, как вы можете видеть, она связана с классом LabProtocol, что означает, что вам нужно будет настроить и запустить вашу модель через BehaviorSpace, а не просто пошагово, используярабочее пространство, как вы сделали в своем примере кода.

Хорошим примером этого может быть Main.scala объект , который извлекает некоторые настройки эксперимента из ожидаемых аргументов командной строки,а затем использует их с методом lab.run() для запуска эксперимента BehaviorSpace и создания выходных данных. Это код Scala, а не Java, но, надеюсь, его не сложно перевести. Точно так же вам нужно настроить org.nlogo.nvm.LabInterface.Settings экземпляр и передать его HeadlessWorkspace.newLab.run(), чтобы все заработало.

...