scipy.optimize.

fmin_ncg#

scipy.optimize.fmin_ncg(f, x0, fprime, fhess_p=None, fhess=None, args=(), avextol=1e-05, epsilon=1.4901161193847656e-08, maxiter=None, full_output=0, disp=1, retall=0, callback=None, c1=0.0001, c2=0.9)[source]#

使用 Newton-CG 方法無約束地最小化函數。

參數:
f可呼叫物件 f(x, *args)

要最小化的目標函數。

x0ndarray

初始猜測值。

fprime可呼叫物件 f'(x, *args)

f 的梯度。

fhess_p可呼叫物件 fhess_p(x, p, *args), 選用

計算 f 的 Hessian 矩陣與任意向量 p 的乘積的函數。

fhess可呼叫物件 fhess(x, *args), 選用

計算 f 的 Hessian 矩陣的函數。

argstuple,選用

傳遞給 f、fprime、fhess_p 和 fhess 的額外參數 (同一組額外參數會提供給所有這些函數)。

epsilonfloat 或 ndarray,選用

如果 fhess 被近似,則使用此值作為步長。

callback可呼叫物件,選用

一個選用的使用者提供函數,在每次迭代後被呼叫。呼叫方式為 callback(xk),其中 xk 是目前的參數向量。

avextolfloat,選用

當最小化器的平均相對誤差低於此值時,即假定收斂。

maxiterint,選用

要執行的最大迭代次數。

full_outputbool,選用

如果為 True,則返回選用的輸出。

dispbool,選用

如果為 True,則印出收斂訊息。

retallbool,選用

如果為 True,則返回每次迭代結果的列表。

c1float,預設值:1e-4

Armijo 條件規則的參數。

c2float,預設值:0.9

曲率條件規則的參數

返回:
xoptndarray

最小化 f 的參數,即 f(xopt) == fopt

foptfloat

xopt 處的函數值,即 fopt = f(xopt)

fcallsint

進行的函數呼叫次數。

gcallsint

進行的梯度呼叫次數。

hcallsint

進行的 Hessian 呼叫次數。

warnflagint

演算法產生的警告。 1:超出最大迭代次數。 2:線搜索失敗 (精度損失)。 3:遇到 NaN 結果。

allvecslist

如果 retall 為 True 時,每次迭代的結果 (請參閱下方)。

另請參閱

minimize

多變數函數最小化演算法的介面。 特別參閱 ‘Newton-CG’ 方法

註解

只需提供 fhess_pfhess 其中之一。 如果提供了 fhess,則會忽略 fhess_p。 如果 fhessfhess_p 都沒有提供,則 Hessian 乘積將使用 fprime 上的有限差分來近似。 fhess_p 必須計算 Hessian 矩陣與任意向量的乘積。 如果沒有提供,則會使用 fprime 上的有限差分來計算。

Newton-CG 方法也稱為截斷牛頓法。 此函數與 scipy.optimize.fmin_tnc 的不同之處在於

  1. scipy.optimize.fmin_ncg 完全使用 NumPy 以 Python 撰寫

    和 scipy,而 scipy.optimize.fmin_tnc 則呼叫 C 函數。

  2. scipy.optimize.fmin_ncg 僅適用於無約束最小化

    而 scipy.optimize.fmin_tnc 適用於無約束最小化或盒約束最小化。(盒約束為每個變數分別提供上下界。)

參數 c1c2 必須滿足 0 < c1 < c2 < 1

參考文獻

Wright & Nocedal, ‘Numerical Optimization’, 1999, p. 140.