scipy.optimize.

fmin#

scipy.optimize.fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, initial_simplex=None)[source]#

使用下坡單純形演算法最小化函數。

此演算法僅使用函數值,不使用導數或二階導數。

參數:
funccallable func(x,*args)

要最小化的目標函數。

x0ndarray

初始猜測值。

argstuple, optional

傳遞給 func 的額外參數,例如 f(x,*args)

xtolfloat, optional

迭代之間 xopt 的絕對誤差容忍度,可接受的收斂條件。

ftolnumber, optional

迭代之間 func(xopt) 的絕對誤差容忍度,可接受的收斂條件。

maxiterint, optional

要執行的最大迭代次數。

maxfunnumber, optional

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

full_outputbool, optional

若需要 fopt 和 warnflag 輸出,請設定為 True。

dispbool, optional

設定為 True 以印出收斂訊息。

retallbool, optional

設定為 True 以傳回每次迭代的解列表。

callbackcallable, optional

在每次迭代後呼叫,形式為 callback(xk),其中 xk 是目前的參數向量。

initial_simplexarray_like of shape (N + 1, N), optional

初始單純形。如果給定,則覆寫 x0initial_simplex[j,:] 應包含單純形中第 j 個頂點的座標,其中 N 是維度。

返回:
xoptndarray

最小化函數的參數。

foptfloat

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

iterint

執行的迭代次數。

funcallsint

進行的函數呼叫次數。

warnflagint

1 : 已達到最大函數評估次數。 2 : 已達到最大迭代次數。

allvecslist

每次迭代的解。

另請參閱

minimize

多變數函數最小化演算法的介面。 請參閱 ‘Nelder-Mead’ method 的特定方法。

註解

使用 Nelder-Mead 單純形演算法尋找一個或多個變數函數的最小值。

此演算法在應用中具有悠久且成功的歷史。 但它通常比使用一階或二階導數資訊的演算法慢。 實際上,它在高維度問題中可能表現不佳,並且對於最小化複雜函數並不穩健。 此外,目前還沒有完整的理論描述演算法何時會成功收斂到最小值,或者如果收斂,它會有多快。 ftol 和 xtol 準則都必須滿足才能收斂。

參考文獻

[1]

Nelder, J.A. and Mead, R. (1965), “A simplex method for function minimization”, The Computer Journal, 7, pp. 308-313

[2]

Wright, M.H. (1996), “Direct Search Methods: Once Scorned, Now Respectable”, in Numerical Analysis 1995, Proceedings of the 1995 Dundee Biennial Conference in Numerical Analysis, D.F. Griffiths and G.A. Watson (Eds.), Addison Wesley Longman, Harlow, UK, pp. 191-208.

範例

>>> def f(x):
...     return x**2
>>> from scipy import optimize
>>> minimum = optimize.fmin(f, 1)
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 17
         Function evaluations: 34
>>> minimum[0]
-8.8817841970012523e-16