我有一个模型需要在每次运行之前更新所有补丁的一个特定值。在每个时间步之后,更新这些值更改(通过外部模型)。
这意味着,Netlogo模型必须运行然后停止(中断),我需要输出一些数据,然后我需要更新补丁值然后再次运行Netlogo。我想运行一个R脚本来设置Netlogo模型,然后运行另一个类似的R脚本来运行Netlogo中的go函数。但是,目前,
- 我关闭执行Netlogo setup
的R脚本,
- 然后我尝试用go
函数运行另一个类似的R脚本(没有setup
) - 然后第二个脚本不执行
有没有人有过如何在不运行setup
的情况下通过R初始化Netlogo的经验?换句话说,我试图在没有加速运行的情况下指定初始条件(没有setup
部分) - 这是可能的,如果是,那么如何?即使我写了关于R的文章,这也不是必需的。我也可以使用python接口,但我需要使用一些没有GUI的接口,因为这需要在终端上运行。根本问题是如何指定运行的初始条件。
所以这里是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)
# 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)
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
答案 0 :(得分:1)
我不知道您已经看过R的RNetlogo包。您可以在Jan C Thiele in JSS的论文中找到示例。对我来说,您的问题不是setup
问题,您可以根据需要运行您想要的内容并与模型进行交互...
在带有NLCommand()
的R中,您可以向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步,我都会跟踪我的座席布局 我跳了它帮助