scipy.optimize.fmin_bfgs

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)[源代码]

使用BFGS算法最小化函数。

参数
f :可调用 f(x,*args)可调用

要最小化的目标函数。

x0ndarray

初步猜测是这样的。

fPrime :可调用 f'(x,*args) ,可选可调用

f的梯度。

args元组,可选

传递给f和fPrime的额外参数。

gtol浮动,可选

梯度范数必须小于 gtol 在成功终止之前。

norm浮动,可选

范数的顺序(inf表示最大值,-inf表示最小值)

epsilonint或ndarray,可选

如果 fprime 是近似值,则使用此值作为步长。

callback可调用,可选

用户提供的可选函数,可在每次迭代后调用。称为 callback(xk) ,在哪里 xk 是当前参数向量。

maxiter整型,可选

要执行的最大迭代次数。

full_output布尔值,可选

如果为True,则返回 foptfunc_callsgrad_calls ,以及 warnflag 除了……之外 xopt

disp布尔值,可选

如果为True,则打印收敛消息。

retall布尔值,可选

如果为True,则返回每次迭代的结果列表。

退货
xoptndarray

最小化f的参数,即, f(xopt) == fopt

fopt浮动

最小值。

goptndarray

渐变的最小值,f‘(Xopt),应接近0。

Boptndarray

1/f‘’(Xopt)的值,即逆Hessian矩阵。

func_calls集成

进行的Function_Call数。

grad_calls集成

进行的渐变调用数。

warnflag整数

1:超过最大迭代次数。2:渐变和/或函数调用不变。3:遇到NaN结果。

allvecs列表

的价值 xopt 在每次迭代时。仅在以下情况下返回 retall 是真的。

参见

minimize

与多变量函数的最小化算法的接口。看见 method='BFGS' 尤其是。

注意事项

优化功能, f ,其梯度由下式给出 fprime 使用Broyden,Fletcher,Goldfarb和Shanno(BFGS)的拟牛顿法。

参考文献

和Nocedal“数值优化”,1999,第198页。

示例

>>> 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])