优化方法编程大作业.pdf
《优化方法编程大作业.pdf》由会员分享,可在线阅读,更多相关《优化方法编程大作业.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、优化方法编程大作业1 1:Matlab 代码:将下面代码输入 command 中即可:clcclearsyms x2 x1 fa=0;b=+inf;c1=0.1;c2=0.5;%rk 为搜索步长,xk 为变量,sk 为搜索方向,gk 为梯度值。rk=1;sk=-1;1;xk0=0;1;%xk0 初始值f=(x2-x12)2+(1-x1)2;%所求函数j=0;%循环的标志变量%循环求解最佳的步长while j=0;fk0=subs(f,x1,x2,xk0(1),xk0(2);%求 f 在 xk0 处的函数值 gk0=subs(jacobian(f,x1,x2),x1,x2,xk0(1),xk0(
2、2);%求 f 在 xk0 处的梯度值 xk=xk0+rk*sk;fk=subs(f,x1,x2,xk(1),xk(2);%求 f 在 xk 处的函数值 gk=subs(jacobian(f,x1,x2),x1,x2,xk(1),xk(2);%求 f 在 xk 处的梯度值%搜索步长满足 wolfe-powell 第一个准则 if fk0-fk=-c1*rk*gk0*sk%搜索步长满足 wolfe-powell 第二个准则 if gk*sk=c2*gk0*sk%输出最佳的步长 rk=rk;return;%搜索步长不满足 wolfe-powell 准则,继续迭代 else j=j+1;a=rk;r
3、k=min(2*rk,0.5*(rk+b);end else j=j+1;b=rk;rk=0.5*(a+rk);endendxkgkrk运行结果:j=53,迭代 54 次。xk=-0.0000 1.0000gk=-2.0000 2.0000rk=1.1102e-162首先定义三个函数 f(求函数值),g(求梯度值)和 wolfe(第一题的算法求步长)并存为 M 文件放在一个文件夹下:function f=f(x)f=x(1)2-2*x(1)*x(2)+2*x(2)2+x(3)2+x(4)2-x(2)*x(3)+2*x(1)+3*x(2)-x(3);endfunction g=g(yk0)sym
4、s y1 y2 y3 y4;y=y12-2*y1*y2+2*y22+y32+y42-y2*y3+2*y1+3*y2-y3;g=subs(jacobian(y,y1,y2,y3,y4),y1,y2,y3,y4,yk0(1),yk0(2),yk0(3),yk0(4);%求 gf 在 yk0 处的梯度值endfunction tk=wolfe(yk0,dk)a=0;b=+inf;c1=0.1;c2=0.5;%rk 为搜索步长,xk 为变量,sk 为搜索方向,gk 为梯度值。tk=1;%sk=-1;1;%xk0=0;1;%xk0 初始值%f=(x2-x12)2+(1-x1)2;%所求函数j=0;%循环
5、的标志变量%循环求解最佳的步长while j=0;fk0=f(yk0);%求 f 在 xk0 处的函数值 gk0=g(yk0);%求 f 在 xk0 处的梯度值 yk=yk0+tk*dk;fk=f(yk);%求 f 在 xk 处的函数值 gk=g(yk);%求 f 在 xk 处的梯度值%搜索步长满足 wolfe-powell 第一个准则 if fk0-fk=-c1*tk*gk0*dk%搜索步长满足 wolfe-powell 第二个准则 if gk*dk=c2*gk0*dk%输出最佳的步长 tk=tk;return;%搜索步长不满足 wolfe-powell 准则,继续迭代 else j=j+1
6、;a=tk;tk=min(2*tk,0.5*(tk+b);end else j=j+1;b=tk;tk=0.5*(a+tk);endendend将下面的代码输入 Matlab 的 command 中可得结果:xk0=0;0;0;0;k=0;n=4;gk0=g(xk0);%求 f 在 xk0 处的梯度值sk=-gk0;%sk 为 skwhile k=n-1 gk0=g(xk0);%求 f 在 xk0 处的梯度值 rk=wolfe(xk0,sk);xk=xk0+rk*sk;fk=f(xk);%求 f 在 xk 处的函数值 gk=g(xk);%求 f 在 xk 处的梯度值 xk0=xk;if(gk(
7、1)2+gk(2)2+gk(3)2+gk(4)2)(1/2)=0;fk0=f(yk0);%求 f 在 xk0 处的函数值 gk0=g(yk0);%求 f 在 xk0 处的梯度值 yk=yk0+tk*dk;fk=f(yk);%求 f 在 xk 处的函数值 gk=g(yk);%求 f 在 xk 处的梯度值%搜索步长满足 wolfe-powell 第一个准则 if fk0-fk=-c1*tk*gk0*dk%搜索步长满足 wolfe-powell 第二个准则 if gk*dk=c2*gk0*dk%输出最佳的步长 tk=tk;return;%搜索步长不满足 wolfe-powell 准则,继续迭代 el
8、se j=j+1;a=tk;tk=min(2*tk,0.5*(tk+b);end else j=j+1;b=tk;tk=0.5*(a+tk);endendend(1)编写最速下降法函数minFD。function x,minf,k=minFD(x0)%功能:用变尺度求解无约束优化问题%输入:初始点 xk%输出:最优解 val,及最小点 x,迭代次数 k eps=1.0e-4;tol=1;k=0;while toleps v=-gfun(x0);tol=norm(v);step=buchang(x0,v);%一维搜索 xk=x0+step*v;x0=xk;k=k+1;endx=xk;minf=f
9、un(x);在 command 中输入 xk=1,0;x,fv,k=minFD(xk)运行结果为:x=-0.4194 0fv=0.7729k=12(2)编写牛顿法求解极值minNT。function x,minf,k=minNT(x0)%功能:用变尺度求解无约束优化问题%输入:初始点 xk%输出:最优解 val,及最小点,迭代次数eps=1.0e-4;tol=1;k=0;while toleps v =gfun(x0);pv=Hess(x0);p=-inv(pv)*v;tol=norm(p);step=buchang(x0,p);%一维搜索 x1=x0+step*p;x0=x1;k=k+1;e
10、ndx=x1;minf=fun(x);在 command 中输入 xk=1,0;x,fv,k=minNT(xk)运行结果为:x=-0.4194 0fv=0.7729k=6(3)编写 BFGS 法求解极值function x,minf,m=minBFGS(x0)%功能:BFGS 法求解无约束优化问题%输入:初始点 xk%输出:最优解 minf,及最小点 x,迭代次数 meps=1.0e-4;H=1,0;0,1;k=0;m=0;n=2;while 1 v =gfun(x0);p=-H*v;step=buchang(x0,p);%一维搜索 x1=x0+step*p;vk=gfun(x1);if no
11、rm(vk)xk=1,0;x,fv,k=minBFGS(xk)运行结果为:x=-0.4194 0fv=0.7729k=54首先定义拉格朗日法求解等式约束的函数QuadLagR。function xv,fv=QuadLagR(H,c,A,b)%正定矩阵:H%二次规划一次项系数向量:c%等式约束右端向量 b%目标函数取极小值时的自变量值:xv%目标函数极小值:fvinvH=inv(H);F=invH*transpose(A)*inv(A*invH*transpose(A)*A*invH-invH;D=inv(A*invH*transpose(A)*A*invH;xv=F*c+transpose(D
12、)*b;fv=transpose(xv)*H*xv/2+transpose(c)*xv;有效集法求解函数:function xv,fv=ActivdeSet(H,c,A,b,x0,AcSet)%正定矩阵:H%二次规划一次项系数向量:c%等式约束右端向量 b%初始点:x0%初始约束集:AcSset%目标函数取极小值时的自变量值:xv%目标函数极小值:fvsz=size(A);xx=1:sz(1);nonAcSet=zeros(1,1);m=1;for i=1:sz(1)%寻找非约束指标集 if(isempty(find(AcSet=xx(i),1)nonAcSet(m)=i;m=m+1;else
13、 ;endendinvH=inv(H);bCon=1;while bCon cl=H*x0+c;Al=A(AcSet,:);bl=b(AcSet);xm=QuadLagR(H,cl,Al,zeros(length(AcSet),1);%用拉格朗日求解由约束指标集定义的等式约束二次规划 if xm=0%最优解为 0 trAl=transpose(Al);R=inv(Al*invH*trAl)*Al*invH;lamda=R*(H*xm+cl);%拉格朗日乘子 lmin,index=min(lamda);if lmin=0 xv=x0;%停止计算,得出最优解 fv=transpose(x0)*H*
14、x0/2+transpose(c)*x0;bCon=0;return;else l=length(AcSet);%删除指标 AcSet(index)nonAcSet=nonAcSet AcSet(index);sa,sb=sort(nonAcSet);nonAcSet=sa;tmpAcS=AcSet(1:(index-1)AcSet(index+1):l);AcSet=tmpAcS;end else d=xm;mAlpha=inf;adinAcS=0;for i=1:length(nonAcSet)%确定 alpha if A(nonAcSet(i),:)*d 0 alpha=(b(nonAc
15、Set(i)A(nonAcSet(i),:)*x0)/(A(nonAcSet(i),:)*d);if alpha mAlpha mAlpha=alpha;adinAcS=nonAcSet(i);end end end mXA=min(1,mAlpha);%确定 alpha-k x0=x0+mXA*d;if mXA=0-xv=x0;fv=transpose(x0)*H*x0/2+transpose(c)*x0;bCon=0;return;else l=length(AcSet);nonAcSet=nonAcSet AcSet(index);sa,sb=sort(nonAcSet);nonAcSe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 方法 编程 作业
限制150内