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)[源代码]#

使用下山单纯形算法最小化一个函数。

此算法仅使用函数值,不使用导数或二阶导数。

参数:
func可调用函数 func(x,*args)

要最小化的目标函数。

x0ndarray

初始猜测。

argstuple,可选

传递给 func 的额外参数,即 f(x,*args)

xtolfloat,可选

迭代之间 xopt 的绝对误差,此误差可接受以实现收敛。

ftolnumber,可选

迭代之间 func(xopt) 的绝对误差,此误差可接受以实现收敛。

maxiterint,可选

要执行的最大迭代次数。

maxfunnumber,可选

要进行的最大函数评估次数。

full_outputbool,可选

如果需要 fopt 和 warnflag 输出,则设置为 True。

dispbool,可选

设置为 True 以打印收敛消息。

retallbool,可选

设置为 True 以返回每次迭代的解决方案列表。

callbackcallable,可选

每次迭代后调用,作为 callback(xk),其中 xk 是当前参数向量。

initial_simplex形状为 (N + 1, N) 的类数组,可选

初始单纯形。如果给定,则覆盖 x0initial_simplex[j,:] 应包含单纯形中第 j 个顶点的坐标,其中 N 是维度。

返回:
xoptndarray

使函数最小化的参数。

foptfloat

函数在最小值处的值:fopt = func(xopt)

iterint

执行的迭代次数。

funcallsint

进行的函数调用次数。

warnflagint

1:已进行最大函数评估次数。2:已达到最大迭代次数。

allvecslist

每次迭代的解决方案。

另请参见

minimize

多元函数最小化算法的接口。特别是参见 'Nelder-Mead' 方法

说明

使用 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