引用the official documentation of the GenSA
function from the GenSA
package from CRAN:
用法
GenSA(par, fn, lower, upper, control=list(), ...)
参数
par
向量。组件的初始值是 优化。默认值为NULL
,在这种情况下,默认值为 自动生成。fn
首先要最小化的功能 参数最小化的参数向量 地点。它应该返回标量结果。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)
时很清楚!
我误会了吗?我怎么了该如何强制其正常工作?
答案 0 :(得分:0)
罪犯:
upper=c(Inf, Inf, 0.4)
删除Inf
,并将其设置为upper=c(100, 100, 0.4)
,似乎终于可以实现下界了。
不知道为什么。