gco*_*cci 4 artificial-intelligence r convex-optimization
我对optim函数不是很熟悉,我想从结果中得到这些信息:a)实现结果需要多少次迭代?和b)绘制部分解的序列,即在每次迭代结束时获得的解.
我的代码到现在看起来像这样:
f1 <- function(x) {
x1 <- x[1]
x2 <- x[2]
x1^2 + 3*x2^2
}
res <- optim(c(1,1), f1, method="CG")
Run Code Online (Sandbox Code Playgroud)
如何改进它以获得更多信息?
提前致谢
您可以修改函数以将传递给它的值存储到全局列表中.
i <- 0
vals <- list()
f1 <- function(x) {
i <<- i+1
vals[[i]] <<- x
x1 <- x[1]
x2 <- x[2]
x1^2 + 3*x2^2
}
res <- optim(c(1,1), f1, method="CG")
Run Code Online (Sandbox Code Playgroud)
现在如果你在运行函数后检查i和vals,你可以看到发生了什么.如果要在optim运行时查看值,也可以在函数中抛出print语句.
传递trace=1
作为控制参数,optim
为您提供有关优化进度的更多详细信息:
res <- optim(c(1,1), f1, method="CG", control=list(trace=1))
# Conjugate gradients function minimizer
# Method: Fletcher Reeves
# tolerance used in gradient test=3.63798e-12
# 0 1 4.000000
# parameters 1.00000 1.00000
# * i> 1 4 0.480000
# parameters 0.60000 -0.20000
# i> 2 6 0.031667
# ......
# * i> 13 34 0.000000
# parameters -0.00000 0.00000
# 14 34 0.000000
# parameters -0.00000 0.00000
# Exiting from conjugate gradients minimizer
# 34 function evaluations used
# 15 gradient evaluations used
Run Code Online (Sandbox Code Playgroud)
但是,似乎信息只写入标准输出,因此您必须使用sink
将输出传递给文本文件,然后进行一些编辑以获取绘图的参数值.