hooke_jeeves {pracma} | R Documentation |
Hooke-Jeeves Function Minimization Method
Description
An implementation of the Hooke-Jeeves algorithm for derivative-free optimization.
Usage
hooke_jeeves(x0, fn, ..., lb = NULL, ub = NULL, tol = 1e-08,
maxfeval = 10000, target = Inf, info = FALSE)
Arguments
x0 |
starting vector. |
fn |
nonlinear function to be minimized. |
... |
additional arguments to be passed to the function. |
lb , ub |
lower and upper bounds. |
tol |
relative tolerance, to be used as stopping rule. |
maxfeval |
maximum number of allowed function evaluations. |
target |
iteration stops when this value is reached. |
info |
logical, whether to print information during the main loop. |
Details
This method computes a new point using the values of f
at suitable
points along the orthogonal coordinate directions around the last point.
Value
List with following components:
xmin |
minimum solution found so far. |
fmin |
value of |
count |
number of function evaluations. |
convergence |
NOT USED at the moment. |
info |
special info from the solver. |
Note
Hooke-Jeeves is notorious for its number of function calls. Memoization is often suggested as a remedy.
For a similar implementation of Hooke-Jeeves see the ‘dfoptim’ package.
References
C.T. Kelley (1999), Iterative Methods for Optimization, SIAM.
Quarteroni, Sacco, and Saleri (2007), Numerical Mathematics, Springer-Verlag.
See Also
Examples
## Rosenbrock function
rosenbrock <- function(x) {
n <- length(x)
x1 <- x[2:n]
x2 <- x[1:(n-1)]
sum(100*(x1-x2^2)^2 + (1-x2)^2)
}
hooke_jeeves(c(0,0,0,0), rosenbrock)
## $xmin
## [1] 1.000002 1.000003 1.000007 1.000013
## $fmin
## [1] 5.849188e-11
## $count
## [1] 1691
## $convergence
## [1] 0
## $info
## $info$solver
## [1] "Hooke-Jeeves"
## $info$iterations
## [1] 26
hooke_jeeves(rep(0,4), lb=rep(-1,4), ub=0.5, rosenbrock)
## $xmin
## [1] 0.50000000 0.26221320 0.07797602 0.00608027
## $fmin
## [1] 1.667875
## $count
## [1] 536
## $convergence
## [1] 0
## $info
## $info$solver
## [1] "Hooke-Jeeves"
## $info$iterations
## [1] 26