Wolfe非精确搜索+BFGS.docx

上传人:b****1 文档编号:2081725 上传时间:2023-05-02 格式:DOCX 页数:10 大小:124.15KB
下载 相关 举报
Wolfe非精确搜索+BFGS.docx_第1页
第1页 / 共10页
Wolfe非精确搜索+BFGS.docx_第2页
第2页 / 共10页
Wolfe非精确搜索+BFGS.docx_第3页
第3页 / 共10页
Wolfe非精确搜索+BFGS.docx_第4页
第4页 / 共10页
Wolfe非精确搜索+BFGS.docx_第5页
第5页 / 共10页
Wolfe非精确搜索+BFGS.docx_第6页
第6页 / 共10页
Wolfe非精确搜索+BFGS.docx_第7页
第7页 / 共10页
Wolfe非精确搜索+BFGS.docx_第8页
第8页 / 共10页
Wolfe非精确搜索+BFGS.docx_第9页
第9页 / 共10页
Wolfe非精确搜索+BFGS.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Wolfe非精确搜索+BFGS.docx

《Wolfe非精确搜索+BFGS.docx》由会员分享,可在线阅读,更多相关《Wolfe非精确搜索+BFGS.docx(10页珍藏版)》请在冰点文库上搜索。

Wolfe非精确搜索+BFGS.docx

Wolfe非精确搜索+BFGS

长沙理工大学

数学与计算科学学院

实验报告

实验项目名称Wolfe非精确搜索+BFGS

所属课程名称最优化方法

实验类型算法编程

实验日期2015.11.13

班级信计1201班

学号

姓名

成绩

 

一、实验概述:

【实验目的】

(1)通过上机实验掌握最优化的实用算法的结构及性能,并用这些算法解决实际的最优化问题,掌握一些实用的编程技巧。

(2)了解Wolfe非精确搜索+BFGS的原理及时间效率等优点。

【实验原理】

1.拟牛顿法(BFGS)

BFGS(Broyden–Fletcher–Goldfarb–Shanno)的算法流程如下:

(1)初始化:

初始点x0以及近似逆Hessian矩阵B−10。

通常,B0=I,既为单位矩阵。

(2)计算线搜索方向:

pk=−B−1k∇f(xk)

(3)用”Backtrackinglinesearch“算法沿搜索方向找到下一个迭代点:

xk+1=xk+αkpk

(4)根据Armijo–Goldstein 准则,判断是否停止。

(5)计算xk+1=xk+αkpk;以及 yk=∇f(xk+1)−∇f(xk)

(6)迭代近似逆Hessian矩阵:

B−1k+1=(I−skyTkyTksk)B−1k(I−yksTkyTksk)+sksTkyTksk

上式5中的推到方法比较复杂,有兴趣的可以搜一下相关文献。

2.非精确线搜索wolfe算法

【实验环境】

Winows7.0,matalb

二、实验容:

【实验方案】

fori=1:

nn%%%1-nn函数依次进入运算

(1)初值准备

nprob=numer(i);

[n,m,xk,filename]=initf(nprob);%%%%%%%%读初始数据

xk=factor*xk;

bk=eye(n);

k=0;

tic;%计时开始

fk=objfcn(n,m,xk,nprob);

fnum=1;

gk=grdfcn(n,m,xk,nprob);

gnum=1;

delta=norm(gk,2);

(2)迭代开始

whilek<1000%%%%%%%%%迭代上限1000

ifdelta<=teminate%%

break;

Else

(3)确定下降方向

dk=-linsolve(bk+muk*eye(n),gk);%%%%求解下降方向

gk1=gk;fk1=fk;gkdk=gk'*dk;

ifgk'*dk>=-1.0e-14%当dk不是充分下降时采用负梯度为搜索方向

dk=-gk;

end

(4)确定步长

%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长

[alphak,fk,gk,wfnum,wgnum]=wolfe2(n,m,xk,dk,fk1,gk1,nprob);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长

(5)计算

fnum=fnum+wfnum;

gnum=gnum+wgnum;

xk1=xk;xk=xk1+alphak*dk;

fk=objfcn(n,m,xk,nprob);

gk=grdfcn(n,m,xk,nprob);

ifnorm(gk,2)<=teminate

k=k+1;

break;

end

(6)由BFGS修正公式得

%%%%%%%%%%%%%%%%%Bkupdate

sk=xk-xk1;bks2=sk'*bk*sk;yk=gk-gk1;

yksk=yk'*sk;

ifyksk>0

bks1=bk*sk*sk'*bk;

yks=yk*yk'/yksk;bk1=bk;

bk=bk1-bk1*sk*sk'*bk1/(sk'*bk1*sk)+yk*yk'/(yk'*sk);

end

end

k=k+1;

End

(7)无约束问题运算结束后记录所花费时间

time=toc;%终止计时

iftime<=0.000001

t(i,s)=0.0001;

else

