Запустите симуляцию nlrx с определением параметра c - PullRequest
1 голос
/ 16 января 2020

Я хочу запустить простую модель огня netlo go с пакетом nlrx с разными значениями плотности ... но я не хочу делать это стохастически, но детерминистически (систематически), то есть изменять плотность от 0 до 100 с шагом 1, каждые 10 раз:

10 раз с плотностью 0
10 раз с плотностью 1
10 раз с плотностью 2
...
10 раз с плотностью 99
10 раз с плотностью 100

Как бы я это сделал?

Спасибо!

1 Ответ

2 голосов
/ 16 января 2020

Для такого рода симуляций вы можете использовать simdesign_distinct() или simdesign_ff(). с помощью simdesign_distinct() вы можете указать различные значения, которые моделируются (см. пример ниже). Если у вас более одной переменной, каждый вектор значений должен иметь одинаковую длину. 1-е моделирование будет затем использовать все 1-е значения этих векторов, 2-е - все 2-е значения и так далее. simdesign_ff() создает полный факторный дизайн, который действительно актуален только тогда, когда у вас есть более одной переменной. Для одной переменной функциональность очень похожа на simdesign_distinct(), но с той разницей, что вы можете определить min, max и step для автоматического создания вектора значений для каждой переменной. Ниже приведены два примера (мне пришлось использовать ifelse-value (...) в слоте метрики, чтобы предотвратить ошибку деления на ноль, созданную NetLo go со значением плотности 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)
...