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

Daniel Lobo d@n|e|obo9976 @end|ng |rom gm@||@com
Fri Dec 13 19:05:53 CET 2024


Thanks for your reply.

I have checked the optimized value and applicable constraints. Both
set of the values of parameters satisfy the constraints.

What other solver would you suggest for this problem?

On Fri, 13 Dec 2024 at 23:33, J C Nash <profjcnash using gmail.com> wrote:
>
> 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