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
--
John Fox, Professor Emeritus
McMaster University
Hamilton, Ontario, Canada
web: https://www.john-fox.ca/
--
On 2024-12-13 1:45 p.m., Duncan Murdoch wrote:
Caution: External email.


You posted a version of this question on StackOverflow, and were given
advice there that you ignored.

nloptr() clearly indicates that it is quitting without reaching an
optimum, but you are hiding that message.  Don't do that.

Duncan Murdoch

On 2024-12-13 12:52 p.m., Daniel Lobo wrote:
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

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to