具有无限值的优化函数

时间:2017-07-18 16:01:08

标签: r optimization

为了最小化关于3个参数的函数,我使用了optim函数和“L-BFGS-B”方法。 以下是错误消息:

  

optim中的错误(c(3,0.01,0.75),fn = f,lower = c(0.6,0.0001,0.1),:     L-BFGS-B需要有限值'fn'

当三个参数中的至少一个达到“边界”(即较低或较高的值)时,我已经检查了函数的值,但它从未给出无限值。

如何知道哪些值在optim函数中给出了无穷大的值?

1 个答案:

答案 0 :(得分:2)

快速而肮脏的方法是包装你的函数并打印出传递给它的参数。这是一个做这个的示例会话。

f <- function(par, data){
    if(0.1 < par & par < .9){
        return(Inf)
    }else{
        sqrt(abs(par))
    }
}

并使用optim ...

调用它
> optim(2, f, method = "L-BFGS-B", lower = -1)
Error in optim(2, f, method = "L-BFGS-B", lower = -1) : 
  L-BFGS-B needs finite values of 'fn'

现在包装代码......

wrap_f <- function(par, ...){
    cat(par, "\n")
    f(par, ...)
}

现在我们可以看到所谓的......

> optim(2, wrap_f, method = "L-BFGS-B", lower = -1)
2 
2.001 
1.999 
1.646447 
1.647447 
1.645447 
1.256777 
1.257777 
1.255777 
-0.3018999 
-0.3008999 
-0.3028999 
0.7441084 
Error in optim(2, wrap_f, method = "L-BFGS-B", lower = -1) : 
  L-BFGS-B needs finite values of 'fn'

因此,在这个例子中,它最终试图评估.7441084,它通过如何定义函数给出了错误。