在没有设置的情况下初始化Netlogo(使用R运行无头)

时间:2017-02-08 08:44:59

标签: python r netlogo headless

我有一个模型需要在每次运行之前更新所有补丁的一个特定值。在每个时间步之后,更新这些值更改(通过外部模型)。 这意味着,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)

#更新值并运行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 个答案:

答案 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步,我都会跟踪我的座席布局 我跳了它帮助