R:计算优化函数所需的迭代次数



我正在使用R编程语言。

我定义了以下功能:

f1 <- function(x) {

i <<- i+1
vals[[i]] <<- x
final_value = x[1]^2 + x[2]^2
}

然后优化了这个功能:

i <- 0 
vals <- list()
res <- optim(c(1,1), f1, method="CG")

我正试图理解";optim";(https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/optim)功能:

$par
[1] -4.103643e-07 -4.103643e-07
$value
[1] 3.367978e-13
$counts
function gradient 
26       11 
$convergence
[1] 0
$message
NULL

特别是,我试图理解;计数";论点。阅读文件,给出以下解释:

计数:一个两元素的整数向量,分别给出对fn和gr的调用次数。这排除了计算Hessian所需的调用(如果请求(,以及计算梯度的有限差分近似值所需的对fn的任何调用

我本以为";计数";将指函数优化所需的迭代次数。但当我看迭代次数时,迭代的总次数与"0"的输出不匹配;计数":

> vals
[[1]]
[1] 1 1
[[2]]
[1] 1.001 1.000
[[3]]
[1] 0.999 1.000
[[4]]
[1] 1.000 1.001
....
[[68]]
[1] -1.000410e-03 -4.103643e-07
[[69]]
[1] -4.103643e-07  9.995896e-04
[[70]]
[1] -4.103643e-07 -1.000410e-03

例如,似乎使用了70次迭代来优化该函数;计数";论证表明使用了26次迭代。

有人能帮我理解什么吗;计数";在这个问题中,70和26之间有什么区别

谢谢!

正如文档所述,函数optims不计算所有函数调用。如果函数被调用,例如计算Hessian导数,或者近似步骤,vals将获得更多的值,但res$counts[["function"]]不会,因此与函数调用的总数(70(相比,该值较小(26(。您想要优化的函数非常简单,因此不需要太多迭代,大多数调用(70-26(只是管理开销。差异越大,花在主要部分(实际优化(上的时间就越少。

最新更新