我从R运行Netlogo,我想每次运行前更新一个参数。我从每次相同的随机种子开始,我从tick零设置netlogo,使用export-world导出结果,然后运行import-world,更新一个参数,然后输出使用export-world(ticks = 1),这里给出相同的结果。但是,当在tick 1之后启动时,运行import-world,更新一个参数,然后输出use export-world(ticks = 2),这里给出的结果与直接运行2年没有更新一个参数不一样。 这是我正在使用的代码:
#Try to get quickmodel running
options( java.parameters = "-Xmx10g" )
library(rJava)
library(RNetLogo)
require(RNetLogo)
set.seed(-986131948)
nl.path <- "C:/Program Files (x86)/NetLogo 5.2.0"
model.path <- ".xxxx.nlogo"
my.netlogo <-"_xxxx.nlogo"
NLStart(nl.path, gui=F, nl.obj=my.netlogo)
NLLoadModel(model.path, nl.obj=my.netlogo)
NLCommand("setup", nl.obj=my.netlogo)
NLCommand('export-world "setup.csv" ', nl.obj=my.netlogo)
# here tick=0
NLCommand('Import-world "setup.csv" ', nl.obj=my.netlogo)
NLCommand("updatedoneparamter", nl.obj=my.netlogo)
NLCommand("go", nl.obj=my.netlogo)
ticks <- NLReport("ticks", nl.obj=my.netlogo)
print(ticks)
NLCommand('export-world "go.csv" ', nl.obj=my.netlogo) #save all the results from first year run
#start tick =1
NLCommand('Import-world "go.csv" ', nl.obj=my.netlogo)
#NLCommand("random-seed -986131948", nl.obj=my.netlogo)
NLCommand("updatedoneparamter", nl.obj=my.netlogo)
NLCommand("go", nl.obj=my.netlogo)
ticks <- NLReport("ticks", nl.obj=my.netlogo)
print(ticks) # tick=2
NLCommand('export-world "go.csv" ', nl.obj=my.netlogo)
options( java.parameters = "-Xmx10g" )
library(rJava)
library(RNetLogo)
require(RNetLogo)
set.seed(-986131948)
nl.path <- "C:/Program Files (x86)/NetLogo 5.2.0"
model.path <- "_xxxx.nlogo"
my.netlogo <-"_xxxx.nlogo"
NLStart(nl.path, gui=F, nl.obj=my.netlogo)
NLLoadModel(model.path, nl.obj=my.netlogo)
NLCommand("setup", nl.obj=my.netlogo)
NLCommand("updatedoneparamter", nl.obj=my.netlogo)
NLCommand(2,"go", nl.obj=my.netlogo)
有谁知道为什么我有不同的结果?因为我从相同的随机种子开始。
由于 上华
答案 0 :(得分:2)
R中有相同的种子(使用set.seed
),但NetLogo使用单独的随机数生成器及其独立的种子。要设置NetLogo种子,请使用NLCommand("random-seed 0", nl.obj=my.netlogo)
。可以找到random-seed
的NetLogo文档here。
编辑:
在设置NetLogo随机种子之前,我一开始并没有注意到您正在运行setup
和go
。这将导致您在出口世界时出现不同的世界条件(以及不同的结果)。要获得完全可重现的结果,您应在加载NetLogo模型后立即设置随机种子,然后再运行setup
,go
或任何其他过程。