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,则返回
fopt
,func_calls
,grad_calls
,以及warnflag
除了……之外xopt
。- disp布尔值,可选
如果为True,则打印收敛消息。
- retall布尔值,可选
如果为True,则返回每次迭代的结果列表。
- f :可调用
- 退货
- 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])