Flo*_*ian 5 optimization r mathematical-optimization
在接下来的调用中,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
Run Code Online (Sandbox Code Playgroud)
为什么是这样?这是一个错误吗?或者为什么要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
Run Code Online (Sandbox Code Playgroud)
(经R版3.5.0测试.)
迭代是优化算法的一次迭代。函数评估是对目标函数的单次调用。每次迭代需要多少次函数评估取决于:
\n\nL-BFGS-B我认为涉及线搜索......就其价值而言,nlminb允许单独控制最大迭代和最大评估:
\n\n\n
\xe2\x80\x98eval.max\xe2\x80\x99允许的目标函数评估的最大次数。默认为 200。
\n\xe2\x80\x98iter.max\xe2\x80\x99允许的最大迭代次数。默认为 150。