[R] Non linear optimization with nloptr package fail to produce true optimal result

J C Nash pro|jcn@@h @end|ng |rom gm@||@com
Fri Dec 13 20:51:01 CET 2024


Interesting that alabama and nloptr both use auglag but alabama gets a lower objective fn.
I think there could be lots of exploration of controls and settings to play with to find out
what is going on.


alabama::auglag
f, ci, ce,ob,val:   0   -4.71486e-08   1029.77   1029.77  at [1]  -0.610594   4.307408   6.254267 -11.919881
 > solfox<-c( 1.576708, 6.456606, 6.195305, -19.008 )
 > conobj(solfox)
f, ci, ce,ob,val:   0   -1.031085e-05   1287.707   1287.707  at [1]   1.576708   6.456606   6.195305 -19.008000
          [,1]
[1,] 1287.707

ci is the inequality constraint fn, ce the equality one, ob is the raw objective, val the penalized one, then the 4 
parameters.

JN


On 2024-12-13 14:44, John Fox wrote:
> Dear Daniel et al.,
> 
> Following on Duncan's remark and examining the message produced by nloptr(), I simply tried increasing the maximum 
> number of function evaluations:
> ------ snip -------
> 
>  > nloptr(rep(0, 4), f, eval_g_ineq = hin, eval_g_eq = Hx, opts =
> +          list("algorithm" = "NLOPT_LN_COBYLA", "xtol_rel" = 1.0e-8,
> +               maxeval = 1e5)
> + )
> 
> Call:
> 
> nloptr(x0 = rep(0, 4), eval_f = f, eval_g_ineq = hin, eval_g_eq = Hx,
>      opts = list(algorithm = "NLOPT_LN_COBYLA", xtol_rel = 1e-08,
>          maxeval = 1e+05))
> 
> 
> Minimization using NLopt version 2.7.1
> 
> NLopt solver status: 4 ( NLOPT_XTOL_REACHED: Optimization stopped
> because xtol_rel or xtol_abs (above) was reached. )
> 
> Number of Iterations....: 46317
> Termination conditions:  xtol_rel: 1e-08    maxeval: 1e+05
> Number of inequality constraints:  1
> Number of equality constraints:    1
> Optimal value of objective function:  1287.71725107671
> Optimal value of controls: 1.576708 6.456606 6.195305 -19.008
> 
> ---------- snip ----------
> 
> That produces a solution closer to, and better than, the one that you suggested (which you obtained how?):
> 
>  > f(c(0.222, 6.999, 6.17, -19.371))
> [1] 1325.076
> 
> I hope this helps,
>   John



More information about the R-help mailing list