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)
要最小化的函數。必須執行以下其中一項
傳回 f 和 g,其中 f 是函數的值,g 是其梯度(浮點數列表)。
傳回函數值,但將梯度函數作為單獨的 fprime 提供。
傳回函數值並設定
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 是目前的參數向量。
- funccallable
- 傳回值:
- xndarray
解。
- nfevalint
函數評估的次數。
- rcint
傳回代碼,請參閱下方
另請參閱
minimize
多變數函數最小化演算法的介面。特別參閱 ‘TNC’ method。
註解
底層演算法是截斷牛頓法,也稱為牛頓共軛梯度法。此方法與 scipy.optimize.fmin_ncg 的不同之處在於
它包裝了演算法的 C 實作
它允許為每個變數指定上限和下限。
該演算法透過確定下降方向(如同在非約束截斷牛頓法中)來整合邊界約束,但永遠不會採取足夠大的步長以離開可行 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