当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.fmin_bfgs用法及代码示例


本文简要介绍 python 语言中 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, xrtol=0, c1=0.0001, c2=0.9, hess_inv0=None)#

使用 BFGS 算法最小化函数。

参数

f 可调用f(x,*args)

要最小化的目标函数。

x0 ndarray

初始猜测,形状 (n,)

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

f的梯度。

args 元组,可选

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

gtol 浮点数,可选

如果梯度范数小于 gtol,则成功终止

norm 浮点数,可选

范数阶(Inf 为最大值,-Inf 为最小值)

epsilon int 或 ndarray,可选

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

callback 可调用的,可选的

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

maxiter 整数,可选

要执行的最大迭代次数。

full_output 布尔型,可选

如果为 True,则返回 foptfunc_callsgrad_callswarnflag 以及 xopt

disp 布尔型,可选

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

retall 布尔型,可选

如果为真,则在每次迭代时返回结果列表。

xrtol 浮点数,默认值:0

相对耐受性x。如果步长小于则成功终止xk * xrtol其中xk是当前参数向量。

c1 浮点数,默认:1e-4

Armijo 条件规则的参数。

c2 浮点数,默认:0.9

曲率条件规则的参数。

hess_inv0 无或 ndarray,可选``

初始逆 Hessian 估计,形状 (n, n)。如果无(默认),则使用单位矩阵。

返回

xopt ndarray

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

fopt 浮点数

最小值。

gopt ndarray

最小梯度值 f'(xopt),应接近 0。

Bopt ndarray

1/f''(xopt) 的值,即 Hessian 逆矩阵。

func_calls int

function_calls 的数量。

grad_calls int

进行的梯度调用次数。

warnflag 整数

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

allvecs 列表

每次迭代时 xopt 的值。只有当retall 为True 时才返回。

注意

使用 Broyden、Fletcher、Goldfarb 和 Shanno (BFGS) 的 quasi-Newton 方法优化函数 f,其梯度由 fprime 给出。

参数c1c2必须满足0 < c1 < c2 < 1.

参考

Wright 和 Nocedal “数值优化”,1999,p。 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])

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.fmin_bfgs。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。