neldermead {nloptr} | R Documentation |
An implementation of almost the original Nelder-Mead simplex algorithm.
neldermead(x0, fn, lower = NULL, upper = NULL, nl.info = FALSE, control = list(), ...)
x0 |
starting point for searching the optimum. |
fn |
objective function that is to be minimized. |
lower, upper |
lower and upper bound constraints. |
nl.info |
logical; shall the original NLopt info been shown. |
control |
list of options, see |
... |
additional arguments passed to the function. |
Provides xplicit support for bound constraints, using essentially the method proposed in [Box]. Whenever a new point would lie outside the bound constraints the point is moved back exactly onto the constraint.
List with components:
par |
the optimal solution found so far. |
value |
the function value corresponding to |
iter |
number of (outer) iterations, see |
convergence |
integer code indicating successful completion (> 0) or a possible error number (< 0). |
message |
character string produced by NLopt and giving additional information. |
The author of NLopt would tend to recommend the Subplex method instead.
J. A. Nelder and R. Mead, “A simplex method for function minimization,” The Computer Journal 7, p. 308-313 (1965).
M. J. Box, “A new method of constrained optimization and a comparison with other methods,” Computer J. 8 (1), 42-52 (1965).
dfoptim::nmk
# Fletcher and Powell's helic valley fphv <- function(x) 100*(x[3] - 10*atan2(x[2], x[1])/(2*pi))^2 + (sqrt(x[1]^2 + x[2]^2) - 1)^2 +x[3]^2 x0 <- c(-1, 0, 0) neldermead(x0, fphv) # 1 0 0 # Powell's Singular Function (PSF) psf <- function(x) (x[1] + 10*x[2])^2 + 5*(x[3] - x[4])^2 + (x[2] - 2*x[3])^4 + 10*(x[1] - x[4])^4 x0 <- c(3, -1, 0, 1) neldermead(x0, psf) # 0 0 0 0, needs maximum number of function calls ## Not run: # Bounded version of Nelder-Mead lower <- c(-Inf, 0, 0) upper <- c( Inf, 0.5, 1) x0 <- c(0, 0.1, 0.1) S <- neldermead(c(0, 0.1, 0.1), rosenbrock, lower, upper, nl.info = TRUE) # $xmin = c(0.7085595, 0.5000000, 0.2500000) # $fmin = 0.3353605 ## End(Not run)