[Rd] nlminb with constraints failing on some platforms
Brad Bell
br@dbe|| @end|ng |rom @e@net@com
Mon Feb 4 15:21:18 CET 2019
I get the failure message. To be specific:
adcomp.git>R CMD BATCH --quiet test_nlminb.R
adcomp.git>cat test_nlminb.Rout
> f <- function(x) sum( log(diff(x)^2+.01) + (x[1]-1)^2 )
> opt <- nlminb(rep(0, 10), f, lower=-1, upper=3)
> xhat <- rep(1, 10)
> abs( opt$objective - f(xhat) ) < 1e-4 ## Must be TRUE
[1] FALSE
My system is described by:
adcomp.git>uname -a
Linux localhost.localdomain 4.17.7-200.fc28.x86_64 #1 SMP Tue Jul 17 16:28:31 UTC 2018 x86_64 x86_64
x86_64 GNU/Linux
My version of R is described by:
Source : R-3.5.2-2.fc28.src.rpm
I have tried passing in the gradient and turning on the trace and it gives nearly the exact same
trace with and without the gradient.
Here is the output of a very similar case with the gradient:
> n <- 10
> f <- function(x) {
+ result <- 0.0
+ for( i in 2 : n ) {
+ result <- result + log( (x[i] - x[i-1])^2 + 0.01 ) + (x[1] - 1.0)^2
+ }
+ result
+ }
> g <- function(x) {
+ result <- rep(0.0, n)
+ for( i in 2 : n ) {
+ result[1] <- result[1] + 2.0 * (x[1] - 1.0)
+ log_arg <- ( x[i] - x[i-1] )^2 + 0.01
+ log_arg_i <- 2.0 * (x[i] - x[i-1])
+ result[i] <- result[i] + log_arg_i / log_arg
+ result[i-1] <- result[i-1] - log_arg_i / log_arg
+ }
+ result
+ }
> xstart <- rep(0.0, n)
> opt <- nlminb(
+ xstart,
+ objective=f ,
+ gradient=g,
+ lower=-3,
+ upper=3,
+ control=list(trace=1)
+ )
0: -32.446532: 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000
... snip ...
150: -37.750217: 0.796764 0.303221 0.285377 0.271175 0.257584 0.248540 0.239230 0.234184 0.229395
0.227872
> opt$par
[1] 0.7967636 0.3032208 0.2853775 0.2711747 0.2575838 0.2485403 0.2392304
[8] 0.2341841 0.2293946 0.2278722
> g(opt$par)
[1] 0.23427575 -0.43398577 -0.67415314 -0.11550223 -0.87486481 0.05194325
[7] -0.83926642 -0.05100054 -0.65128392 -0.30441806
>
More information about the R-devel
mailing list