fmin_bfgs — SciPy v1.15.3 Manual (original) (raw)
scipy.optimize.
scipy.optimize.fmin_bfgs(f, x0, fprime=None, args=(), gtol=1e-05, norm=inf, epsilon=1.4901161193847656e-08, maxiter=None, full_output=0, disp=1, retall=0, callback=None, xrtol=0, c1=0.0001, c2=0.9, hess_inv0=None)[source]#
Minimize a function using the BFGS algorithm.
Parameters:
fcallable f(x,*args)
Objective function to be minimized.
x0ndarray
Initial guess, shape (n,)
fprimecallable f'(x,*args)
, optional
Gradient of f.
argstuple, optional
Extra arguments passed to f and fprime.
gtolfloat, optional
Terminate successfully if gradient norm is less than gtol
normfloat, optional
Order of norm (Inf is max, -Inf is min)
epsilonint or ndarray, optional
If fprime is approximated, use this value for the step size.
callbackcallable, optional
An optional user-supplied function to call after each iteration. Called as callback(xk)
, where xk
is the current parameter vector.
maxiterint, optional
Maximum number of iterations to perform.
full_outputbool, optional
If True, return fopt
, func_calls
, grad_calls
, andwarnflag
in addition to xopt
.
dispbool, optional
Print convergence message if True.
retallbool, optional
Return a list of results at each iteration if True.
xrtolfloat, default: 0
Relative tolerance for x. Terminate successfully if step size is less than xk * xrtol
where xk
is the current parameter vector.
c1float, default: 1e-4
Parameter for Armijo condition rule.
c2float, default: 0.9
Parameter for curvature condition rule.
hess_inv0None or ndarray, optional``
Initial inverse hessian estimate, shape (n, n). If None (default) then the identity matrix is used.
Returns:
xoptndarray
Parameters which minimize f, i.e., f(xopt) == fopt
.
foptfloat
Minimum value.
goptndarray
Value of gradient at minimum, f’(xopt), which should be near 0.
Boptndarray
Value of 1/f’’(xopt), i.e., the inverse Hessian matrix.
func_callsint
Number of function_calls made.
grad_callsint
Number of gradient calls made.
warnflaginteger
1 : Maximum number of iterations exceeded. 2 : Gradient and/or function calls not changing. 3 : NaN result encountered.
allvecslist
The value of xopt at each iteration. Only returned if retall is True.
See also
Interface to minimization algorithms for multivariate functions. See method='BFGS'
in particular.
Notes
Optimize the function, f, whose gradient is given by _fprime_using the quasi-Newton method of Broyden, Fletcher, Goldfarb, and Shanno (BFGS).
Parameters c1 and c2 must satisfy 0 < c1 < c2 < 1
.
References
Wright, and Nocedal ‘Numerical Optimization’, 1999, p. 198.
Examples
import numpy as np from scipy.optimize import fmin_bfgs def quadratic_cost(x, Q): ... return x @ Q @ x ... x0 = np.array([-3, -4]) cost_weight = np.diag([1., 10.])
Note that a trailing comma is necessary for a tuple with single element
fmin_bfgs(quadratic_cost, x0, args=(cost_weight,)) Optimization terminated successfully. Current function value: 0.000000 Iterations: 7 # may vary Function evaluations: 24 # may vary Gradient evaluations: 8 # may vary array([ 2.85169950e-06, -4.61820139e-07])
def quadratic_cost_grad(x, Q): ... return 2 * Q @ x ... fmin_bfgs(quadratic_cost, x0, quadratic_cost_grad, args=(cost_weight,)) Optimization terminated successfully. Current function value: 0.000000 Iterations: 7 Function evaluations: 8 Gradient evaluations: 8 array([ 2.85916637e-06, -4.54371951e-07])