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,則返回
fopt
、xi
、direc
、iter
、funcalls
和warnflag
。- 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 之間的差值。
替換最大增加方向的技術條件相當於檢查
從該迭代的最大增加方向上無法獲得進一步的增益。
最大增加方向佔內迴圈該次迭代函數值減少量的很大一部分。
參考文獻
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)