t(i,s)=time;%%%将每个无约束问题求解时间记录

End

(8)输出无约束问题的运行结果

fprintf('\n\t%s\t\t\t%2d\t\t\t%5d\t\t\t\t%5d\t\t\t%5d\t\t\t%4f\n',filename,n,k,fnum,gnum,time);%%%%结果输出

End

(9)拟牛顿法算法终止:

时,此处

,迭代次数

,若迭代次数达到1000,仍无法满足

的条件,则退出算法。

 

【实验过程】(实验步骤、记录、数据、分析)

1、实验步骤:

1、编辑Wolfe非精确搜索+BFGS的MATLAB程序,其中包括.m文件一个,脚本文件一个,详细程序见附录1.

2、程序调试.

3、运行程序分析结果.

2:

实验结果

运行程序,得到如下实验结果:

***************************拟牛顿法results***************************

ProblemDim.Iter.fnumgnumtime

********************************************************************

rose23273623301.701463

froth22022282040.201636

badscp21000108110020.911348

badscb21562191590.170202

beale23943953950.338338

jensam281109840.098432

helix31312121360.160998

bard31000105210032.357615

gauss37717727721.112494

gulf31000100110011.130130

box32622632630.276804

sing41000102810030.877423

wood42453652540.236166

kowosb41000100110011.025711

bd41000+312757911754601.421517

bigss61000101410026.634311

osb2111000105010044.903811

watson10010001172100932.726229

rosex10042716514954.125570

singx201000102810032.215915

pen1101000100110013.435982

pen2101000100110012.011244

vardim1084148860.197684

trig106263630.178239

bv101000100110011.587811

IE1006061613.226137

trid1031180460.185056

band1028241460.243491

lin108788880.295781

lin11045660.093807

lin01045260.043293

 

【实验结论】(结果)

从实验结果可明显看出对于不同的问题,除个别问题外,拟牛顿法运行时间基本保持在很短的水平,且波动较小。

故可以得出结论拟牛顿法在解决无约束问题上效率较高,稳定性好。

【实验小结】(收获体会)

牛顿法具有运行时间短且比较稳定的特性,这次试验也很好的体现了这些特点。

并且通过基于matlab的编程让我对于最优化方法获得更多的启发,在学习最优化方法上有了更好的体验。

 

三、指导教师评语及成绩:

评语

评语等级

及格

不及格

1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强

2.实验方案设计合理

3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)

4实验结论正确.

成绩:

指导教师签名:

批阅日期:

附录1:

源程序

%%%%拟牛顿法programusingWolfe-Powellsearch%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;

muk=10;teminate=1.0e-6;factor=0.1;

numer=[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34];

no=size(numer);

nn=no(:

2);

s=1;

fprintf('\n\t***************************拟牛顿法results***************************\n');

fprintf('\tProblem\t\tDim.\t\tIter.\t\t\tfnum\t\tgnum\t\ttime\n');

fprintf('\t********************************************************************\n');

fori=1:

nn

nprob=numer(i);

[n,m,xk,filename]=initf(nprob);%%%%%%%%读初始数据

xk=factor*xk;

bk=eye(n);

k=0;

tic;%计时开始

fk=objfcn(n,m,xk,nprob);

fnum=1;

gk=grdfcn(n,m,xk,nprob);

gnum=1;

delta=norm(gk,2);

whilek<1000%%%%%%%%%迭代上限1000

ifdelta<=teminate

break;

else

dk=-linsolve(bk+muk*eye(n),gk);

gk1=gk;fk1=fk;gkdk=gk'*dk;

ifgk'*dk>=-1.0e-14%当dk不是充分下降时采用负梯度为搜索方向

dk=-gk;

end

%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长

[alphak,fk,gk,wfnum,wgnum]=wolfe2(n,m,xk,dk,fk1,gk1,nprob);

%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长

fnum=fnum+wfnum;

gnum=gnum+wgnum;

xk1=xk;xk=xk1+alphak*dk;

fk=objfcn(n,m,xk,nprob);

gk=grdfcn(n,m,xk,nprob);

ifnorm(gk,2)<=teminate

k=k+1;

break;

end

%%%%%%%%%%%%%%%%%Bkupdate

sk=xk-xk1;bks2=sk'*bk*sk;yk=gk-gk1;

yksk=yk'*sk;

ifyksk>0

bks1=bk*sk*sk'*bk;

yks=yk*yk'/yksk;bk1=bk;

bk=bk1-bk1*sk*sk'*bk1/(sk'*bk1*sk)+yk*yk'/(yk'*sk);

end

end

k=k+1;

end

time=toc;%终止计时

iftime<=0.000001

t(i,s)=0.0001;

else

t(i,s)=time;

end

fprintf('\n\t%s\t\t%2d\t\t%5d\t\t\t%5d\t\t%5d\t\t%4f\n',filename,n,k,fnum,gnum,time);

end

s=2;

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2