Если вы можете уточнить, почему вы пытаетесь сгенерировать данные таким образом, я или другие люди могут дать лучший совет.
Нет единой команды 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()
, чтобы все заработало.