运行 具有确定性参数变化的 nlrx 模拟

Run nlrx simulation with deterministic parameter variation

我想 运行 带有不同密度值的 nlrx 包的简单 netlogo 火灾模型...但我不想随机地但确定性地(系统地)这样做,即改变密度0 到 100,步长为 1,每次 10 次:

10 次,密度为 0
10 次,密度 1
10 次,密度 2
...
10 次,密度 99
10 次,密度 100

我该怎么做?

谢谢!

对于此类模拟,您可以使用 simdesign_distinct()simdesign_ff()。 使用 simdesign_distinct() 您可以指定模拟的不同值(请参见下面的示例)。 如果您有多个变量,则每个值向量都需要具有相同的长度。然后,第一个模拟将使用这些向量的所有第一个值,第二个所有第二个值,依此类推。 simdesign_ff() 创建了一个全因子设计,只有当您有多个变量时才真正相关。对于一个变量,功能与 simdesign_distinct() 非常相似,但不同之处在于您可以定义最小值、最大值和步长,以便为每个变量自动创建一个值向量。 下面是两个示例(我不得不在指标槽中使用 ifelse-value(...) 来防止密度值为 0 的 NetLogo 产生的被零除错误):

library(nlrx)
# Windows default NetLogo installation path (adjust to your needs!):
netlogopath <- file.path("C:/Program Files/NetLogo 6.1.0")
modelpath <- file.path(netlogopath, "app/models/Sample Models/Earth Science/Fire.nlogo")
outpath <- file.path("C:/out")
nl <- nl(nlversion = "6.1.0",
         nlpath = netlogopath,
         modelpath = modelpath,
         jvmmem = 1024)

## Example 1: simdesign_distinct
nl@experiment <- experiment(expname="fire",
                            outpath=outpath,
                            repetition=1,
                            tickmetrics="true",
                            idsetup="setup",
                            idgo="go",
                            runtime=0, 
                            metrics=c("ifelse-value (initial-trees > 0) [(burned-trees / initial-trees) * 100][0]"),
                            variables = list('density' = list(values=seq(0,100,1))),
                            constants = list())

#### use nseeds = 10 to simulate over 10 different random seeds (replicates)
nl@simdesign <- simdesign_distinct(nl, nseeds = 10)

#### Run simulations
results <- run_nl_all(nl)


## Example 2: Simdesign_ff
nl@experiment <- experiment(expname="fire",
                            outpath=outpath,
                            repetition=1,
                            tickmetrics="true",
                            idsetup="setup",
                            idgo="go",
                            runtime=0, 
                            metrics=c("ifelse-value (initial-trees > 0) [(burned-trees / initial-trees) * 100][0]"),
                            variables = list('density' = list(min=0, max=100, step=1)),
                            constants = list())

#### use nseeds = 10 to simulate over 10 different random seeds (replicates)
nl@simdesign <- simdesign_ff(nl, nseeds = 10)

#### Run simulations
results <- run_nl_all(nl)