在下面对optim()
的调用中,我期望对fn()
进行一次评估,对gr()
进行一次评估,因为maxit=1
。但是,fn()
和gr()
分别评估7次。
optim(par=1000, fn=function(x) x^2, gr=function(x) 2*x,
method="L-BFGS-B", control=list(maxit=1))$counts
function gradient
7 7
为什么是这样?是 bug 吗?还是为什么
optim()
对一次迭代进行7次评估?更详细的输出:
optim(par=1000,
fn=function(x) { cat("f(", x, ")", sep="", fill=TRUE); x^2 },
gr=function(x) { cat("g(", x, ")", sep="", fill=TRUE); 2*x },
method="L-BFGS-B", control=list(maxit=1))$counts
f(1000)
g(1000)
f(999)
g(999)
f(995)
g(995)
f(979)
g(979)
f(915)
g(915)
f(659)
g(659)
f(1.136868e-13)
g(1.136868e-13)
function gradient
7 7
(在R版本3.5.0中进行了测试。)
最佳答案
迭代是优化算法的一次迭代。 函数评估是对目标函数的单次调用。每次迭代需要多少个函数求值取决于:
L-BFGS-B
我认为涉及行搜索... 值得一提的是,
nlminb
允许单独控制最大迭代次数和最大评估次数:关于r - 了解R中optim()的maxit参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53640574/