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可调用函数(x,*args)
要最小化的目标函数。
- x0ndarray
初步猜测是这样的。
- args元组,可选
传递给函数的额外参数,即,
f(x,*args)
。- xtol浮动,可选
迭代之间的xopt绝对误差为收敛可接受。
- ftol数字,可选
迭代之间可接受的函数绝对误差(Xopt)。
- maxiter整型,可选
要执行的最大迭代次数。
- maxfun数字,可选
要进行的函数求值的最大数量。
- full_output布尔值,可选
如果需要fopt和warnflag输出,则设置为True。
- disp布尔值,可选
设置为True可打印收敛消息。
- retall布尔值,可选
设置为True可在每次迭代时返回解决方案列表。
- callback可调用,可选
在每次迭代后调用,作为callback(Xk),其中xk是当前参数向量。
- initial_simplex形状(N+1,N)的类似数组,可选
初始单纯形。如果给定,则重写 x0 。
initial_simplex[j,:]
对象的第j个顶点的坐标。N+1
单纯形中的顶点,其中N
是维度。
- 退货
- xoptndarray
最小化函数的参数。
- fopt浮动
函数的最小值:
fopt = func(xopt)
。- iter集成
执行的迭代次数。
- funcalls集成
进行的函数调用数。
- warnflag集成
1:函数求值的最大次数。2:已达到最大迭代次数。
- allvecs列表
每次迭代时的解。
参见
minimize
与多变量函数的最小化算法的接口。看“老头子-米德” method 尤其是。
注意事项
使用Nelder-Mead单纯形算法来求一个或多个变量的函数的最小值。
该算法在实际应用中已有很长的成功历史。但它通常比使用一阶或二阶导数信息的算法慢。在实际应用中,该算法在处理高维问题时性能较差,对复杂函数最小化的鲁棒性也不强。此外,目前还没有完整的理论来描述算法何时会成功收敛到最小,或者如果成功收敛到最小,它会以多快的速度收敛。必须同时满足ftol和xtol标准才能收敛。
参考文献
- 1
奈尔德,J.A.,Mead,R.(1965),“函数极小化的单纯形法”,计算机学报,7,第308-313页
- 2
Wright,M.H.(1996),“直接搜索方法:曾经被鄙视,现在很受尊敬”,载于“数值分析1995,1995年邓迪数值分析双年会议论文集”,D.F.Griffiths和G.A.Watson(编辑),Addison Wesley Longman,Harlow,UK,第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