NLRX 包:包括布尔参数作为变量

NLRX Package: Include boolean parameter as variable

我可以在 simdesign 的变量中包含布尔参数吗?如果是这样,那会是什么样子?现在我只有这样的度量变量:

variables = list(
    'navigation-system-rate' = list(min = 0, max = 1, qfun="qunif"),
    "expected-weight" = list(min = 0, max = 1, qfun="qunif")
  )

但我希望他们为某个参数随机取值“true”或“false”。这有可能吗?

是的,您可以定义布尔值和分类变量值,但仅适用于某些模拟设计(简单、独特、全阶乘),如此处所述: https://docs.ropensci.org/nlrx/articles/furthernotes.html#variables-and-constants-definitions

例如你可以使用,

variables = list(
    "bool1" = list(values = c("true", "false")),
    "bool2" = list(values = c("true", "false"))
  )

然后例如将 simdesign_ff() 应用于 运行 布尔变量的所有组合。

所有其他 simdesigns 都需要一个数字 range/distribution,并且不会使用任何 categorical/boolean 值。 作为一个简单的解决方法,您可以在生成参数矩阵后对其应用一些转换。

例如,如果您正在做一个拉丁超立方体,您可以将布尔变量定义为 0 到 1 范围内的均匀分布变量。然后在应用 simdesign_lhs 之后,只需覆盖 nl@simdesign@siminput 通过将值 < 0.5 的所有单元格设置为 false 并将所有其他值设置为 true 来更新变量的值。


# Define variable as numeric in range 0 .. 1
nl@experiment <- experiment(
  # ...
  variables = list("bool1" = list(min = 0, max = 1, qfun="qunif"))
  # ...
)
                         
# apply simdesign_lhs to generate parameter matrix
nl@simdesign <- simdesign_lhs(nl=nl,
                               samples=100,
                               nseeds=3,
                               precision=3)

# apply transformation to boolean (netlogo needs booleans as strings)
nl@simdesign@siminput <- nl@simdesign@siminput %>% 
  dplyr::mutate(bool1 = dplyr::if_else(bool1 < 0.5, "false", "true"))