【发布时间】:2015-10-21 01:24:42
【问题描述】:
我在R 中运行nloptr 包,并且无法获得算法的中间结果。该算法运行良好,但我不想要最终解决方案和迭代次数,而是希望能够在每次迭代时获得反对函数的当前值。这是我正在使用的代码
library(tgp)
library(nloptr)
#########################################################################################
###
#########################################################################################
f = function(x){
ans = cos(pi*(x[1]+x[2]*x[3]+x[4]))+.2*sin(4*pi*(x[5]*x[6]+x[7])/(x[8]+1))
return(ans)
}
const = function(x){
ans = numeric(2)
ans[1] = sin(pi*(x[1]+x[2]*x[3]+x[4]))+.2*cos(4*pi*(x[5]*x[6]+x[7])/(x[8]+1))
ans[2] = -cos(pi*(x[1]+x[2]*x[3]+x[4]))+.2*cos(4*pi*(x[5]*x[6]+x[7])/(x[8]+1))
ans[1] = -ans[1]
ans[2] = -ans[2]
return(ans)
}
#########################################################################################
###
#########################################################################################
lhs.size = 1
lhs.lower = 0
lhs.upper = 1
x0 = c(lhs(lhs.size,rbind(c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper))))
COB = cobyla(x0,f,hin=const,lower=rep(0,8),upper=rep(1,8),nl.info = TRUE, control = list(xtol_rel = 1e-16, maxeval = 2000))
所以COB 给我的对象是:
> COB
$par
[1] 0.4209398 0.4932406 0.5175745 0.7786042 0.2980017 0.6785051 0.2313283 0.3872766
$value
[1] -0.2828427
$iter
[1] 559
$convergence
[1] 4
$message
[1] "NLOPT_XTOL_REACHED: Optimization stopped because xtol_rel or xtol_abs (above) was reached."
但我想要每个$iteration 的$value。
【问题讨论】:
标签: r mathematical-optimization