nloptr优化在maxeval步骤之前停止,即使{x,f} tol_ {rel,abs}都设置为0

时间:2017-03-07 17:48:00

标签: c++ r optimization nlopt

我正在查看the manual of nloptr中给出的示例。

我用

替换了代码的最后一部分
local_opts <- list( "algorithm" = "NLOPT_LD_MMA",
                    "xtol_rel" = 0.0,
                    "ftol_rel" = 0.0,
                    "ftol_abs" = 0.0,
                    "xtol_abs" = 0.0)
opts <- list( "algorithm" = "NLOPT_LD_AUGLAG",
              "xtol_rel" = 0.0,
              "ftol_rel" = 0.0,
              "ftol_abs" = 0.0,
              "xtol_abs" = 0.0,
              "maxeval" = 100000,
              "local_opts" = local_opts )
res <- nloptr( x0=x0,
               eval_f=eval_f,
               lb=lb,
               ub=ub,
               eval_g_ineq=eval_g_ineq,
               eval_g_eq=eval_g_eq,
               opts=opts)
print( res )

也就是说,对于主求解器和局部求解器,我将xtol / ftol rel / abs改为全0,注意它们都使用基于梯度的算法。我还将最大步数从1k增加到100k。

然而,求解器以3k步骤更早地终止。

  

调用:nloptr(x0 = x0,eval_f = eval_f,lb = lb,ub = ub,eval_g_ineq =   eval_g_ineq,       eval_g_eq = eval_g_eq,opts = opts)

     

使用NLopt版本2.4.2进行最小化

     

NLopt求解器状态:3(NLOPT_FTOL_REACHED:优化停止   因为达到了ftol_rel或ftol_abs(上面)。 )

     

迭代次数....:3132终止条件:xtol_rel:   0 ftol_rel:0 ftol_abs:0 xtol_abs:0 maxeval:1e + 05   不等式约束:1等式约束的数量:1   目标函数的最优值:17.0140172891563最优值   对照组:1 4.743 3.82115 1.379408

c++ implementation of nlopt,似乎不会发生这种情况。由各种容差水平给出的终止条件是严格的不平等。所以我错过了解决方案状态的意义“NLOPT_FTOL_REACHED:由于达到ftol_rel或ftol_abs(上面),优化已停止。” ?

谢谢!   约翰

0 个答案:

没有答案