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


Python SciPy optimize.fmin_tnc用法及代碼示例


本文簡要介紹 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)

最小化的函數。必須執行以下操作之一:

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

  2. 返回函數值但單獨提供梯度函數為fprime.

  3. 返回函數值並設置 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 是當前參數向量。

返回

x ndarray

解決方案。

nfeval int

函數評估的數量。

rc int

返回碼,見下文

注意

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

  1. 它包裝了算法的 C 實現

  2. 它允許給每個變量一個上限和下限。

該算法通過像無約束截斷牛頓一樣確定下降方向來合並邊界約束,但永遠不會采用足夠大的步長以留下可行的 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 頁

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.fmin_tnc。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。