最优化方法Word格式.docx
- 文档编号:17866116
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:10
- 大小:152.82KB
最优化方法Word格式.docx
《最优化方法Word格式.docx》由会员分享,可在线阅读,更多相关《最优化方法Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
设Φ(a)=f(xk+adk)
这样从凡出发,沿搜索方向dk,确定步长因子ak,使Φ(a)<
Φ(0)的问题就是关于步长因子a的一维搜索问题。
其主要结构可作如下概括:
首先确定包含问题最优解的搜索区间,然后采用某种分割技术或插值方法缩小这个区间,进行搜索求解。
一维搜索通常分为精确的和不精确的两类。
如果求得ak使目标函数沿方向dk达到极小,即使得f(xk+akdk)=minf(xk+adk)(a>
0)则称这样的一维搜索为最优一维搜索,或精确一维搜索,ak叫最优步长因子;
如果选取ak使目标函数f得到可接受的下降量,即使得下降量f(xk)一f(xk+akdk)>
0是用户可接受的,则称这样的一维搜索为近似一维搜索,或不精确一维搜索,或可接受一维搜索。
由于在实际计算中,一般做不到精确的一维搜索,实际上也没有必要做到这一点,因为精确的一维搜索需要付出较高的代价,而对加速收敛作用不大,因此花费计算量较少的不精确一维搜索方法受到了广泛的重视和欢迎。
精确一维搜索,作为一种理想的状态,虽然在实际计算中被采用的概率较之不精确一维搜索要小,但有关精确一维搜索技术的研究历史悠久成果相当丰富,方法众多,其理论体系也相对比较完备,对其进行进一步的研究仍有着重要的理论意义和现实意义。
通常我们根据算法中有无使用导数的情况,将精确一维搜索算法分为两大类:
一类是不用函数导数的方法,这其中就包括二分法(又称作对分法或中点法)、0.618法(黄金分割脚、Fibonacci法(分数法)、割线法、成功一失败法等;
另一类是使用函数导数的方法,包括经典的Newton法、抛物线法以及各种插值类方法等。
(1)在不用导数的方法中,二分法、0.618法(黄金分割法)以及Fibonacci法均是分割方法,其基本思想就是通过取试探点和进行函数值比较,使包含极小点的搜索区间不断缩短,当区间长度缩短到一定程度时,区间上各点的函数值均接近函数的极小值,从而各点均可看作极小点的近似。
分割类方法仅需计算函数值,因此使用的范围较广,尤其适用于非光滑及导数表达式复杂或写不出等情形。
二分法是一种最简单的分割方法,每次迭代都将搜索区间缩短一半,故二分法的收敛速度是线性的,收敛比为0.5,收敛速度较慢。
其优势就是每一步迭代的计算量都相对较小,程序简单,而且总能收敛到一个局部极小点。
黄金分割法是一种针对目标函数是单峰函数亦即目标函数为凸的情形的分割类方法,因其不要求函数可微,且每次迭代只需计算一个函数值,程序简单容易实现而被广泛采用。
由于黄金分割法是以等比例τ=0.618分割缩小区间的,因此它是一种近似最优方法。
针对在实际中遇到的目标函数往往不是单峰函数的情况,HPonfiger(1976)提出了.0618法的改进形式,即在缩小区间时,不只是比较两个内点处的函数值,而是对两内点及其两端点处的函数值进行综合比较,以避免搜索得到的函数值反而比初始区间端点处的函数值大的情况。
经过这样的修改,算法比.0618法要更加可靠。
Fibonacci法是另一种与.0618法相类似的分割类方法,两者的主要区别在于Fibonacci法搜索区间的缩短比率不是采用黄金分割数τ,而是采用Fibonacci数列。
在使用Fibonacci法时,通常是由用户给定最终区间长度的上限,从而确定探索点的个数,逐步进行搜索。
通过对Fibonacci数列进行分析表明,在迭代次数n趋于无穷的情形。
Fibonacci法与.0618法的区间缩短率相同,因而Fibonacci法的收敛速度也是线性的,收敛比也是黄金分割数τ。
可以证明,Fibonacci法是分割方法求解一维极小化问题的最优策略,而0.618法只是近似最优的,但因0.618法不必预先知道探索点的个数,程序实现更加容易,因而应用也更加广泛。
抛物线法也可称作三点二次插值法,其基本思想与下面要叙述的牛顿法相同,也是用二次函数近似目标函数,并以其极小点去近似目标函数的极小点,不同之处是牛顿法是利用目标函数fx()在x0处的二阶Tyalor展式来逼近f(x),而抛物线法则是利用目标函数fx()在三个点x0,xl,xZ处的函数值构造一个二次函数作为其近似。
一般地,抛物线法并不能保证算法一定收敛,在迭代过程中有可能会出现相邻迭代点xk,xk+1充分接近且xk+1并非函数近似极小点的退化情况。
但在己知迭代点列收敛到目标函数极小点的情况,可以证明:
在一定的条件下,抛物线法是超线性收敛的,收敛的阶约为1.3。
割线法与分割法类似,也是通过取试探点和进行函数值比较,使包含所求点的搜索区间缩小,但试探点的取法与分割法不同,它是选取连接两个端点的线段与横轴的交点作为试探点。
割线法不能保证每次都使搜索区间缩小一定的比例,因而不具有全局线性收敛性,但是它却利用了函数的一些性质。
在函数接近线性时,它是非常快的。
如果函数本身是线性函数时,它可以一步找到解。
(ii)一般地,使用导数的方法通常包括牛顿法、插值法等,其中插值法又有一点二次插值法(牛顿法)、二点二次插值法)、三点二次插值法以及三次插值法、有理插植法等常用方法。
求一维无约束极小化问题的牛顿法是从计算方法中方程求根的牛顿法演化而来的,其基本思想是用目标函数f(x)在己知点x0处的二阶Tylor展式g(x)来近似代替目标函数,用g(x)的极小点作为f(x)的近似极小点,迭代公式是
牛顿法的优点是收敛速度快,具有局部二阶收敛速度;
缺点是要在每个迭代点处计算函数的二阶导数值,增加了每次迭代的工作量,而且它要求迭代初始点要选的好,也就是说初始点不能离极小值太远,在极小点未知的情况下,做到这一点是很困难的,这就限制了算法的应用范围,导致算法不实用。
事实上,牛顿法也是插值类方法的一种。
插值法是一类重要的一维搜索方法,其基本思想是在搜索区间内不断用低次(通常不超过三次)多项式来逼近目标函数,并用插值多项式的极小点去近似目标函数的极小点。
实践表明,在目标函数具有较好的解析性质时,插值方法比直接方法(如.0618或Fibonacci法)效果更好。
所谓不精确一维搜索方法是指应用各种可接受的步长选择律的线性搜索方法。
常用的不精确一维搜索算法包括利用简单准则的后退方法、经典的Armijo-Goldstein方法、Wolfe-Powell方法和强Wolfe-Powell方法、以及其后发展起来的利用Curry-Altman步长律、改进的Curry-Altman步长律、Danilin-Pshenichuyi步长律、DeLeone-Grippo步长律、Backtracking步长律等的各种方法
方法特点
可靠性
有效性
简便性
备注
程度
特点
问题大小
直接法
坐标轮换法
中
对背脊稳问题舍入误差
低
不具有收敛性
高
程序简单,内存少
n<
10
鲍威尔法
Si(k)有较高的共轭程度
近似二次收敛性
程序较繁,内存量较大
10~20
√
间接法
梯度法
舍入误差
不具有二次收敛性
结构简单,内存少
低维
牛顿法
函数二次性要求严
具有二次收敛性
程序复杂,内存大
变尺度法
对函数要求低
高二次收敛性
程序较繁,内存量一般
高维
坐标轮换法:
可靠性较高,算法效率太低,操作方便,一般只用于低维问题,n<
鲍威尔法:
可靠性高,算法效率较高,操作较复杂,一般适用于n<
10~20的问题
梯度法:
可靠性较高,算法效率低,操作方便用于低维、低精度的问题。
牛顿法:
可靠性低,算法效率高,操作不方便,很少用。
变尺度法:
可靠性高(BFGS比DFP更高),算法效率高,使用较复杂,适用于高维问题
2、牛顿法
如前面所提到的,最速下降法在最初几步迭代中函数值下降很快外,总的说来下降的并不快,且愈接近极值点下降的愈慢。
因此,应寻找使目标函数下降更快的方法。
牛顿法就是一种收敛很快的方法,其基本思路是利用二次曲线来逐点近似原目标函数,以二次曲线的极小值点来近似原目标函数的极小值点并逐渐逼近改点。
一维目标函数
在
点逼近用的二次曲线(即泰勒二次多项式)为
此二次函数的极小点可由
求得。
对于
维问题,
为目标函数
点逼近用的二次曲线为:
令式中的
,则上式可改写为:
当
时可求得二次曲线
的极值点,且当且仅当改点处的
矩阵为正定时有极小值点。
由上式得:
令
,则
若
为可逆矩阵,将上式等号两边左乘
,则得
整理后得
当目标函数
是二次函数时,牛顿法变得极为简单、有效,这时
是一个常数矩阵,式
变成精确表达式,而利用式
作一次迭代计算所得的
就是最优点
。
在一般情况下
不一定是二次函数,则不能一步就能求出极小值,即极小值点不在
方向上,但由于在
点附近函数
与
是近似的,所以这个方向可以作为近似方向,可以用式
求出点
作为一个逼近点
这时式
可改成牛顿法的一般迭代公式:
式中
称为牛顿方向,通过这种迭代,逐次向极小值点
逼近。
牛顿法是基于多元函数的泰勒展开而来的,它将
作为探索方向,因此它的迭代公式可直接写出来:
3、牛顿法实例分析
例:
试用牛顿法求目标函数
的极小值点
解:
设取
则,
,故
为极小点
的极小点。
取
即为最小点
,只迭代一次就达到了
算法过程
(1)给定初始点
,及精度
,令
;
(2)若
,停止,极小点为
,否则转步骤(3);
(3)计算
(4)令
,
,转步骤
(2)。
牛顿法算法的MATLAB程序
调用格式:
其中,
:
目标函数
初始点
自变量向量
精度
目标函数取最小值时的自变量值
目标函数的最小值
牛顿法的MATLAB程序代码如下:
function[x,minf]=minNT(f,x0,var,eps)
%目标函数:
f;
%初始点:
x0;
%自变量向量:
var;
%目标函数取最小值时的自变量值:
x;
%目标函数的最小值:
minf;
formatlong;
ifnargin==3
eps=1.0e-6;
end
tol=1;
x0=transpose(x0);
whiletol>
eps
gradf=jacobian(f,var);
%梯度方向
jacf=jacobian(gradf,var);
%雅克比矩阵
v=Funval(gradf,var,x0);
tol=norm(v);
pv=Funval(jacf,var,x0);
p=-inv(pv)*transpose(v);
x1=x0+p;
x0=x1;
x=x1;
minf=Funval(f,var,x);
formatshort;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 方法