Инициализация Netlogo без установки (работает без заголовка с R)

У меня есть модель, которая должна обновлять одно конкретное значение для всех патчей перед каждым запуском. После каждого временного шага эти значения изменяются (через внешнюю модель). Это означает, что модель Netlogo должна быть запущена и затем остановлена ​​(сделать перерыв), мне нужно вывести некоторые данные, затем мне нужно обновить значения патча и затем снова запустить Netlogo. Я хотел бы запустить один R-скрипт для настройки модели Netlogo, а затем запустить другой аналогичный R-скрипт для запуска функции go в Netlogo. Тем не менее, в настоящее время - я закрываю скрипт R, который выполняет Netlogo setupЗатем я пытаюсь запустить другой аналогичный сценарий R с go функция (без setup) - тогда этот второй скрипт не выполняется

У кого-нибудь есть опыт как инициализировать Netlogo через R без запуска setup? Другими словами, я пытаюсь указать начальные условия без ускоренного запуска (без setup часть) - возможно ли это и если да, то как? Хотя я писал о R, это не является необходимостью. Я также мог бы использовать интерфейс Python, но мне нужно использовать какой-то интерфейс без графического интерфейса, так как он должен работать на терминале. Основной вопрос заключается в том, как указать начальные условия для пробега.

Итак, вот пример кода R:


# для настройки модели

# load RNetLogo package
library(rJava)
library(RNetLogo)
require(RNetLogo)
nl.path     <- "C:\\Program Files (x86)\\NetLogo 5.2.0"
# the path to the NetLogo model file
model.path  <- "......\\veg_model_1.nlogo"
#Load specific model
my.netlogo <-"veg_model_1.nlogo"
NLStart(nl.path, gui=F, nl.obj=my.netlogo) #Creates an instance of NetLogo.
NLLoadModel(model.path,nl.obj=my.netlogo) 
NLCommand("setup", nl.obj=my.netlogo) #Executes a command 
NLQuit(nl.obj = my.netlogo)

# обновить значение и запустить перейти на 1 год

# load RNetLogo package
library(rJava)
library(RNetLogo)
require(RNetLogo)

# an R random seed (for beeing reproducible)
set.seed(-986131948)

nl.path     <- "C:\\Program Files (x86)\\NetLogo 5.2.0"

# the path to the NetLogo model file
model.path  <- ".......\\veg_model_1.nlogo"
#Load specific model
my.netlogo <-"veg_model_1.nlogo"
NLStart(nl.path, gui=F, nl.obj=my.netlogo) #Creates an instance of NetLogo.
NLLoadModel(model.path,nl.obj=my.netlogo) 
# here is the value i needed to update
NLCommand("Setpatchwaterpotential", nl.obj=my.netlogo) #Executes a command 
Command("go", nl.obj=my.netlogo)
NLQuit(nl.obj = my.netlogo)

## в Netlogo настройку и зайти:

to setup
  clear-all
  reset-ticks 
  setup-globals
  setup-patches    ; Init patches, init Hydroregime
  setup-individuals
end

to Setpatchwaterpotential
   'read input files'
end

to go
  ifelse ticks = 0
  [
    Setpatchwaterpotential      
    ......          
    tick           ;to count timesteps (ticks) = how often did the model 
  ] 
end

Thanks

1 ответ

Я не знаю, что вы взглянули на пакет RNetlogo для R. Примеры вы можете найти в статье от Jan C Thiele в JSS. Для меня ваша проблема не setup проблема, вы можете запускать то, что вы хотите, и взаимодействовать с моделью, как вы хотите...

В R с NLCommand() Вы можете отправить в netlogo именно то, что вы хотите.

NLCommand("set timeV ", 255)

Процедура go может быть циклом, поэтому вы можете go шаг за шагом. Как пример:

j <- 1
for(i in 1:2000){
    NLCommand("go")
    if(j == 10){
      pos.agents <- NLGetAgentSet(c("who","xcor", "ycor","size","color","stockCoopSugar",
                                    "plocsugar","ticks"), "turtles")
     }
}

Каждые 10 шагов я отслеживаю расположение своих агентов, надеюсь, это поможет

Другие вопросы по тегам