Wolfe非精确搜索
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if delta<=teminate %%
break;
Else
(3)确定下降方向
dk=-linsolve(bk+muk*eye(n),gk);%%%%求解下降方向
gk1=gk;fk1=fk;gkdk=gk'*dk;
if gk'*dk>=%当dk不是充分下降时采用负梯度为搜索方向
dk=-gk;
end
(4)确定步长
数学与计算科学学院
实 验 报 告
实验项目名称Wolfe非精确搜索+BFGS
所属课程名称最优化方法
实 验 类 型算法编程
实 验 日 期
班 级信计1201班
学 号
姓 名
成 绩
一、实验概述:
【实验目的】
(1)通过上机实验掌握最优化的实用算法的结构及性能,并用这些算法解决实际的最优化问题,掌握一些实用的编程技巧。
end
end
k=k+1;
End
(7)无约束问题运算结束后记录所花费时间
time=toc;%终止计时
if time<=
t(i,s)=;
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);%%%%结果输出
rose2327362330
froth2202228204
badscp2100010811002
badscb2156219159
beale2394395395
jensam28110984
helix3131212136
bard3100010521003
gauss3771772772
gulf3100010011001
(2)了解Wolfe非精确搜索+BFGS的原理及时间效率等优点。
【实验原理】
1.拟牛顿法(BFGS)
BFGS(Broyden–Fletcher–Goldfarb–Shanno)的算法流程如下:
(1)初始化:初始点x0以及近似逆Hessian矩阵B−10。通常,B0=I,既为单位矩阵。
(2)计算线搜索方向:pk=−B−1k∇f(xk)
singx20100010281003
pen110100010011001
pen210100010011001
vardim108414886
trig10626363
bv10100010011001
IE100606161
trid103118046
band102824146
lin10878888
lin1104566
End
(9)拟牛顿法算法终止:
当 时,此处 ,迭代次数 ,若迭代次数达到1000,仍无法满足 的条件,则退出算法。
【实验过程】(实验步骤、记录、数据、分析)
1、实验步骤:
1、编辑Wolfe非精确搜索+BFGS的MATLAB程序,其中包括.m文件一个,脚本文件一个,详细程序见附录1.
2、程序调试.
3、运行程序分析结果.
if yksk>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;%终止计时
if time<=
t(i,s)=;
else
lin0104526
【实验结论】(结果)
从实验结果可明显看出对于不同的问题,除个别问题外,拟牛顿法运行时间基本保持在很短的水平,且波动较小。故可以得出结论拟牛顿法在解决无约束问题上效率较高,稳定性好。
【实验小结】(收获体会)
牛顿法具有运行时间短且比较稳定的特性,这次试验也很好的体现了这些特点。并且通过基于matlab的编程让我对于最优化方法获得更多的启发,在学习最优化方法上有了更好的体验。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
muk=10;teminate=;factor=;
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];
break;
else
dk=-linsolve(bk+muk*eye(n),gk);
gk1=gk;fk1=fk;gkdk=gk'*dk;
if gk'*dk>= %当dk不是充分下降时采用负梯度为搜索方向
dk=-gk;
end
%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长
fk=objfcn(n,m,xk,nprob);
gk=grdfcn(n,m,xk,nprob);
if norm(gk,2)<=teminate
k=k+1;
break;
end
%%%%%%%%%%%%%%%%% Bk update
sk=xk-xk1;bks2=sk'*bk*sk;yk=gk-gk1;
yksk=yk'*sk;
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');
(3)用”Backtracking line search“算法沿搜索方向找到下一个迭代点: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
三、指导教师评语及成绩:
评 语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成 绩:
指导教师签名:
批阅日期:
附录1:源 程 序
%%%%拟牛顿法 program using Wolfe-Powell search %%%%%%%%
fprintf('\t********************************************************************\n');
for i=1:nn
nprob=numer(i);
[n,m,xk,filename]=initf(nprob);%%%%%%%% 读初始数据
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;
xk=factor*k;
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)迭代开始
while k<1000 %%%%%%%%%迭代上限1000
box3262263263
sing4100010281003
wood4245365254
kowosb4100010011001
bd41000+312757911754
bigss6100010141002
osb211100010501004
watson100100011721009
rosex1004271651495
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);
while k<1000 %%%%%%%%%迭代上限1000
if delta<=teminate
%%%%%%%%%%%%%%%%% Bk update
sk=xk-xk1;bks2=sk'*bk*sk;yk=gk-gk1;
yksk=yk'*sk;
if yksk>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);
[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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长
[alphak,fk,gk,wfnum,wgnum]=wolfe2(n,m,xk,dk,fk1,gk1,nprob);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长
上式5中的推到方法比较复杂,有兴趣的可以搜一下相关文献。
2.非精确线搜索wolfe算法
【实验环境】
,matalb
二、实验内容:
【实验方案】
for i=1:nn%%%1-nn函数依次进入运算
(1)初值准备
nprob=numer(i);
[n,m,xk,filename]=initf(nprob);%%%%%%%% 读初始数据
(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);
if norm(gk,2)<=teminate
k=k+1;
break;
end
(6)由BFGS修正公式得
2:实验结果
运行程序,得到如下实验结果:
***************************拟牛顿法results***************************
ProblemDim.Iter.fnumgnumtime
********************************************************************
break;
Else
(3)确定下降方向
dk=-linsolve(bk+muk*eye(n),gk);%%%%求解下降方向
gk1=gk;fk1=fk;gkdk=gk'*dk;
if gk'*dk>=%当dk不是充分下降时采用负梯度为搜索方向
dk=-gk;
end
(4)确定步长
数学与计算科学学院
实 验 报 告
实验项目名称Wolfe非精确搜索+BFGS
所属课程名称最优化方法
实 验 类 型算法编程
实 验 日 期
班 级信计1201班
学 号
姓 名
成 绩
一、实验概述:
【实验目的】
(1)通过上机实验掌握最优化的实用算法的结构及性能,并用这些算法解决实际的最优化问题,掌握一些实用的编程技巧。
end
end
k=k+1;
End
(7)无约束问题运算结束后记录所花费时间
time=toc;%终止计时
if time<=
t(i,s)=;
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);%%%%结果输出
rose2327362330
froth2202228204
badscp2100010811002
badscb2156219159
beale2394395395
jensam28110984
helix3131212136
bard3100010521003
gauss3771772772
gulf3100010011001
(2)了解Wolfe非精确搜索+BFGS的原理及时间效率等优点。
【实验原理】
1.拟牛顿法(BFGS)
BFGS(Broyden–Fletcher–Goldfarb–Shanno)的算法流程如下:
(1)初始化:初始点x0以及近似逆Hessian矩阵B−10。通常,B0=I,既为单位矩阵。
(2)计算线搜索方向:pk=−B−1k∇f(xk)
singx20100010281003
pen110100010011001
pen210100010011001
vardim108414886
trig10626363
bv10100010011001
IE100606161
trid103118046
band102824146
lin10878888
lin1104566
End
(9)拟牛顿法算法终止:
当 时,此处 ,迭代次数 ,若迭代次数达到1000,仍无法满足 的条件,则退出算法。
【实验过程】(实验步骤、记录、数据、分析)
1、实验步骤:
1、编辑Wolfe非精确搜索+BFGS的MATLAB程序,其中包括.m文件一个,脚本文件一个,详细程序见附录1.
2、程序调试.
3、运行程序分析结果.
if yksk>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;%终止计时
if time<=
t(i,s)=;
else
lin0104526
【实验结论】(结果)
从实验结果可明显看出对于不同的问题,除个别问题外,拟牛顿法运行时间基本保持在很短的水平,且波动较小。故可以得出结论拟牛顿法在解决无约束问题上效率较高,稳定性好。
【实验小结】(收获体会)
牛顿法具有运行时间短且比较稳定的特性,这次试验也很好的体现了这些特点。并且通过基于matlab的编程让我对于最优化方法获得更多的启发,在学习最优化方法上有了更好的体验。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
muk=10;teminate=;factor=;
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];
break;
else
dk=-linsolve(bk+muk*eye(n),gk);
gk1=gk;fk1=fk;gkdk=gk'*dk;
if gk'*dk>= %当dk不是充分下降时采用负梯度为搜索方向
dk=-gk;
end
%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长
fk=objfcn(n,m,xk,nprob);
gk=grdfcn(n,m,xk,nprob);
if norm(gk,2)<=teminate
k=k+1;
break;
end
%%%%%%%%%%%%%%%%% Bk update
sk=xk-xk1;bks2=sk'*bk*sk;yk=gk-gk1;
yksk=yk'*sk;
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');
(3)用”Backtracking line search“算法沿搜索方向找到下一个迭代点: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
三、指导教师评语及成绩:
评 语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成 绩:
指导教师签名:
批阅日期:
附录1:源 程 序
%%%%拟牛顿法 program using Wolfe-Powell search %%%%%%%%
fprintf('\t********************************************************************\n');
for i=1:nn
nprob=numer(i);
[n,m,xk,filename]=initf(nprob);%%%%%%%% 读初始数据
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;
xk=factor*k;
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)迭代开始
while k<1000 %%%%%%%%%迭代上限1000
box3262263263
sing4100010281003
wood4245365254
kowosb4100010011001
bd41000+312757911754
bigss6100010141002
osb211100010501004
watson100100011721009
rosex1004271651495
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);
while k<1000 %%%%%%%%%迭代上限1000
if delta<=teminate
%%%%%%%%%%%%%%%%% Bk update
sk=xk-xk1;bks2=sk'*bk*sk;yk=gk-gk1;
yksk=yk'*sk;
if yksk>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);
[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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长
[alphak,fk,gk,wfnum,wgnum]=wolfe2(n,m,xk,dk,fk1,gk1,nprob);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用Wolfe-Powell搜索计算步长
上式5中的推到方法比较复杂,有兴趣的可以搜一下相关文献。
2.非精确线搜索wolfe算法
【实验环境】
,matalb
二、实验内容:
【实验方案】
for i=1:nn%%%1-nn函数依次进入运算
(1)初值准备
nprob=numer(i);
[n,m,xk,filename]=initf(nprob);%%%%%%%% 读初始数据
(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);
if norm(gk,2)<=teminate
k=k+1;
break;
end
(6)由BFGS修正公式得
2:实验结果
运行程序,得到如下实验结果:
***************************拟牛顿法results***************************
ProblemDim.Iter.fnumgnumtime
********************************************************************