本文簡要介紹 python 語言中 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)#
使用截斷牛頓算法中的梯度信息,最小化具有受邊界約束的變量的函數。此方法包裝了算法的 C 實現。
- func: 可調用
func(x, *args)
最小化的函數。必須執行以下操作之一:
返回 f 和 g,其中 f 是函數的值,g 是它的梯度(浮點數列表)。
返回函數值但單獨提供梯度函數為fprime.
返回函數值並設置
approx_grad=True
。
如果函數返回 None,則中止最小化。
- x0: array_like
最小值的初始估計。
- fprime: 可調用
fprime(x, *args)
,可選 梯度為函數。如果沒有,那麽或者函數必須返回函數值和梯度(
f,g = func(x, *args)
) 或者approx_grad必須為真。- args: 元組,可選
傳遞給函數的參數。
- approx_grad: 布爾型,可選
如果為真,則以數值近似梯度。
- bounds: 列表,可選
x0 中每個元素的 (min, max) 對,定義該參數的界限。當該方向沒有界限時,使用 None 或 +/-inf 作為 min 或 max 之一。
- epsilon: 浮點數,可選
如果approx_grad 為真,則使用。 fprime 的有限差分近似中的步長。
- scale: 數組,可選
應用於每個變量的比例因子。如果沒有,則因子為up-low 用於區間有界變量和 1+|x|為其他人。默認為無。
- offset: 數組,可選
從每個變量中減去的值。如果沒有,則偏移量為 (up+low)/2 用於區間有界變量,x 用於其他變量。
- messages: 整數,可選
用於在 MSGS 字典中定義的最小化值期間選擇消息顯示的位掩碼。默認為MGS_ALL。
- disp: 整數,可選
消息的整數接口。 0 = 無消息,5 = 所有消息
- maxCGit: 整數,可選
每次主迭代的最大 hessian*vector 評估次數。如果 maxCGit == 0,則選擇的方向是 -gradient 如果 maxCGit < 0,則將 maxCGit 設置為 max(1,min(50,n/2))。默認為 -1。
- maxfun: 整數,可選
函數評估的最大次數。如果沒有,maxfun 設置為 max(100, 10*len(x0))。默認為無。請注意,由於通過數值微分評估梯度,此函數可能會違反限製。
- eta: 浮點數,可選
行搜索的嚴重性。如果 < 0 或 > 1,則設置為 0.25。默認為 -1。
- stepmx: 浮點數,可選
線搜索的最大步長。調用期間可能會增加。如果太小,將設置為 10.0。默認為 0。
- accuracy: 浮點數,可選
有限差分計算的相對精度。如果 <= machine_precision,設置為 sqrt(machine_precision)。默認為 0。
- fmin: 浮點數,可選
最小函數值估計。默認為 0。
- ftol: 浮點數,可選
停止準則中 f 值的精度目標。如果 ftol < 0.0,則 ftol 設置為 0.0,默認為 -1。
- xtol: 浮點數,可選
停止標準中 x 值的精度目標(在應用 x 縮放因子之後)。如果 xtol < 0.0,則 xtol 設置為 sqrt(machine_precision)。默認為 -1。
- pgtol: 浮點數,可選
停止標準中投影梯度值的精度目標(在應用 x 縮放因子之後)。如果 pgtol < 0.0,則 pgtol 設置為 1e-2 * sqrt(accuracy)。不建議將其設置為 0.0。默認為 -1。
- rescale: 浮點數,可選
用於觸發 f 值重新縮放的縮放因子(以 log10 為單位)。如果為 0,則在每次迭代時重新縮放。如果值很大,則永遠不要重新縮放。如果 < 0,則重新縮放設置為 1.3。
- callback: 可調用的,可選的
在每次迭代後調用,作為 callback(xk),其中 xk 是當前參數向量。
- func: 可調用
- x: ndarray
解決方案。
- nfeval: int
函數評估的數量。
- rc: int
返回碼,見下文
參數 ::
返回 ::
注意:
底層算法是截斷牛頓算法,也稱為牛頓共軛梯度算法。此方法與 scipy.optimize.fmin_ncg 的不同之處在於
它包裝了算法的 C 實現
它允許給每個變量一個上限和下限。
該算法通過像無約束截斷牛頓一樣確定下降方向來合並邊界約束,但永遠不會采用足夠大的步長以留下可行的 x 的空間。該算法跟蹤一組當前活動的約束,並在計算最小允許步長時忽略它們。 (與活動約束關聯的 x 保持固定。)如果最大允許步長為零,則添加新約束。在每次迭代結束時,其中一個約束可能被視為不再有效並被刪除。如果約束當前處於活動狀態,但該變量的梯度從約束向內指向,則該約束被視為不再活動。刪除的特定約束是與約束不再有效的最大索引的變量相關聯的約束。
返回碼定義如下:
-1 : Infeasible (lower bound > upper bound) 0 : Local minimum reached (|pg| ~= 0) 1 : Converged (|f_n-f_(n-1)| ~= 0) 2 : Converged (|x_n-x_(n-1)| ~= 0) 3 : Max. number of function evaluations reached 4 : Linear search failed 5 : All lower bounds are equal to the upper bounds 6 : Unable to progress 7 : User requested end of minimization
參考:
Wright S.,Nocedal J. (2006),“數值優化”
Nash S.G. (1984),“Newton-Type 通過 Lanczos 方法最小化”,SIAM Journal of Numerical Analysis 21,第 770-778 頁
相關用法
- Python SciPy optimize.fmin_cobyla用法及代碼示例
- Python SciPy optimize.fmin_bfgs用法及代碼示例
- Python SciPy optimize.fmin_slsqp用法及代碼示例
- Python SciPy optimize.fmin_cg用法及代碼示例
- Python SciPy optimize.fmin_powell用法及代碼示例
- Python SciPy optimize.fmin用法及代碼示例
- Python SciPy optimize.fminbound用法及代碼示例
- Python SciPy optimize.fsolve用法及代碼示例
- Python SciPy optimize.fixed_point用法及代碼示例
- Python SciPy optimize.rosen_der用法及代碼示例
- Python SciPy optimize.line_search用法及代碼示例
- Python SciPy optimize.rosen用法及代碼示例
- Python SciPy optimize.shgo用法及代碼示例
- Python SciPy optimize.minimize_scalar用法及代碼示例
- Python SciPy optimize.root用法及代碼示例
- Python SciPy optimize.NonlinearConstraint用法及代碼示例
- Python SciPy optimize.KrylovJacobian用法及代碼示例
- Python SciPy optimize.toms748用法及代碼示例
- Python SciPy optimize.linprog_verbose_callback用法及代碼示例
- Python SciPy optimize.bracket用法及代碼示例
- Python SciPy optimize.milp用法及代碼示例
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.bisect用法及代碼示例
- Python SciPy optimize.isotonic_regression用法及代碼示例
- Python SciPy optimize.golden用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.fmin_tnc。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。