Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx

上传人:b****5 文档编号:7552350 上传时间:2023-01-24 格式:DOCX 页数:10 大小:53.27KB
下载 相关 举报
Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx_第1页
第1页 / 共10页
Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx_第2页
第2页 / 共10页
Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx_第3页
第3页 / 共10页
Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx_第4页
第4页 / 共10页
Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx

《Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx》由会员分享,可在线阅读,更多相关《Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx(10页珍藏版)》请在冰豆网上搜索。

Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法.docx

Get清风运筹学实验报告FR共轭梯度法Wolfe简约梯度法

运筹学实验报告(F-R共轭梯度法、Wolfe简约梯度法)

运筹学课程实验报告

姓名:

********

学号:

********

班级:

********

日期:

2021/12/17

一、实验目的:

1、掌握求解无约束最优化问题的F-R共轭梯度法,以及约束最优化问题Wolfe简约梯度法。

2、学会用MATLAB编程求解问题,并对以上方法的计算过程和结果进行分析。

二、实验原理与步骤:

1、F-R共轭梯度法

根本步骤是在点

处选取搜索方向

使其与前一次的搜索方向

关于

共轭,即

然后从点

出发,沿方向

求得

的极小值点

如此下去,得到序列{

}。

不难求得

的解为

注意到

的选取不唯一,我们可取

由共轭的定义

可得:

共轭梯度法的计算过程如下:

第一步:

取初始向量

计算

步:

计算

2、Wolfe简约梯度法

Wolfe根本计算步骤:

第一步:

取初始可行点

给定终止误差

,令k:

=0;

第二步:

的m个最大分量的下标集,对矩阵A进行相应分解

第三步:

计算

然后计算简约梯度

第四步:

构造可行下降方向

.假设

,停止迭代,输出

否那么进行第五步。

第五步:

进行有效一维搜索,求解

得到最优解

.令

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=

如果不交还B矩阵与A矩阵那么运行结果如下

x_1=(0.62517080770.0246)search_direction=

很显然X4已经无法再取有效值,,故须交还B与A

x_1=(0.58820.88240.52940)search_direction=1.82220-2.2578

tmax=

x_2=1.09620.88240.12300

由以上结果显示:

而理论计算值为

有一定的计算误差。

五、实验体会:

通过这次运筹学课内实验,我对无约束优化问题及约束优化问题的思想和局部算法的求解过程有了进一步了解与掌握。

这次实验使我对用进退法确定一维搜索区间,如何进行一维搜索,对求解无约束优化问题的F-R共轭梯度法和约束最优化问题的Wolfe简约梯度法的根本思想和算法有了更深理解,对课内的所学知识进一步消化。

在本次实验过程中,发现真正用Matlab求解实际问题的能力还很欠缺,对Matlab的熟练程度还不够!

求解过程出现了许多错误,通过网上查找资料和利用图书馆图书资源得到解决;但是仍有局部问题还没太明白。

希望自己以后加强用Matlab解决实际问题的能力,合理将运筹学所学理论知识应用到实际生活中!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1