And further to those two: nlminb( obj = function(x) 2*(x+3), start=-2, lower=-Inf, upper=Inf )
On 9 July 2010 23:09, Matthew Killeya <matthewkill...@googlemail.com> wrote: > Yes clearly a bug... there are numerous variations ... problem seems to be > for a linear function whenever the first function valuation is 1. > > e.g. two more examples: > nlminb( obj = function(x) x+1, start=0, lower=-Inf, upper=Inf ) > nlminb( obj = function(x) x+2, start=-1, lower=-Inf, upper=Inf ) > > (I wasn't sure where best to report a bug, so emailed the help list) > > On 9 July 2010 22:10, Peter Ehlers <ehl...@ucalgary.ca> wrote: > >> Actually, it looks like any value other than 1.0 >> (and in (lower, upper)) for start will work. >> >> -Peter Ehlers >> >> >> On 2010-07-09 14:45, Ravi Varadhan wrote: >> >>> Setting abs.tol = 0 works! This turns-off the absolute function >>> convergence >>> criterion. >>> >>> >>> nlminb( objective=function(x) x, start=1, lower=-2, upper=2, >>>> >>> control=list(abs.tol=0)) >>> $par >>> [1] -2 >>> >>> $objective >>> [1] -2 >>> >>> $convergence >>> [1] 0 >>> >>> $message >>> [1] "both X-convergence and relative convergence (5)" >>> >>> $iterations >>> [1] 3 >>> >>> $evaluations >>> function gradient >>> 3 3 >>> >>> >>> This is clearly a bug. >>> >>> >>> Ravi. >>> >>> -----Original Message----- >>> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] >>> On >>> Behalf Of Ravi Varadhan >>> Sent: Friday, July 09, 2010 4:42 PM >>> To: 'Duncan Murdoch'; 'Matthew Killeya' >>> Cc: r-help@r-project.org; ba...@stat.wisc.edu >>> Subject: Re: [R] Not nice behaviour of nlminb (windows 32 bit, version >>> 2.11.1) >>> >>> Duncan, `nlminb' is not intended for non-negative functions only. There >>> is >>> indeed something strange happening in the algorithm! >>> >>> start<- 1.0 # converges to wrong minimum >>> >>> startp<- 1.0 + .Machine$double.eps # correct >>> >>> startm<- 1.0 - .Machine$double.eps # correct >>> >>> nlminb( objective=obj, start=start, lower=-2, upper=2) >>>> >>> $par >>> [1] 0 >>> >>> $objective >>> [1] 0 >>> >>> $convergence >>> [1] 0 >>> >>> $message >>> [1] "absolute function convergence (6)" >>> >>> $iterations >>> [1] 1 >>> >>> $evaluations >>> function gradient >>> 2 2 >>> >>> >>>> nlminb( objective=obj, start=startp, lower=-2, upper=2) >>>> >>> $par >>> [1] -2 >>> >>> $objective >>> [1] -2 >>> >>> $convergence >>> [1] 0 >>> >>> $message >>> [1] "both X-convergence and relative convergence (5)" >>> >>> $iterations >>> [1] 3 >>> >>> $evaluations >>> function gradient >>> 3 3 >>> >>> >>>> nlminb( objective=obj, start=startm, lower=-2, upper=2) >>>> >>> $par >>> [1] -2 >>> >>> $objective >>> [1] -2 >>> >>> $convergence >>> [1] 0 >>> >>> $message >>> [1] "both X-convergence and relative convergence (5)" >>> >>> $iterations >>> [1] 3 >>> >>> $evaluations >>> function gradient >>> 3 3 >>> >>> >>> From the convergence message the `absolute function convergence' seems >>>> to >>>> >>> be >>> the culprit, although I do not understand why that stopping criterion is >>> becoming effective, when the algorithm is started at x=1, but not at any >>> other values. The documentation in IPORT makes it clear that this >>> criterion >>> is effective only for functions where f(x*) = 0, where x* is a local >>> minimum. In this example, x=0 is not a local minimum for f(x), so that >>> criterion should not apply. >>> >>> >>> Ravi. >>> >>> >>> -----Original Message----- >>> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] >>> On >>> Behalf Of Duncan Murdoch >>> Sent: Friday, July 09, 2010 3:45 PM >>> To: Matthew Killeya >>> Cc: r-help@r-project.org; ba...@stat.wisc.edu >>> Subject: Re: [R] Not nice behaviour of nlminb (windows 32 bit, version >>> 2.11.1) >>> >>> On 09/07/2010 10:37 AM, Matthew Killeya wrote: >>> >>>> nlminb( obj = function(x) x, start=1, lower=-Inf, upper=Inf ) >>>> >>>> >>> If you read the PORT documentation carefully, you'll see that their >>> convergence criteria are aimed at minimizing positive functions. (They >>> never state this explicitly, as far as I can see.) So one stopping >>> criterion is that |f(x)|< abs.tol, and that's what it found for you. I >>> don't know if there's a way to turn this off. >>> >>> Doug or Deepayan, do you know if nlminb can be made to work on functions >>> that go negative? >>> >>> Duncan Murdoch >>> >>> $par >>>> [1] 0 >>>> >>>> $objective >>>> [1] 0 >>>> >>>> $convergence >>>> [1] 0 >>>> >>>> $message >>>> [1] "absolute function convergence (6)" >>>> >>>> $iterations >>>> [1] 1 >>>> >>>> $evaluations >>>> function gradient >>>> 2 2 >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.