[R] optimize() stuck in local plateau ?
Ravi Varadhan
rvaradhan at jhmi.edu
Mon Oct 1 15:40:44 CEST 2007
Please read the help for optimize() carefully. The following excerpted from
there should help explain your problem:
"The first evaluation of f is always at x_1 = a + (1-phi)(b-a) where (a,b) =
(lower, upper) and phi = (sqrt 5 - 1)/2 = 0.61803.. is the golden section
ratio. Almost always, the second evaluation is at x_2 = a + phi(b-a). Note
that a local minimum inside [x_1,x_2] will be found as solution, even when f
is constant in there, see the last example."
In your case,
> x_1 = a + (1-phi)*(b-a)
> x_1
[1] -0.236068
> x_2 = a + phi*(b-a)
> x_2
[1] 0.236068
>
Since your function is constant in (x_1, x_2), you get your solution in that
interval.
Try a different interval, and you'll get your answer:
> optimize(my.func,interval=c(-1,0),maximum=TRUE)
[1] -0.618034 0.618034
[1] -0.381966 0.000000
[1] -0.763932 0.763932
[1] -0.8090170 0.4045085
[1] -0.7016261 0.7016261
[1] -0.7401333 0.7401333
[1] -0.781153 0.781153
[1] -0.791796 0.791796
[1] -0.7983739 0.7983739
[1] -0.8024392 0.4012196
[1] -0.7958614 0.7958614
[1] -0.7999267 0.7999267
[1] -0.8008864 0.4004432
[1] -0.7993336 0.7993336
[1] -0.8002933 0.4001466
[1] -0.7997001 0.7997001
[1] -0.8000667 0.4000334
[1] -0.7998402 0.7998402
[1] -0.7999802 0.7999802
[1] -0.8000209 0.4000104
[1] -0.7999802 0.7999802
$maximum
[1] -0.7999802
$objective
[1] 0.7999802
Best,
Ravi.
----------------------------------------------------------------------------
-------
Ravi Varadhan, Ph.D.
Assistant Professor, The Center on Aging and Health
Division of Geriatric Medicine and Gerontology
Johns Hopkins University
Ph: (410) 502-2619
Fax: (410) 614-9625
Email: rvaradhan at jhmi.edu
Webpage: http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html
----------------------------------------------------------------------------
--------
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Mike Lawrence
Sent: Monday, October 01, 2007 1:29 AM
To: Rhelp
Subject: [R] optimize() stuck in local plateau ?
Hi all,
Consider the following function:
####
my.func = function(x){
y=ifelse(x>-.5,0,ifelse(x< -.8,abs(x)/2,abs(x)))
print(c(x,y)) #print what was tested and what the result is
return(y)
}
curve(my.func,from=-1,1)
####
When I attempt to find the maximum of this function, which should be
-.8, I find that optimize gets stuck in the plateau area and doesn't
bother testing the more interesting bits of the function:
####
optimize(my.func,interval=c(-1,1),maximum=TRUE)
####
I really don't understand why the search moves to the positive/
constant area of the function and neglects the more negative area of
the function. On step #4, after finding that there is no difference
between tests at -.23, .23 & .52, shouldn't the algorithm try -.52?
In fact, it seems to me that it would make sense to try -.52 on step
3, so that we've tested one negative, one positive (found no
difference), now one negative again. Thoughts?
Of course I could define my interval more reasonably for this
particular function, but this is in fact simply one of a class of
functions I'm exploring, none of which have known formal descriptions
as above (I'm exploring a large number of 'black boxes'). I do know
that the maximum must occur between -1 and 1 for all however. Please
advise on how I might use optimize more usefully.
Mike
--
Mike Lawrence
Graduate Student, Department of Psychology, Dalhousie University
Website: http://memetic.ca
Public calendar: http://icalx.com/public/informavore/Public
"The road to wisdom? Well, it's plain and simple to express:
Err and err and err again, but less and less and less."
- Piet Hein
______________________________________________
R-help at 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.
More information about the R-help
mailing list