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

Share:

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

1
2
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 NelderMead class definition and generator function.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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


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

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.