运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx
- 文档编号:23216051
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:13
- 大小:83.23KB
运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx
《运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx》由会员分享,可在线阅读,更多相关《运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx(13页珍藏版)》请在冰豆网上搜索。
运筹学实验报告FR共轭梯度法Wolfe简约梯度法
运筹学课程实验报告
XX:
********
学号:
********
班级:
********
日期:
2021/12/17
一、实验目的:
1、掌握求解无约束最优化问题的F-R共轭梯度法,以及约束最优化问题Wolfe简约梯度法。
2、学会用MATLAB编程求解问题,并对以上方法的计算过程和结果进展分析。
二、实验原理与步骤:
1、F-R共轭梯度法
根本步骤是在点
处选取搜索方向
使其与前一次的搜索方向
关于
共轭,即
然后从点
出发,沿方向
求得
的极小值点
即
如此下去,得到序列{
}。
不难求得
的解为
注意到
的选取不唯一,我们可取
由共轭的定义
可得:
共轭梯度法的计算过程如下:
第一步:
取初始向量
计算
第
步:
计算
2、Wolfe简约梯度法
Wolfe根本计算步骤:
第一步:
取初始可行点
给定终止误差
,令k:
=0;
第二步:
设
是
的m个最大分量的下标集,对矩阵A进展相应分解
第三步:
计算
然后计算简约梯度
;
第四步:
构造可行下降方向
.假设
^_D_Dd
。
否那么进展第五步。
第五步:
进展有效一维搜索,求解
得到最优解
.令,k:
=k+1,转入第二步。
三、实验容:
1、〔运筹学P153页第20题〕用F-R法求解
选取初始点
.
2、〔运筹学P154页第25题〕用Wolfe法求解以下问题:
选取初始可行点
.
四、问题求解:
问题1求解:
〔F-R法〕
程序代码如下:
〔1〕主函数
symsx1x2r;
f=(1-x1)^2+2*(x2-x1^2)^2;
x=[x1,x2];
df=jacobian(f,x);
df=df.';
error=0.000001;
x0=[0,0]';
g1=subs(df,x,x0);
k=0;
while(norm(g1)>error)
ifk==0
d=-g1;
else
bta=g1'*g1/(g0'*g0);
d=-g1+bta*d0;
end
y=subs(f,x,x0+r*d);
result=jintuifa(y,r);
result2=golden(y,r,result);
step=result2;
x0=x0+step*d;
g0=g1;g1=subs(df,x,x0);
d0=d;k=k+1;
end;
k
x0
〔2〕子函数
进退法确定一维搜索区间:
functionresult=jintuifa(y,r)
t0=0;step=0.0125;
t1=t0+step;
ft0=subs(y,{r},{t0});
ft1=subs(y,{r},{t1});
if(ft1<=ft0)
step=2*step;
t2=t1+step;
ft2=subs(y,{r},{t2});
while(ft1>ft2)
t1=t2;step=2*step;
t2=t1+step;
ft1=subs(y,{r},{t1});
ft2=subs(y,{r},{t2});
end
else
step=step/2;t2=t1;t1=t2-step;
ft1=subs(y,{r},{t1});
while(ft1>ft0)
step=step/2;t2=t1;t1=t2-step;
ft1=subs(y,{r},{t1});
end
end
result=[t2];
黄金分割法进展一维搜索:
functionresult=golden(y,r,m)
a=0;
b=m;
e=1e-5;
a1=a+0.382*(b-a);
f1=subs(y,{r},{a1});
a2=a+0.618*(b-a);
f2=subs(y,{r},{a2});
whileabs(b-a)>=e
iff1 b=a2;a2=a1; f2=f1;a1=a+0.382*(b-a); f1=subs(y,{r},{a1}); else a=a1;a1=a2; f1=f2;a2=a+0.618*(b-a); f2=subs(y,{r},{a2}); end end; answer=0.5*(a+b); result=[answer]; 运行结果如下: 由上图知极值点为 极小值=( 对应的理论极小值)。 问题2求解: 〔Wolfe法〕 程序代码如下: error=10^-6; x0=[0,0]; symsx1x2 f=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2; AB=[1,1,1,0;1,5,0,1]; B=[1,0;0,1]; N=[1,1;1,5]; [a,b]=size(x0); initial_gradient=gradient_my(f,x0,b); norm=0; norm0=0; symst; A=[]; rN=[initial_gradient (1),initial_gradient (2)] pN=-rN; pB=-[pN (1)+pN (2),-pN (1)-5*pN (2)]; search_direction=[pNpB] fori=1: 4 norm0=norm0+(search_direction(i))^2 end tmax=5/34; x00=[0,0,2,-5]; x=x00+t*search_direction; xx=[x (1),x (2)]; f_step=subs(f,findsym(f),xx); F=diff(f_step,t); solve(F,t) x_1=x00+tmax*search_direction norm=norm0; k=1; HSZ=[]; while(norm>error&&k<3) x_11=[x_1 (1),x_1 (2)] gradient=gradient_my(f,x_11,b) rN=-[1.25*gradient (1),0.25*gradient (2)] pN=-[rN (1)*x_1(3),rN (2)*x_1(4)] pB=-[1.25*pN (1),0.25*pN (2)]; new_direction=[pBpN]; norm=0; TT=[]; tmax=1; fori=1: 4 norm=norm+(new_direction(i))^2 end forj=1: 4 if(new_direction(j)<0) T(j)=new_direction(j) else T(j)=0; end if(T(j)<0) TT=abs([TT,(x_1(j)/T(j))]) end j=j+1; end n=size(TT); foruk=1: n if(tmax>TT(uk)) tmax=TT(uk) n=n+1; end end x=x_1+t*new_direction; xx=[x (1),x (2)]; f_step=subs(f,findsym(f),xx); F=diff(f_step,t); solve(F,t); t0=tmax; x_2=x_1+0.18*new_direction A=[A;x_2]; norm0=norm; search_direction=new_direction x_1=x_2; xx2=[x_2 (1),x_2 (1)]; Y=subs(f,findsym(f),xx2); HSZ=[HSZ;Y] k=k+1; end k x_2 norm 程序运行结果如下 初始点(0,0,2,5)earch_direction=46-1034 tmax=0.147 如果不交还B矩阵与A矩阵那么运行结果如下 x_1=(0.62510.87080.50770.0246)search_direction=3.44.4-8-25.6 很显然X4已经无法再取有效值,,故须交还B与A x_1=(0.58820.88240.52940)search_direction=1.82220-2.2578-0.44 tmax=0.231 x_2=1.09620.88240.12300 由以上结果显示: 而理论计算值为 有一定的计算误差。 五、实验体会: 通过这次运筹学课实验,我对无约束优化问题及约束优化问题的思想和局部算法的求解过程有了进一步了解与掌握。 这次实验使我对用进退法确定一维搜索区间,如何进展一维搜索,对求解无约束优化问题的F-R共轭梯度法和约束最优化问题的Wolfe简约梯度法的根本思想和算法有了更深理解,对课的所学知识进一步消化。 在本次实验过程中,发现真正用Matlab求解实际问题的能力还很欠缺,对Matlab的熟练程度还不够! 求解过程出现了许多错误,通过网上查找资料和利用图书馆图书资源得到解决;但是仍有局部问题还没太明白。 希望自己以后加强用Matlab解决实际问题的能力,合理将运筹学所学理论知识应用到实际生活中!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运筹学 实验 报告 FR 共轭 梯度 Wolfe 简约