Инициализация 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 шагов я отслеживаю расположение своих агентов, надеюсь, это поможет