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,可选
初始单纯形。如果已给定,则覆盖 x0。
initial_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