當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。