инициализация 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)

# чтобы обновить значение и запустить go на 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

person Shanghua Li    schedule 08.02.2017    source источник


Ответы (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 шагов я отслеживаю расположение своих агентов. Надеюсь, это поможет

person delaye    schedule 19.02.2017
comment
Привет, я видел эту бумагу и понимаю, что вы сказали бежать, зацикливая ее. Однако моя проблема заключается в том, что я запускаю один раз setup-go1year-quit R и netlogo, на второй год мне приходится создавать точно такие же значения патча и черепахи, что и на последнем временном шаге. Я попытался вывести все значения, необходимые для настройки модели и использования в качестве входных файлов для следующего временного шага, однако, используя режим «setup-go1year-quit-updatedby NLCommand» (создайте условия последнего временного шага в год 1 и обновите одно значение исправления)-go-1yearquite', не дает таких же результатов при использовании setup-go2years-quit'. - person Shanghua Li; 20.02.2017
comment
Можете ли вы использовать команду уценки, чтобы выразить, что такое code и что такое комментарии? Приведите пример того, что добавляется в обоих случаях setup-go1year-quit-updatedby и один раз setup-go1year-quit? Для этого отредактируйте свой вопрос - person delaye; 20.02.2017
comment
Привет, я добавил код R и Netlogo, надеюсь, на этот раз мой вопрос более понятен. - person Shanghua Li; 21.02.2017
comment
С моей точки зрения, я бы предпочел читать файлы в R. Таким образом, вы можете загрузить матрицу и загрузить ее в пространство netlogo и так далее... - person delaye; 21.02.2017