Skip to content

avoiding a needless function evaluation in optimize() (PR#9523)

2 messages · j.j.goeman at lumc.nl, Brian Ripley

#
Full_Name: Jelle Goeman
Version: 2.4.0
OS: windows XP
Submission from: (NULL) (145.88.209.33)


 Hi,

I like to use optimize() to optimize functions whose evaluation is costly in
terms of computation time. The Brent algorithm which is implemented in optimize
was designed to optimize a function with as few function evaluations as
possible. Therefore it bothers me that optimize() always evaluates the function
twice at the optimal value. This can be seen for example by saying:

square <- function(x) {
  print(x)
  x*x
}
opt <- optimize(square, c(-5,1), tol=0.1)

Looking at the code of optimize(), I see that the extra function evaluation
comes when optimize returns

list(minimum = val, objective = f(val, ...))

f(val, ...) is calculated, but f(val, ...) has already been calculated at some
point during the algorithm.

Would it be possible to let optimize() store its previous function evaluations
to avoid this unnecessary function evaluation? 

Kind regards,

Jelle
1 day later
#
This is very far from easy, as the C code used does not return the 
function value.

If you would like to rewrite it and the interface and submit a patch it 
will be considered.

It's hard to imagine an application where this would matter, and you have 
not given one to encourage us to give this more than the lowest priority 
on the wishlist.
On Wed, 21 Feb 2007, j.j.goeman at lumc.nl wrote: