[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 19:03:19 CET 2024


COBYLA stands for Contrained Optimization by Linear Approximation.

You seem to have some squares in your functions. Maybe BOBYQA would
be a better choice, though it only does bounds, so you'd have to introduce
a penalty, but then more of the optimx solvers would be available. With
only 4 parameters, possibly one of the Nelder-Mead variants (anms?) would
be suitable at least for tryout.

Optimizers are like other tools. Some are chainsaws, others are scalpels.
Don't do neurosurgery with a chainsaw unless you want a mess.

Have you checked that the objective and contraint are computed correctly?
 > 50% of "your software doesn't work" in optimization are due to such errors.

John Nash


On 2024-12-13 12:52, Daniel Lobo wrote:
> Hi,
> 
> I have below non-linear constraint optimization problem
> 
> #Original artificial data
> 
> library(nloptr)
> 
> set.seed(1)
> A <- 1.34
> B <- 0.5673
> C <- 6.356
> D <- -1.234
> x <- seq(0.5, 20, length.out = 500)
> y <- A + B * x + C * x^2 + D * log(x) + runif(500, 0, 3)
> 
> #Objective function
> 
> X <- cbind(1, x, x^2, log(x))
> f <- function(theta) {
> sum(abs(X %*% theta - y))
> }
> 
> #Constraint
> 
> eps <- 1e-4
> 
> hin <- function(theta) {
>    abs(sum(X %*% theta) - sum(y)) - 1e-3 + eps
> }
> 
> Hx <- function(theta) {
>    X[100, , drop = FALSE] %*% theta - (120 - eps)
> }
> 
> #Optimization with nloptr
> 
> Sol = nloptr(rep(0, 4), f, eval_g_ineq = hin, eval_g_eq = Hx, opts =
> list("algorithm" = "NLOPT_LN_COBYLA", "xtol_rel" = 1.0e-8))$solution
> # -0.2186159 -0.5032066  6.4458823 -0.4125948
> 
> However this does not appear to be optimal value. For example, if I
> use below set,
> 0.222, 6.999, 6.17, -19.371, value of my objective function is lower
> that that using nloptr
> 
> I just wonder in the package nloptr is good for non-linear optimization?
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list