scipy.optimize.

fmin_powell#

scipy.optimize.fmin_powell(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, direc=None)[原始碼]#

使用修改後的 Powell 方法最小化函數。

此方法僅使用函數值,不使用導數。

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

要最小化的目標函數。

x0ndarray

初始猜測值。

argstuple,選用

傳遞給 func 的額外參數。

xtolfloat,選用

線搜索誤差容忍度。

ftolfloat,選用

收斂可接受的 func(xopt) 相對誤差。

maxiterint,選用

要執行的最大迭代次數。

maxfunint,選用

要進行的最大函數評估次數。

full_outputbool,選用

若為 True,則返回 foptxidireciterfuncallswarnflag

dispbool,選用

若為 True,則印出收斂訊息。

retallbool,選用

若為 True,則返回每次迭代的解列表。

callback可呼叫物件,選用

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

direcndarray,選用

初始擬合步驟和參數順序設定為 (N, N) 陣列,其中 N 是 x0 中的擬合參數數量。預設為步長 1.0 同時擬合所有參數 (np.eye((N, N)))。為了防止初始考慮步驟中的值或更改初始步長,請在 Mth 區塊中的 Jth 位置設定為 0 或所需的步長,其中 J 是 x0 中的位置,M 是所需的評估步驟,步驟將按索引順序評估。步長和順序將隨著最小化過程自由更改。

返回:
xoptndarray

最小化 func 的參數。

foptnumber

最小值處的函數值:fopt = func(xopt)

direcndarray

目前的方向集。

iterint

迭代次數。

funcallsint

進行的函數呼叫次數。

warnflagint
整數警告旗標

1 : 達到最大函數評估次數。 2 : 達到最大迭代次數。 3 : 遇到 NaN 結果。 4 : 結果超出提供的邊界。

allvecslist

每次迭代的解列表。

參見

minimize

多變數函數無約束最小化演算法的介面。請參閱特別是 ‘Powell’ 方法。

註解

使用修改後的 Powell 方法來尋找 N 個變數函數的最小值。Powell 方法是一種共軛方向方法。

該演算法有兩個迴圈。外迴圈僅迭代內迴圈。內迴圈在方向集中的每個目前方向上進行最小化。在內迴圈結束時,如果滿足某些條件,則丟棄給出最大減少量的方向,並替換為目前估計的 x 與內迴圈開始時估計的 x 之間的差值。

替換最大增加方向的技術條件相當於檢查

  1. 從該迭代的最大增加方向上無法獲得進一步的增益。

  2. 最大增加方向佔內迴圈該次迭代函數值減少量的很大一部分。

參考文獻

Powell M.J.D. (1964) An efficient method for finding the minimum of a function of several variables without calculating derivatives, Computer Journal, 7 (2):155-162.

Press W., Teukolsky S.A., Vetterling W.T., and Flannery B.P.: Numerical Recipes (any edition), Cambridge University Press

範例

>>> def f(x):
...     return x**2
>>> from scipy import optimize
>>> minimum = optimize.fmin_powell(f, -1)
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 2
         Function evaluations: 16
>>> minimum
array(0.0)