使用下坡单纯形算法将函数最小化。
该算法仅使用函数值,而不使用导数或二阶导数。
参数:
func:callable func(x,*args)目标函数要最小化。
x0:ndarray初步猜测。
args:tuple, 可选参数传递给func的额外参数,即f(x,*args)。
xtol:float, 可选参数迭代之间xopt中的绝对误差对于收敛是可接受的。
ftol:number, 可选参数迭代之间func(xopt)中的绝对误差对于收敛是可接受的。
maxiter:int, 可选参数要执行的最大迭代次数。
maxfun:number, 可选参数进行函数评估的最大次数。
full_output:bool, 可选参数如果需要fopt和warnflag输出,则设置为True。
disp:bool, 可选参数设置为True以打印收敛消息。
retall:bool, 可选参数设置为True可在每次迭代时返回解决方案列表。
callback:callable, 可选参数在每次迭代之后调用,称为callback(xk),其中xk是当前参数向量。
initial_simplex:array_like of shape (N + 1, N), 可选参数初始单纯形。如果给定,则覆盖x0。initial_simplex[j,:]应该包含的j-th顶点的坐标N+1单纯形中的顶点,其中N是维度。
返回值:
xopt:ndarray使函数最小化的参数。
fopt:浮动函数值至少:fopt = func(xopt)。
iter:整型执行的迭代次数。
funcalls:整型进行的函数调用数。
warnflag:整型1:最多进行函数评估。 2:达到最大迭代次数。
allvecs:清单每次迭代的解决方案。
注意:
使用Nelder-Mead单纯形算法查找一个或多个变量的最小值。
该算法在应用程序中成功使用的悠久历史。但这通常比使用一阶或二阶导数信息的算法要慢。在实践中,它在高维问题上的性能可能很差,并且无法使复杂函数最小化。此外,目前尚没有完整的理论来描述算法何时成功收敛到最小值,或者算法收敛到多快。必须同时满足ftol和xtol标准。
参考文献:
1
内尔德(J.A.)和Mead,R.(1965),“用于函数最小化的单纯形方法”,《计算机杂志》,第7页,第308-313页
2
赖特(M.H.) (1996年),“直接搜索方法:一旦被嘲笑,现在就可敬”,1995年《数值分析》,1995年邓迪两年一次的数值分析会议论文集,D.F。格里菲思和G.A.沃森(编辑),艾迪生·韦斯利·朗曼(Addison Wesley Longman),英国哈洛,第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