运筹与优化实验报告.docx
- 文档编号:4540242
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:116.43KB
运筹与优化实验报告.docx
《运筹与优化实验报告.docx》由会员分享,可在线阅读,更多相关《运筹与优化实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
运筹与优化实验报告
运筹与优化
实验报告
学号
姓名
指导教师
成绩
2019-2020学年第学期
一、黄金分割法(0.618法)
(一)实验目的
熟练掌握黄金分割法的算法思想,并能够运用MATLAB编程解决相关问题。
(二)问题描述
对于极小化问题
试用0.618法求出极小区间,初始区间取为
,精度
。
(要求迭代步数,迭代时间,极小区间)
(三)算法框架
STEP1:
在区间
中取两点:
STEP2:
若
,停止计算,输出结果
否则计算并比较
STEP3:
置k:
=k+1,返回STEP2
(四)程序源代码
建立goldencut.m函数
functiong=goldencut()
t1=cputime
f=@(x)x^2-x+2
a=-1;
b=3;
e=0.000001;
h=b-a;
n=0;
whileh>e
u=a+0.382*(b-a);
v=a+0.618*(b-a);
iff(u) b=v; elsea=u; end h=b-a; n=n+1; end a,b,n t2=cputime-t1 end 保存并运行 >>goldencut t1= 227.0625 f= @(x)x^2-x+2 a= 0.5000 b= 0.5000 n= 32 t2= 0.0313 (五)实验结果及分析 由MATLAB编程结果可知,利用黄金分割法求解的迭代步数为32步,执行时间为0.0313s,极小区间为 ,代表区间端点a无限接近于b。 编程结果与手算结果一致。 (六)实验小结 通过这次实验,我更加深刻地理解了一维搜索算法中黄金分割法的算法思想,并学会使用MATLAB编程解决相关问题。 在编程实现时查阅的相关资料,也让我受益匪浅。 二、共轭梯度法 (一)实验目的 熟练掌握共轭梯度法的算法思想,并能够运用MATLAB编程解决相关问题。 (二)问题描述 共轭梯度法求解: 1、 2、 (三)算法框架 1、CG算法 n元正定二次函数 ,给定任意初始点 ,计算 ,置k: =0 STEP1: STEP2: 判断 ,若成立,则终止,输出。 否则转STEP3 STEP3: 计算下一次的搜索方向 ,其中 STEP4: 置k: =k+1,转STEP1进行下一次迭代 2、应用于非二次函数的共轭梯度法(二次函数CG法的推广应用) 关键: 将公式中含有的二次函数的Hesse阵Q的信息消去 对 : 改用直接的e.1.s,求得步长因子 对 : (四)程序源代码 1、二次函数的共轭梯度法 建立conjugategradient.m函数 functions=conjugategradient() symsfx1x2 f=x1^2-x1*x2+x2^2+2*x1-4*x2; x=[-2;4]; a=[2-1;-12]; g1=diff(f,x1); g2=diff(f,x2); g=[g1;g2]; g11=subs(g1,{x1,x2},{x (1)x (2)}); g22=subs(g2,{x1,x2},{x (1)x (2)}); g=[g11;g22] d=-g; d11=subs(d (1),{x1,x2},{x (1)x (2)}); d22=subs(d (2),{x1,x2},{x (1)x (2)}); d=[d11;d22] af=(-g'*d)/(d'*a*d) x=x+af*d g11=subs(g1,{x1,x2},{x (1)x (2)}); g22=subs(g2,{x1,x2},{x (1)x (2)}); g=[g11;g22] e=0.1; %共轭梯度 fori=1: 2 ifg==0 break else b=(g'*a*d)/(d'*a*d) d=-g+b*d; d11=subs(d (1),{x1,x2},{x (1)x (2)}); d22=subs(d (2),{x1,x2},{x (1)x (2)}); d=[d11;d22] af=(-g'*d)/(d'*a*d) x=x+af*d g11=subs(g1,{x1,x2},{x (1)x (2)}); g22=subs(g2,{x1,x2},{x (1)x (2)}); g=[g11;g22] end end end 保存并运行 >>conjugategradient g= -6 6 d= 6 -6 af= 0.3333 x= 0 2 g= 0 0 2、非二次函数的共轭梯度法 建立promotecg.m函数 functionx=promotecg(A,B,e,x0) n=0; p=-(A*x0+B); while(sqrt((A*x0+B)'*(A*x0+B))>=e) l=(-1)*((A*x0+B)'*p)/(p'*A*p); x=x0+l*p; p1=-(A*x+B)+((A*x+B)'*(A*x+B))/((A*x0+B)'*(A*x0+B))*p; x0=x; p=p1; n=n+1; end end 保存 命令行输入: >>A=[20;04] A= 20 04 >>B=[0;0] B= 0 0 >>e=0.0001; >>x0=[1;0] x0= 1 0 >>[x]=promotecg(A,B,e,x0) x= 0 0 (五)实验结果及分析 由MATLAB编程结果可知,第一题最优解x为 。 其中g为梯度方向,d为搜索方向,af为步长,x为所求极小点,而最后的g为此x对应的梯度(即终止条件)。 第二题最优解x为 。 编程结果均与手算结果一致。 (六)实验小结 通过这次实验,我更加深刻地理解了共轭梯度法的算法思想,并学会使用MATLAB编程解决相关问题。 在编程实现时查阅的相关资料,也让我受益匪浅。 三、内点法与外点法 (一)实验目的 熟练掌握内点法和外点法的算法思想,并能够运用MATLAB编程解决相关问题。 (二)问题描述 分别用内点法与外点法(外惩罚函数法)求解下列非线性规划: (三)算法框架 1、内点法: 已知 , 取 取一初始容许点 ,初始惩罚因子 ,惩罚因子的缩小系数 置 STEP1: 以 为初始点,求解 得极小点 ; STEP2: 若 stop; STEP3: 置 置 ,转STEP2 2、外点法: 给定初始点 ,初始惩罚因子 ,放大系数 ,置 STEP1: 以 为初始点求解 得极小点 STEP2: 若 ,stop STEP3: ,置 ,转STEP1 (四)程序源代码 1、内点法 建立inpoint.m函数 functiont=inpoint(a,b) symsx1x2; u=0.01; x0=[ab]; f=x1+x2+u*(1/(-x1^2+x2)+1/(x1)); i=0; while(i<10) f=x1+x2+u*(1/(-x1^2+x2)+1/(x1)); df=[diff(f,x1);diff(f,x2)]; [c1,c2]=solve(df (1),df (2)); x0=real(double([c1c2])); i=i+1; u=0.1*u; end x0 min=vpa(subs(f,[x1x2],[x0 (1),x0 (2)])) end 保存 命令行输入: >>inpoint(2,2) x0= -0.0000-0.0000 0.0000-0.0000 0.00000.0000 -0.00000.0000 -0.50000.2500 -0.50000.2500 min= 0.000000000010000158114683031141172930750089 2、外点法 functions=expoint(a,b) symsx1x2; M=5; a1=x1^2-x2; a2=-x1; x0=[ab]; f=x1+x2; df=[diff(f,x1);diff(f,x2)]; k=0; while(k<100) ifsubs(a1,[x1x2],x0)>0&&subs(a2,x1,x0 (1))>0 f=x1+x2+M*((x1^2-x2)^2+(-x1)^2); end ifsubs(a1,[x1x2],x0)<=0&&subs(a2,x1,x0 (1))>0 f=x1+x2+M*((-x1)^2); end if(subs(a1,[x1x2],x0)<=0)&&(subs(a2,x1,x0 (1))<=0) f=x1+x2; end if(subs(a1,[x1x2],x0)>0)&&(subs(a2,x1,x0 (1))<=0) f=x1+x2+M*((x1^2-x2)^2); end df=[diff(f,x1);diff(f,x2)]; [c1,c2]=solve(df (1),df (2)); x0=[c1c2]; M=2*M; k=k+1; end x0 min=subs(f,[x1x2],x0) end 保存 命令行输入: >>expoint(2,2) x0= [-1/6338253001141147007483516026882,-10043362776618689222137263077137019955514624571398067857653761/63657374260452690195888927762833240983964862058949056884687924445640471833595849372629729280] min= -633825*********7007483516026881/40173451106474756888549052308541741569057357138584787914588160 (五)实验结果及分析 由MATLAB编程结果可知,使用内点法和外点法求解非线性规划问题,所得的结果是一致的,可行解均为 ,且与手算结果一致。 (六)实验小结 通过这次实验,我更加深刻地理解了内点法和外点法的算法思想,并学会使用MATLAB编程解决相关问题。 在编程实现时查阅的相关资料,也让我受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运筹 优化 实验 报告