【问题标题】:Run nlrx simulation with deterministic parameter variation运行具有确定性参数变化的 nlrx 模拟
【发布时间】:2020-05-03 03:38:43
【问题描述】:

我想使用具有不同密度值的 nlrx 包运行简单的 netlogo fire 模型...但我不想随机但确定地(系统地)执行此操作,即使用步长 1 将密度从 0 变化到 100 ,每10次:

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

我该怎么做?

谢谢!

【问题讨论】:

    标签: r simulation netlogo


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2011-12-07
      • 1970-01-01
      相关资源
      最近更新 更多