[R] Problem with optim (method L-BFGS-B)

Prof Brian Ripley ripley at stats.ox.ac.uk
Fri Nov 9 09:23:42 CET 2001


On Thu, 8 Nov 2001, Isabelle ZABALZA wrote:

> Hello,
>
> I've just a little problem using the function optim.
> Here is the function I want to optimize :
>
> test_function(x){(exp(-0.06751 + 0.25473*((x[1]-350)/150) +
> 0.04455*((x[2]-40)/20) + 0.09399*((x[3]-400)/100) -
> 0.17238*((x[4]-250)/50)-
> 0.45984*((x[5]-550)/150)-0.39508*((x[1]-350)/150)* ((x[1]-350)/150) -
> 0.05116*((x[2]-40)/20)* ((x[2]-40)/20) -
> 0.27735*((x[3]-400)/100)*((x[3]-400)/100) - 0.12902*((x[4]-250)/50)*
> ((x[4]-250)/50)-1.07812*((x[5]-550)/150)* ((x[5]-550)/150) -
> 0.14650*((x[1]-350)/150)*((x[2]-40)/20) - 0.39647*((x[1]-350)/150)*
> ((x[3]-400)/100) + 0.09800*((x[1]-350)/150)* ((x[4]-250)/50) +
> 1.01607*((x[1]-350)/150)*((x[5]-550)/150) -0.04202*((x[2]-40)/20)*
> ((x[3]-400)/100) + 0.05057*((x[2]-40)/20)* ((x[4]-250)/50) +
> 0.17933*((x[2]-40)/20)*((x[5]-550)/150) + 0.10944*((x[3]-400)/100)*
> ((x[4]-250)/50) + 0.62105*((x[3]-400)/100)* ((x[5]-550)/150) -
> 0.22426*((x[4]-250)/50)*((x[5]-550)/150))/219741978624 )}
>
> Then I run the following command, and I get a pretty good result (I know
> approximatively the theoritical maximum)
>
>  optim(c(200,60,500,300,700),test,control=list(fnscale=-1))$par
> [1] 398.17520  31.34863 372.17182 217.30874 533.49458
>
> Fortunately, all the optimal values fall in their range of possible
> value. But to be rigourous, I should perform a box-constrained
> optimization.
> Then, I do so with the following command  (in fixing the lower and upper
> args and not):
>
>  optim(c(200,60,500,300,700),test,control=list(fnscale=-1),method="L-BFGS-B",lower=c(200,20,300,200,400),upper=c(500,60,500,300,700))$par
>
> [1] 200  60 500 300 700
>
>  optim(c(200,60,500,300,700),test,control=list(fnscale=-1),method="L-BFGS-B")$par
>
> [1] 200.00000  60.00007 500.00000 300.00000 700.00000
>
> Here the result I get is wrong, and in fact it is more or less the
> initial guess I 've set.
>
> Can someone explain me what is going wrong with the method "L-BFGS-B"

Not looking at all the output.  There's a typo in your code, but I get

>
optim(c(200,60,500,300,700),test,control=list(fnscale=-1),method="L-BFGS-B",lower=c(200,20,300,200,400),upper=c(500,60,500,300,700))
$par
[1] 200  60 500 300 700

$value
[1] 3.301069e-13

$counts
function gradient
       1        1

$convergence
[1] 52

$message
[1] "ERROR: ABNORMAL_TERMINATION_IN_LNSRCH"

In short, the line search is failing.


MORAL: always check that optim says it has converged.

You need to scale your problem.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list