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

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Fri Dec 13 19:45:47 CET 2024


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



More information about the R-help mailing list