fminLBFGSB

Syntax

fminLBFGSB(func, X0, [fprime], [bounds], [m=10], [factr=1e7], [pgtol=1e-5], [epsilon=1e-8], [maxIter=15000], [maxFun=15000], [maxLS=20])

Arguments

func is the function to minimize. The return value of the function must be numeric type.

X0 is a numeric scalar or vector indicating the initial guess.

fprime (optional) is the gradient of func. If not provided, then func returns the function value and the gradient (f, g = func(x, *args)).

bounds (optional) is a numeric matrix indicating the bounds on parameters of X0. The matrix must be in the shape of (N,2), where N=size(X0). The two elements of each row defines the bounds (min, max) on that parameter. float("inf") can be specified for no bound in that direction.

m (optional) is a positive integer indicating the maximum number of variable metric corrections used to define the limited memory matrix. The default value is 10.

factr (optional) is a positive number to stop the iteration when , where eps is the machine precision. Typical values for factr are: 1e12 for low accuracy; 1e7 (default) for moderate accuracy; 10.0 for extremely high accuracy.

pgtol (optional) is a positive number to stop the iteration when , where proj g_i is the i-th component of the projected gradient. The default value is 1e-5.

epsilon (optional) is a positive number indicating the step size used for numerically calculating the gradient. The default value is 1e-8.

maxIter (optional) is a non-negative integer indicating the maximum number of iterations. The default value is 15000.

maxFun (optional) is a non-negative integer indicating the maximum number of function evaluations. The default value is 15000.

maxLS (optional) is a non-negative integer indicating the maximum number of line search steps (per iteration). The default value is 20.

Details

Minimize a function func using the L-BFGS-B algorithm.

Return value: A dictionary with the following members:

  • xopt: A floating-point vector indicating the parameters of the minimum.

  • fopt: A floating-point scalar indicating the value of func at the minimum, i.e., fopt=func(xopt).

  • gopt: A floating-point vector indicating the gradient at the minimum, i.e., gopt=func'(xopt).

  • iterations: The number of iterations.

  • fcalls: The number of function calls made.

  • warnFlag: An integer, which can be

    • 0: Minimization performed.

    • 1: Maximum number of evaluations/iterations exceeded.

    • 2: Stopped for other reasons.

Examples

X = double(0..9)
M = 2
B = 3
Y = double(M * X + B)
def fun(params, x, y) {
	m = params[0]
	b = params[1]
	y_model = m*x + b
	error = sum(square(y - y_model))
	return error
}
initial_values = [0.0, 1.0]
fminLBFGSB(fun{,X,Y}, initial_values)

Output:

fcalls->27
warnFlag->0
xopt->[1.999999985435,3.000000060585]
gopt->[8.05E-10,8.84E-10]
fopt->0E-12
iterations->6