【发布时间】:2019-05-21 12:11:46
【问题描述】:
引用the official documentation of the GenSA function from the GenSA package from CRAN:
用法
GenSA(par, fn, lower, upper, control=list(), ...)参数
par向量。组件的初始值 优化。默认为NULL,在这种情况下,默认值为 自动生成。fn要最小化的函数,首先 argument 最小化的参数向量 地方。它应该返回一个标量结果。lower长度为par的向量。 组件的下限。upper长度为par的向量。上 组件的界限。
很好。因此,如果我理解正确,传递给fn 的参数永远不应低于或高于我在lower 和higher 中指定的范围。
好像不是这样的:
library(GenSA)
GenSA(c(1.0/90, 1.0, 0.02), function(args){
arg1 = args[1]; arg2 = args[2]; arg3 = args[3]
print(args)
if(arg2 <= 0) stop("WTF")
0
}, lower=c(0, 1.0, 0), upper=c(Inf, Inf, 0.4))
运行这段代码的结果是不可原谅的:
[1] 0.01111111 1.00000000 0.02000000
[1] 0.0000000 0.0000000 0.2891973
Error in fn(par, ...) : WTF
Calls: GenSA -> <Anonymous> -> fn
Execution halted
为什么GenSA 调用我的函数时第二个组件等于0.0?我以为我说的很清楚:lower=c(0, 1.0, 0)!
我是不是误会了什么?我的错误是什么?如何强制它正常工作?
【问题讨论】:
标签: r parameters simulated-annealing