fmin_bfgs#
- scipy.optimize.fmin_bfgs(f, x0, fprime=None, args=(), gtol=1e-05, norm=inf, epsilon=np.float64(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)[源代码][源代码]#
使用BFGS算法最小化一个函数。
- 参数:
- f : 可调用函数
f(x,*args)
可调用 要最小化的目标函数。
- x0ndarray
初始猜测,形状 (n,)
- fprime : 可调用
f'(x,*args)
, 可选可调用 f 的梯度。
- 参数tuple, 可选
传递给 f 和 fprime 的额外参数。
- gtolfloat, 可选
如果梯度范数小于 gtol,则成功终止
- 规范float, 可选
范数的顺序(Inf 是最大值,-Inf 是最小值)
- epsilonint 或 ndarray,可选
如果 fprime 被近似,使用此值作为步长。
- 回调可调用,可选
一个可选的用户提供的函数,在每次迭代后调用。调用方式为
callback(xk)
,其中xk
是当前的参数向量。- maxiterint, 可选
要执行的最大迭代次数。
- 完整输出bool, 可选
如果为真,除了
xopt
外,还返回fopt
、func_calls
、grad_calls
和warnflag
。- dispbool, 可选
如果为真,打印收敛信息。
- retallbool, 可选
如果为True,则在每次迭代时返回结果列表。
- xrtolfloat, 默认值: 0
x 的相对容差。如果步长小于
xk * xrtol
,则成功终止,其中xk
是当前参数向量。- c1浮点数,默认值:1e-4
Armijo 条件规则的参数。
- c2float, 默认值: 0.9
曲率条件规则的参数。
- hess_inv0None 或 ndarray,可选``
初始逆 Hessian 估计,形状为 (n, n)。如果为 None(默认),则使用单位矩阵。
- f : 可调用函数
- 返回:
- xoptndarray
最小化 f 的参数,即
f(xopt) == fopt
。- fopt浮动
最小值。
- goptndarray
在最小值处的梯度值,f’(xopt),应该接近0。
- Boptndarray
1/f’’(xopt) 的值,即逆 Hessian 矩阵。
- 函数调用整数
函数调用的次数。
- grad_calls整数
已进行的梯度调用次数。
- 警告标志整数
1 : 超过最大迭代次数。2 : 梯度和/或函数调用未变化。3 : 遇到 NaN 结果。
- allvecs列表
每次迭代时 xopt 的值。仅当 retall 为 True 时返回。
参见
minimize
多变量函数最小化算法的接口。特别参见
method='BFGS'
。
注释
使用Broyden,Fletcher,Goldfarb和Shanno(BFGS)的拟牛顿法优化函数`f`,其梯度由`fprime`给出。
参数 c1 和 c2 必须满足
0 < c1 < c2 < 1
。参考文献
Wright, 和 Nocedal ‘数值优化’, 1999, 第198页。
示例
>>> 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])