Learn R Programming

lme4 (version 1.1-13)

NelderMead: Nelder-Mead Optimization of Parameters, Possibly (Box) Constrained

Description

Nelder-Mead optimization of parameters, allowing optimization subject to box constraints (contrary to the default, method = "Nelder-Mead", in R's optim()), and using reverse communications.

Usage

Nelder_Mead(fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf, n),
            control = list())

Arguments

fn
a function of a single numeric vector argument returning a numeric scalar.
par
numeric vector of starting values for the parameters.
lower
numeric vector of lower bounds (elements may be -Inf).
upper
numeric vector of upper bounds (elements may be Inf).
control
a named list of control settings. Possible settings are
iprint
numeric scalar - frequency of printing evaluation information. Defaults to 0 indicating no printing.
maxfun
numeric scalar - maximum number of function evaluations allowed (default:10000).
FtolAbs
numeric scalar - absolute tolerance on change in function values (default: 1e-5)
FtolRel
numeric scalar - relative tolerance on change in function values (default:1e-15)
XtolRel
numeric scalar - relative tolerance on change in parameter values (default: 1e-7)
MinfMax
numeric scalar - maximum value of the minimum (default: .Machine$double.xmin)
xst
numeric vector of initial step sizes to establish the simplex - all elements must be non-zero (default: rep(0.02,length(par)))
xt
numeric vector of tolerances on the parameters (default: xst*5e-4)
verbose
numeric value: 0=no printing, 1=print every 20 evaluations, 2=print every 10 evalutions, 3=print every evaluation. Sets ‘iprint’, if specified, but does not override it.
warnOnly
a logical indicating if non-convergence (codes -1,-2,-3) should not stop(.), but rather only call warning and return a result which might inspected. Defaults to FALSE, i.e., stop on non-convergence.

Value

a list with components
fval
numeric scalar - the minimum function value achieved
par
numeric vector - the value of x providing the minimum
convergence
integer valued scalar, if not 0, an error code:
-4
nm_evals: maximum evaluations reached
-3
nm_forced: ?
-2
nm_nofeasible: cannot generate a feasible simplex
-1
nm_x0notfeasible: initial x is not feasible (?)
0
successful convergence
message
a string specifying the kind of convergence.
control
the list of control settings after substituting for defaults.
feval
the number of function evaluations.

See Also

The class definition and generator function.

Examples

Run this code
fr <- function(x) {   ## Rosenbrock Banana function
    x1 <- x[1]
    x2 <- x[2]
    100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
p0 <- c(-1.2, 1)

oo  <- optim(p0, fr) ## also uses Nelder-Mead by default
o.  <- Nelder_Mead(fr, p0)
o.1 <- Nelder_Mead(fr, p0, control=list(verbose=1))# -> some iteration output
stopifnot(identical(o.[1:4], o.1[1:4]),
          all.equal(o.$par, oo$par, tolerance=1e-3))# diff: 0.0003865

<!-- %%## but this shows that something "does not work" -->
o.2 <- Nelder_Mead(fr, p0, control=list(verbose=3, XtolRel=1e-15, FtolAbs= 1e-14))
all.equal(o.2[-5],o.1[-5], tolerance=1e-15)# TRUE, unexpectedly

Run the code above in your browser using DataLab