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.