Is anyone able to provide a layman's explanation for why the nloptr algorithm should terminate when an optimisation step changes every parameter by less than xtol_rel multiplied by the absolute value of the parameter? Why is this a good condition to draw the conclusion that this iteration is the local optimum? I am finding it difficult to understand the intuition behind it.
I can provide an example of the optimisation that I am working on:
eval_f0 <- function(x){
return(-((plogis(-2.15083 + 0.0000471*x[1])*exp(9.87243)*(x[1])^0.468)+
(plogis(-2.15083 + 0.0000471*x[2])*exp(9.87243)*(x[2])^0.468)+
(plogis(-2.15083 + 0.0000471*x[3])*exp(9.87243)*(x[3])^0.468)+
(plogis(-2.15083 + 0.0000471*x[4])*exp(9.87243)*(x[4])^0.468)+
(plogis(-1.86183 + 0.0000471*x[5])*exp(9.04243)*(x[5])^0.468)+
(plogis(-1.86183 + 0.0000471*x[6])*exp(9.04243)*(x[6])^0.468)+
(plogis(-1.86183 + 0.0000471*x[7])*exp(9.04243)*(x[7])^0.468)+
(plogis(-1.86183 + 0.0000471*x[8])*exp(9.04243)*(x[8])^0.468)+
(plogis(-1.06983 + 0.0000471*x[9])*exp(9.23543)*(x[9])^0.468)+
(plogis(-1.06983 + 0.0000471*x[10])*exp(9.23543)*(x[10])^0.468)+
(plogis(-1.06983 + 0.0000471*x[11])*exp(9.23543)*(x[11])^0.468)+
(plogis(-1.06983 + 0.0000471*x[12])*exp(9.23543)*(x[12])^0.468)))
}
# constraint function
eval_g0 <- function(x)
{
return(x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+x[8]+x[9]+x[10]+x[11]+x[12]-50000)
}
# Set optimization options.
opts <- list( "algorithm"= "NLOPT_LN_COBYLA",
"xtol_rel"= 1.0e-7,
"maxeval"= 1000000,
"print_level" = 3 )
# Solve
res2 <- nloptr( x0=c(10000,3666,2000,1000,10000,3666,2000,1000,10000,3666,2000,1000),
eval_f=eval_f0,
lb = c(0,0,0,0,0,0,0,0,0,0,0,0),
ub = c(80000,80000,80000,80000,80000,80000,80000,80000,80000,80000,80000,80000),
eval_g_ineq = eval_g0,
opts = opts)
Generally speaking, the maximum absolute error is given by
and the maximum relative error is given by
Therefore, it makes sense to use the relative error multiplied by the absolute value of the iteration
y[k].or
nloptr::nloptrhas two values for the relative tolerance,xtol_relandftol_rel. See the vignette, section Description of options. Or, in R, run