gpt4 book ai didi

r - MakeParamSet 函数(ParamHelpers 包): include formulas with parameters already defined

转载 作者:行者123 更新时间:2023-12-04 12:34:57 24 4
gpt4 key购买 nike

我正在从 makeParamSet 构建参数集和 generateDesign R 中的函数( ParamHelpers 包)。如何使用已在 makeParamSet 中定义的参数来包含公式功能 ?这是一个我想要的例子 ga 的产品和 c :

ps <- makeParamSet(makeIntegerParam("a", lower=800, upper=7200),
makeIntegerParam("c", lower=632, upper=5688),
makeIntegerParam("e", lower=5, upper=45),
makeIntegerParam("b", lower=0, upper=7200),
makeIntegerParam("d", lower=0, upper=5688),
makeIntegerParam("f", lower=0, upper=45))
Y <- generateDesign(10, ps, trafo = T)

这是我的尝试:
ps <- makeParamSet(makeIntegerParam("a", lower=800, upper=7200),
makeIntegerParam("c", lower=632, upper=5688),
makeIntegerParam("e", lower=5, upper=45),
makeIntegerParam("b", lower=0, upper=7200),
makeIntegerParam("d", lower=0, upper=5688),
makeIntegerParam("f", lower=0, upper=45),
makeIntegerParam("g", lower = 1, upper = 1, trafo = function(x,a,c) x*a*c))
Y <- generateDesign(10, ps, trafo = T)

ps <- makeParamSet(makeIntegerParam("a", lower=800, upper=7200),
makeIntegerParam("c", lower=632, upper=5688),
makeIntegerParam("e", lower=5, upper=45),
makeIntegerParam("b", lower=0, upper=7200),
makeIntegerParam("d", lower=0, upper=5688),
makeIntegerParam("f", lower=0, upper=45),
makeIntegerParam("g", require = quote(a*c)))
Y <- generateDesign(10, ps, trafo = T)

编辑 :
g参数应在 makeParamSet 中定义因为我的目标是使用 g 添加禁区如下:
ps <- makeParamSet(makeIntegerParam("a", lower=800, upper=7200), ## bT
makeIntegerParam("c", lower=632, upper=5688), ## kR
makeIntegerParam("e", lower=5, upper=45),
makeIntegerParam("b", lower=0, upper=7200),
makeIntegerParam("d", lower=0, upper=5688),
makeIntegerParam("f", lower=0, upper=45),
makeIntegerParam("g", require = a*c),
makeIntegerParam("h", lower=0, upper= max(g), ## Depends on g
forbidden = quote(h > g)))
Y <- generateDesign(10, ps, trafo = T)

最佳答案

我认为这个问题的最佳解决方案,因为您使用的是 generateDesign要从参数空间采样,只需在事后添加参数,而不是在初始参数集中定义它:

ps <- makeParamSet(makeIntegerParam("a", lower=800, upper=7200),
makeIntegerParam("c", lower=632, upper=5688),
makeIntegerParam("e", lower=5, upper=45),
makeIntegerParam("b", lower=0, upper=7200),
makeIntegerParam("d", lower=0, upper=5688),
makeIntegerParam("f", lower=0, upper=45))
Y <- generateDesign(10, ps)
Y$g <- Y$a*Y$c

这只会给你 g 的值这将对应于 a 的采样值和 c :
> Y
a c e b d f g
1 5994 2813 27 4389 3321 11 16861122
2 3758 5392 32 1009 3684 1 20263136
3 1197 2446 19 2736 116 8 2927862
4 2530 3753 8 1827 2279 34 9495090
5 1675 649 37 3811 1303 19 1087075
6 5335 4878 14 5321 4271 45 26024130
7 3306 3396 42 6261 4753 38 11227176
8 6563 1155 40 333 5662 15 7580265
9 4224 4298 23 7180 1134 23 18154752
10 4805 1755 11 3145 2006 29 8432775

如果您想覆盖 g 的所有可能值,似乎最好的解决方案是对限制进行硬编码(即,lower(g) = lower(a)*lower(c) = 800*632 等) ,但如果你真的想根据其他参数定义来定义它,我认为你需要先创建原始参数集,然后调用它来获取以前的参数:
ps2 <- makeParamSet(makeIntegerParam("a", lower=ps$pars$a$lower, upper=ps$pars$a$upper),
makeIntegerParam("c", lower=ps$pars$a$lower, upper=ps$pars$a$upper),
makeIntegerParam("e", lower=ps$pars$a$lower, upper=ps$pars$a$upper),
makeIntegerParam("b", lower=ps$pars$a$lower, upper=ps$pars$a$upper),
makeIntegerParam("d", lower=ps$pars$a$lower, upper=ps$pars$a$upper),
makeIntegerParam("f", lower=ps$pars$a$lower, upper=ps$pars$a$upper),
makeIntegerParam("g", lower= ps$pars$a$lower*ps$pars$c$lower, upper=ps$pars$a$upper*ps$pars$c$upper))
Y2 <- generateDesign(10, ps2)

但这些不会直接对应于各自的采样 a*c :
> Y2
a c e b d f g
1 2434 1740 1033 3497 939 3001 9866916
2 1895 2749 4762 3340 5161 1000 36786092
3 4505 2378 6415 7183 2454 7119 713409
4 5140 1028 4400 5798 3633 2560 28261522
5 6904 6635 1928 5168 6607 6551 16555299
6 2876 3761 2369 1912 4422 5877 40896236
7 3563 5822 3110 2141 5624 4800 20026607
8 5855 5242 5762 4628 1453 4381 31900665
9 1143 4384 6648 1002 2967 3920 23614328
10 6301 6153 3766 6094 6390 1978 5320086

编辑:

尝试这样的事情来设置 h 的界限:
ps <- makeParamSet(makeIntegerParam("a", lower=800, upper=7200),
makeIntegerParam("c", lower=632, upper=5688),
makeIntegerParam("e", lower=5, upper=45),
makeIntegerParam("b", lower=0, upper=7200),
makeIntegerParam("d", lower=0, upper=5688),
makeIntegerParam("f", lower=0, upper=45),
makeIntegerParam("h", lower=0, upper=5688*7200),
forbidden=expression(h >= a*c))
Y <- generateDesign(10, ps)
Y$g <- Y$a*Y$c

> Y
a c e b d f h g
2 5226 4721 16 5808 2114 7 12630546 24671946
3 3587 2518 35 4989 212 14 5104204 9032066
4 6536 4237 38 7074 896 28 2853768 27693032
10 7135 3950 7 369 3426 38 23501987 28183250
31 4768 5541 26 216 3960 24 19840182 26419488
5 1164 3658 16 1600 794 39 1998994 4257912
41 5047 4653 20 4340 3261 40 6628254 23483691
1 4900 2880 22 6847 2566 19 1945704 14112000
21 3664 3625 36 7027 3955 15 2772633 13282000
11 3389 4229 22 468 593 36 2334981 14332081

关于r - MakeParamSet 函数(ParamHelpers 包): include formulas with parameters already defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58326187/

24 4 0