scipy.optimize.

fmin_tnc#

scipy.optimize.fmin_tnc(func, x0, fprime=None, args=(), approx_grad=0, bounds=None, epsilon=1e-08, scale=None, offset=None, messages=15, maxCGit=-1, maxfun=None, eta=-1, stepmx=0, accuracy=0, fmin=0, ftol=-1, xtol=-1, pgtol=-1, rescale=-1, disp=None, callback=None)[source]#

使用梯度資訊在截斷牛頓演算法中,最小化受限變數的函數。此方法包裝了演算法的 C 實作。

參數:
funccallable func(x, *args)

要最小化的函數。必須執行以下其中一項

  1. 傳回 f 和 g,其中 f 是函數的值,g 是其梯度(浮點數列表)。

  2. 傳回函數值,但將梯度函數作為單獨的 fprime 提供。

  3. 傳回函數值並設定 approx_grad=True

如果函數傳回 None,則中止最小化。

x0array_like

最小值的初始估計值。

fprimecallable fprime(x, *args), optional

func 的梯度。如果為 None,則 func 必須傳回函數值和梯度 (f,g = func(x, *args)) 或 approx_grad 必須為 True。

argstuple, optional

要傳遞給函數的參數。

approx_gradbool, optional

如果為 true,則以數值方式近似梯度。

boundslist, optional

x0 中每個元素的 (min, max) 對,定義該參數的界限。當該方向沒有界限時,對於 min 或 max 使用 None 或 +/-inf。

epsilonfloat, optional

如果 approx_grad 為 True 則使用。有限差分近似 fprime 中的步長。

scalearray_like, optional

應用於每個變數的縮放因子。如果為 None,則對於區間有界變數,因子為 up-low;對於其他變數,因子為 1+|x|。預設為 None。

offsetarray_like, optional

從每個變數中減去的值。如果為 None,則對於區間有界變數,偏移量為 (up+low)/2;對於其他變數,偏移量為 x。

messagesint, optional

用於選擇最小化期間顯示的訊息的位元遮罩,值在 MSGS 字典中定義。預設為 MGS_ALL。

dispint, optional

訊息的整數介面。0 = 無訊息,5 = 所有訊息

maxCGitint, optional

每次主要迭代中 hessian*vector 評估的最大次數。如果 maxCGit == 0,則選擇的方向為 -gradient;如果 maxCGit < 0,則 maxCGit 設定為 max(1,min(50,n/2))。預設為 -1。

maxfunint, optional

函數評估的最大次數。如果為 None,則 maxfun 設定為 max(100, 10*len(x0))。預設為 None。請注意,由於透過數值微分評估梯度,此函數可能會違反限制。

etafloat, optional

線搜尋的嚴格程度。如果 < 0 或 > 1,則設定為 0.25。預設為 -1。

stepmxfloat, optional

線搜尋的最大步長。可能會在呼叫期間增加。如果太小,則會設定為 10.0。預設為 0。

accuracyfloat, optional

有限差分計算的相對精度。如果 <= machine_precision,則設定為 sqrt(machine_precision)。預設為 0。

fminfloat, optional

最小函數值估計值。預設為 0。

ftolfloat, optional

停止準則中 f 值的精度目標。如果 ftol < 0.0,則 ftol 設定為 0.0,預設為 -1。

xtolfloat, optional

停止準則中 x 值的精度目標(在應用 x 縮放因子之後)。如果 xtol < 0.0,則 xtol 設定為 sqrt(machine_precision)。預設為 -1。

pgtolfloat, optional

停止準則中投影梯度值的精度目標(在應用 x 縮放因子之後)。如果 pgtol < 0.0,則 pgtol 設定為 1e-2 * sqrt(accuracy)。不建議將其設定為 0.0。預設為 -1。

rescalefloat, optional

用於觸發 f 值重新縮放的縮放因子(以 log10 為單位)。如果為 0,則在每次迭代時重新縮放。如果為較大的值,則永不重新縮放。如果 < 0,則 rescale 設定為 1.3。

callbackcallable, optional

在每次迭代後呼叫,作為 callback(xk),其中 xk 是目前的參數向量。

傳回值:
xndarray

解。

nfevalint

函數評估的次數。

rcint

傳回代碼,請參閱下方

另請參閱

minimize

多變數函數最小化演算法的介面。特別參閱 ‘TNC’ method

註解

底層演算法是截斷牛頓法,也稱為牛頓共軛梯度法。此方法與 scipy.optimize.fmin_ncg 的不同之處在於

  1. 它包裝了演算法的 C 實作

  2. 它允許為每個變數指定上限和下限。

該演算法透過確定下降方向(如同在非約束截斷牛頓法中)來整合邊界約束,但永遠不會採取足夠大的步長以離開可行 x 的空間。該演算法追蹤一組目前活動的約束,並在計算最小允許步長時忽略它們。(與活動約束相關聯的 x 保持固定。)如果最大允許步長為零,則新增一個新的約束。在每次迭代結束時,其中一個約束可能被視為不再活動並被移除。如果約束目前處於活動狀態,但該變數的梯度從約束向內指向,則該約束被認為不再活動。移除的特定約束是與最大索引變數相關聯的約束,該變數的約束不再活動。

傳回代碼定義如下

  • -1 : 不可行(下限 > 上限)

  • 0 : 已達到局部最小值 (\(|pg| \approx 0\))

  • 1 : 已收斂 (\(|f_n-f_(n-1)| \approx 0\))

  • 2 : 已收斂 (\(|x_n-x_(n-1)| \approx 0\))

  • 3 : 已達到函數評估的最大次數

  • 4 : 線搜尋失敗

  • 5 : 所有下限都等於上限

  • 6 : 無法進展

  • 7 : 使用者要求終止最小化

參考文獻

Wright S., Nocedal J. (2006), ‘Numerical Optimization’

Nash S.G. (1984), “Newton-Type Minimization Via the Lanczos Method”, SIAM Journal of Numerical Analysis 21, pp. 770-778