为什么功能“ GenSA”不遵守组件的下限?

时间:2019-05-21 12:11:47

标签: r parameters simulated-annealing

引用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的参数绝不能低于或高于我在lowerhigher中指定的范围。

似乎并非如此:

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)时很清楚!

我误会了吗?我怎么了该如何强制其正常工作?

1 个答案:

答案 0 :(得分:0)

罪犯:

upper=c(Inf, Inf, 0.4)

删除Inf,并将其设置为upper=c(100, 100, 0.4),似乎终于可以实现下界了。

不知道为什么。