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(x, *args)
要最小化的目标函数。
- x0ndarray
初始猜测。
- 参数tuple, 可选
传递给 func 的额外参数,即
f(x,*args)
。- xtolfloat, 可选
在迭代之间,xopt 的绝对误差在收敛时是可以接受的。
- ftol数字,可选
在迭代之间,func(xopt) 的绝对误差在收敛时可接受的范围。
- maxiterint, 可选
要执行的最大迭代次数。
- maxfun数字,可选
最大函数评估次数。
- 完整输出bool, 可选
如果需要 fopt 和 warnflag 输出,请设置为 True。
- dispbool, 可选
设置为 True 以打印收敛消息。
- retallbool, 可选
设置为 True 以在每次迭代时返回解决方案列表。
- 回调可调用,可选
在每次迭代后调用,作为回调函数 callback(xk),其中 xk 是当前的参数向量。
- 初始单纯形形状为 (N + 1, N) 的类数组对象,可选
初始单纯形。如果给出,将覆盖 x0。
initial_simplex[j,:]
应包含单纯形中第 j 个顶点的坐标,其中N
是维度。
- 返回:
- xoptndarray
最小化函数的参数。
- fopt浮动
函数在最小值处的值:
fopt = func(xopt)
。- iter整数
执行的迭代次数。
- 函数调用整数
函数调用的次数。
- 警告标志整数
1 : 函数评估的最大次数。2 : 达到的最大迭代次数。
- allvecs列表
每次迭代的解决方案。
参见
minimize
用于多变量函数最小化算法的接口。特别参见 ‘Nelder-Mead’ 方法。
注释
使用Nelder-Mead单纯形算法来寻找一个或多个变量函数的最小值。
该算法在应用中有着悠久且成功的使用历史。但它通常会比使用一阶或二阶导数信息的算法慢。在实践中,它在高维问题中可能表现不佳,并且对于最小化复杂函数不够稳健。此外,目前还没有完整的理论来描述该算法何时会成功收敛到最小值,或者如果收敛的话,它的速度如何。收敛必须同时满足ftol和xtol标准。
参考文献
[1]Nelder, J.A. 和 Mead, R. (1965), “函数最小化的单纯形方法”, 《计算机杂志》, 7, pp. 308-313
[2]Wright, M.H. (1996), “直接搜索方法:曾经被轻视,现在受到尊重”, 在数值分析1995中,1995年邓迪数值分析双年会议论文集,D.F. Griffiths 和 G.A. Watson (编), Addison Wesley Longman, 英国哈洛, 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