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]#

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

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

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

待最小化的目标函数。

x0ndarray

初猜。

args元组,可选

传递给 func 的附加参数,即 f(x,*args)

xtol浮点数,可选

迭代间 xopt 的可接受收敛绝对误差。

ftol数字,可选

迭代间 func(xopt) 的可接受收敛绝对误差。

maxiter整形数,可选

执行的最大迭代次数。

maxfun数字,可选

执行的最大函数评估次数。

full_output布尔值,可选

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

disp布尔值,可选

设为 True 以输出收敛消息。

retall布尔值,可选

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

callback可调用的函数,可选

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

initial_simplex形状为 (N + 1, N) 的 array_like,可选

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

返回:
xoptndarray

使函数最小的参数。

fopt浮点数

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

iter整形数

执行的迭代次数。

funcalls整形数

调用的函数次数。

warnflag整形数

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

allvecs列表

每次迭代的解决方案。

请参见

最小化

多变量函数最小化算法的接口。具体请参见“Nelder-Mead”方法

注释

使用 Nelder-Mead 单纯形算法查找一个或多个变量函数的最小值。

该算法在应用程序中已有成功的长期使用历史。但通常它会比一种利用一阶或二阶导数信息算法执行速度慢。在实践中,它在高维问题时表现不佳,且不能稳定地达到复杂函数的最小值。此外,目前没有一个完整的理论描述该算法何时能成功收敛到最小值,或如果它能收敛的话它会收敛到最小值的速度有多快。对于收敛来说,ftol 和 xtol 标准都必须得到满足。

参考资料

[1]

Nelder, J.A. and Mead, R. (1965),“一种用于函数最小值计算的单形法”,《计算机杂志》,7,第 308-313 页

[2]

Wright, M.H. (1996),“直接搜索方法:曾经被轻视,现在却广受尊敬”,收录于《数值分析 1995 年》,数理分析 1995 年邓迪双年会论文集,D.F. Griffiths 和 G.A. Watson(编辑),阿迪森韦斯利朗文,哈洛,英国,第 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