Learn R Programming

nloptr (version 2.2.0)

lbfgs: Low-storage BFGS

Description

Low-storage version of the Broyden-Fletcher-Goldfarb-Shanno (BFGS) method.

Usage

lbfgs(
  x0,
  fn,
  gr = NULL,
  lower = NULL,
  upper = NULL,
  nl.info = FALSE,
  control = list(),
  ...
)

Value

List with components:

par

the optimal solution found so far.

value

the function value corresponding to par.

iter

number of (outer) iterations, see maxeval.

convergence

integer code indicating successful completion (> 0) or a possible error number (< 0).

message

character string produced by NLopt and giving additional information.

Arguments

x0

initial point for searching the optimum.

fn

objective function to be minimized.

gr

gradient of function fn; will be calculated numerically if not specified.

lower, upper

lower and upper bound constraints.

nl.info

logical; shall the original NLopt info been shown.

control

list of control parameters, see nl.opts for help.

...

further arguments to be passed to the function.

Author

Hans W. Borchers

Details

The low-storage (or limited-memory) algorithm is a member of the class of quasi-Newton optimization methods. It is well suited for optimization problems with a large number of variables.

One parameter of this algorithm is the number m of gradients to remember from previous optimization steps. NLopt sets m to a heuristic value by default. It can be changed by the NLopt function set_vector_storage.

References

J. Nocedal, ``Updating quasi-Newton matrices with limited storage,'' Math. Comput. 35, 773-782 (1980).

D. C. Liu and J. Nocedal, ``On the limited memory BFGS method for large scale optimization,'' Math. Programming 45, p. 503-528 (1989).

See Also

Examples

Run this code

flb <- function(x) {
  p <- length(x)
  sum(c(1, rep(4, p-1)) * (x - c(1, x[-p])^2)^2)
}
# 25-dimensional box constrained: par[24] is *not* at the boundary
S <- lbfgs(rep(3, 25), flb, lower=rep(2, 25), upper=rep(4, 25),
     nl.info = TRUE, control = list(xtol_rel=1e-8))
## Optimal value of objective function:  368.105912874334
## Optimal value of controls: 2  ...  2  2.109093  4

Run the code above in your browser using DataLab