最优化方法课程实验报告.docx
- 文档编号:23957823
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:78
- 大小:400.87KB
最优化方法课程实验报告.docx
《最优化方法课程实验报告.docx》由会员分享,可在线阅读,更多相关《最优化方法课程实验报告.docx(78页珍藏版)》请在冰豆网上搜索。
最优化方法课程实验报告
项目一一维搜索算法
(一)
[实验目的]
编写加步探索法、对分法、Newton法的程序。
[实验准备]
1•掌握一维收搜索中搜索区间的加步探索法的思想及迭代步骤;
2.掌握对分法的思想及迭代步骤;
3.掌握Newton法的思想及迭代步骤。
[实验内容及步骤]
编程解决以下问题:
1.用加步探索法确定一维最优化问题
min(t)=t3-2t1
to
的搜索区间,要求选取to=O,h0冷厂=2.
加步探索法算法的计算步骤:
(1)选取初始点to[0,:
)(或1【0,tmax]),计算5二'(to).给出初始步长ho.0,
加步系数〉1,令k=0o
(2)比较目标函数值.令tk[tkhk,计算\1二魚J,若;:
kd<\,转⑶,否
则转⑷。
⑶加大探索步长•令hk1=〉hk,同时,令t=tk,tk=tk1,k=k/,转⑵。
(4)反向探索.若k=0,转换探索方向,令hk=-hk,tf1,转
(2)o否则,停止迭
代,令a=min{t,tk1},b=max{t,tk1}。
加步探索法算法的计算框图
程序清单
加步探索法算法程序见附录1
实验结果
运行结果为:
L
■T:
\ProgramFilesfx8b)\Mli 该问题的根的搜索空间是,[0.31 Pressanyheytocontinuc_ 2.用对分法求解 min(t)二t(t2) 已知初始单谷区间[a,b]"-3,5],要求按精度;=0.3,;=0.001分别计算. 对分法迭代的计算步骤: (1)确定初始搜索区间[a,b],要求飞厂: : 0,: '(b)0。 1 (2)计算[a,b]的中点c(ab). 2 (3)若‘(c): : : 0,则a=c,转⑷;若‘(c)=0,则t^c,转⑸;若'(c)0,则 b=c,转⑷. ⑷若|a-b卜: ;,则t^2(ab),转⑸;否则转 (2). ⑸打印t*,结束 对分法的计算框图 程序清单 对分法程序见附录2 实验结果 运行结果为 3.用Newton法求解 min「⑴二t3-2t1已知初始单谷区间[a,b]二【°,1】,要求精度;=0.01. Newton法的计算步骤 (1)确定初始搜索区间 [a,b],要求 '(a): 0, '(b).0 ⑵选定to ⑶计算t=t°-「'(t。 )/「"(to) ⑷若|t-tol-;,则to=t,转(3);否则转(5) ⑸打印匕建),结束. Newton法的计算框图 程序清单 Newton法程序见附录3 实验结果 运行结果为: '13regramFiles(K8&]\Micro^oftVisualStudia\M'/Propsets |求解的结果是;=0.劭砧P丄匕时f=-0.0886621 Pressanvtocontinue 项目二一维搜索算法 (二) [实验目的] 编写黄金分割法、抛物线插值法的程序。 [实验准备] 1.掌握黄金分割法的思想及迭代步骤; 2.掌握抛物线插值法的思想及迭代步骤。 [实验内容及步骤] 编程解决以下问题: 1.用黄金分割法求解 min(t)=t(t2) 已知初始单谷区间[a,b]=[-3,5],要求精度•;: =0.001. 黄金分割法迭代步骤: (1)确定: (t)的初始搜索区间[a,b]. (2)计算t^a0.382(b-a) (3)计算t|=a0.618(b-a) *t+to (4)若|ti-t2F;,则打印t12,结束;否则转⑸. 2 (5)判别是否满足_2: 若满足,则置a=t2,2=£,2=1 然后转⑶;否则,置 b二,1讥,1二2,2「「(b-a),2二住2) 然后转⑷. 黄金分割法的计算框图: 程序清单 黄金分割法程序见附录4 实验结果 运行结果为: ▼'D: \ProgramFiles(x86)\MicrosoftVisualStudio\MyProject5\zuiyou\Debug\ziyuan.exe* to功厂迭代次数为0]迭代结里为root=0-056函数值逬似为: f Pressanvkeytocontinue. 2.用抛物线插值法求解 minf(x)=8x3-2x2-7x3 已知初始单谷区间[a,b]=[°,2]. : =0.001 抛物线插值法的计算步骤: (1)(t)<(to),所以相对to来说t是好点,故划掉区间[t°,t2],保留[ti,to]为新区 间,故置t2=to,(t2)": (to),to二t,(t)="to),ti保持不变; (2): (t)(to),所以相对t来说to是好点,故划掉区间[t^t],保留[t,t2]为新区间, 故置t^t,(t)匚: (tj,to与t2保持不变; 程序清单 抛物线插值法程序见附录5 实验结果 运行结果为: ■'D: \ProgrannFiles(xS6)\MicrosoftVisualStudio\MyProject5\zu 迭代第黑 近似? R: 0>630061 函数植近似为: -0-203424^essanykeytocantinue 项目三常用无约束最优化方法 (一) [实验目的] 编写最速下降法、Newton法(修正Newton法)的程序[实验准备] 1.掌握最速下降法的思想及迭代步骤。 2.掌握Newton法的思想及迭代步骤; 3.掌握修正Newton法的思想及迭代步骤。 [实验内容及步骤] 编程解决以下问题: 1.用最速下降法求 minf(X)25x;,X°=[2,2]T,二0.01 最速下降法计算步骤 (1)取初始点X(0),容许误差(精度);0,令k=0 (2)计算p(k)-八f(X(k)) (3)检验p(k)空;? 若是迭代终止,取X"=X(k),否则转4° (4)求最优步长k: minf(X(k)•'p(k))=f(X(k)•'kp(k))(—维搜索) >: -0 令X(k1)=x(k)「kP⑹,令k-k1,转2° 最速下降法的计算框图 程序清单 最速下降法程序见附录6 实验结果 运行结果为: 2.用Newton法求 minf(X)=60「10人「4x2Xx|-x1x2初始点X0=[0,0]丁,;=0・01. Newton 法的计算步骤 (1) 给定初始点x),及精度;•°,令k=0; (2) (3) 'f(X)亠-,停止,极小点为x(k),否则转步骤(3);计算了2f(X(k))F令S(k)=—[H(X(k))],Vf(X(k)); 令x(f=x(k)+s(k),k=k+1,转步骤 (2)。 程序清单 Newton法程序见附录7 实验结果 运行结果为 Anvkeytccantinus 3.用修正Newton求 minf(X)=4(X11)22(x2一1)2为x? 10初始点X0=[0,0]丁,疋r。 01. 修正Newton的计算步骤 (1)给定初始点x®,及精度;V,令k=0; (2)若'丿I,停止,极小点为x(k),否则转步骤(3); (3)计算FPF',令s(k—[H(X(k))e(X(k)); 使得f(X(k「kSk()=)minfXk(J: _0 程序清单 修正Newton程序见附录8 实验结果 运行结果为 项目四常用无约束最优化方法 (二) 实验目的 编写共轭梯度法、变尺度法(DFP法和BFGS法)程序。 实验准备 1.掌握共轭方向法的思路及迭代过程; 2.掌握共轭梯度法的思想及迭代步骤; 3.掌握DFP法和BFGS法的思想及迭代步骤。 实验内容及步骤 编程解决以下问题: 1.用共轭梯度法求得min(x「4x;),取初始点X。 二【1,1「,;=0.01. 共轭梯度法算法步骤 (4)。 程序清单 共轭梯度法程序见附录9 实验结果 运行结果为 D: \ProgramFiles(x86J\MicrosciftVisualStudio\MyProjerts\zu|y°ebug\z>yn 请输入函数的元数值”2请输入初始值: 1 1 Ml=-«i_0Pf1flW2,5(2=-H.ap2=»_aiawwi (a.b]-1-4.SeRHBB^lV5MHHHI pl=0•E凶电M■说F*KeHHH0.t=0.-17-1238 Ml—0H@S0@@@*m2=0■BBQaO0Pi>i=O<000898.p2=-0.0B3B05U^bJ»[-4B5Se000UJ580OB8] ^1-0.066600,p2—B・60QBO5.t-0・020810 Mtt^zDx1"-0■000800>x2—8・000860 厳终的凿數値为曾-SB@00BPreasanykeytocuniti.nu.cH ■22 2.用共轭梯度法求minf(X)=2Xi•X2-皿2,自定初始点,;=0.01. 程序清单 共轭梯度法程序见附录9 实验结果 运行结果为 3.用DFP法求minf(X)=4(Xi-5)(X2-6),初始点X。 珂8,9]丁,=°.°1 DFP法的具体迭代步骤如下 (1)给定初始点一: 迭代精度己,维数n (2)置0tk,单位矩阵,计算席炉 (3)计算搜索方向- (4)进行一维搜索求1,使 /M叫卅評)亠呻気0护) 得迭代新点-/-■'-■: - (5)检验是否满足迭代终止条件H‘11? 若满足,停止迭代,输出最优解 -二,-: >'■: ;否则进行下一步。 (6)检查迭代次数,若k=n,则置..'',转向步骤 (2);若k 步。 (7)计算: DFP法的计算框图 程序清单 DFP法程序见附录10 实验结果 运行结果为: DFF^ 函錚 xd=5 x2=6 卩尸耳貝盂Rrnub: Ftijnnrif: ~im[iiE_ 项目五常用约束最优化方法 [实验目的] 编写外点罚函数法、外点罚函数法的程序 [实验准备] 1•掌握外点罚函数法的思想及迭代步骤; 2.掌握内点罚函数法的思想及迭代步骤。 [实验内容及步骤] 编程解决以下问题: 1.用外点罚函数法编程计算 minf(X)二-x2, Q(X)=InX2A0, st.丿h(X)=捲+x2—1=0, 精度;=101 外点法的计算步骤: (1)给定初始点X(0),初始罚因子■⑴, 放大系数c>1;允许误差e>0,设置k=1; (2)以x(k-1)作为搜索初始点,求解无约束规划问题 minf(xp■P(x),令x(k)为所求极小点。 (3)当P(x(k)): : e,则停止计算,得到点x(k);否则,令’(kT)=c'(k),返回 (2)执行。 程序清单 外点罚函数法程序见附录11 实验结果 实验结果为 2.用内点罚函数法编程计算 3 min3(x11) X2 st. Xi-■1一0,x2—0. 初始点取为X。 心4r, 初始障碍因子取Ui=10缩小系数取c=0.1. 内点罚步骤 障碍参数⑴,缩小系数b•(0,1),置k=1; (2)以x(k①为初始点,求解下列规划问题 令x(k)为所求极小点 minf(x)(k)B(x) s.t.xS (3)如果(k)B(x(k)): : : e,则停止计算,得到结果x(k), (4)否则令(k1)=b(k),置k=k+1,返回 (2)。 内点罚计算框图 程序清单 内点罚函数法程序见附录12 实验结果 运行结果为 附录1 #include returnx*x*x-2*x+1; } doubleMax_Num(doublea,doubleb) { if(a>b) returna; else returnb; } doubleMin_Num(doublea,doubleb){ if(a returna; else returnb; } voidStepAdding_Search(double&a,double&b) { doublet[MAX]={0}; doubleh[MAX]={0}; doublef[MAX]={0}; doubleresult=0; doublep=2; t[0]=0; h[0]=1; f[0]=fun(t[0]); for(intk=0;k { t[k+1]=t[k]+h[k]; f[k+1]=fun(t[k+1]); if(f[k+1]vf[k]) { h[k+1]=p*h[k]; result=t[k]; t[k]=t[k+1]; f[k]=f[k+1]; } elseif(k==0) { h[k]=-h[k]; result=t[k+1]; } else{ a=Min_Num(result,t[k+1]);b=Max_Num(result,t[k+1]); } } } intmain() { doublea=0.0; doubleb=0.0; StepAdding_Search(a,b); 「vva COUt«"该问题的根的搜索空间是 return0; } 附录2 #include #include #defineeps0.001 doublefun(doublex) { returnx*x+2*x; } doublediff_fun(doublex) { return2*x+2; } doubledichotomy(doublea,doubleb) { doublec=0.0; if((diff_fun(a)<0)&&(diff_fun(b)>0)) { while(true) { c=(a+b)/2; if(diff_fun(c)<0) { a=c; if(fabs((a-b)) { return(a+b)/2; } } elseif(diff_fun(c)==0) { returnc; } else { b=c; if(fabs((a-b)) { return(a+b)/2; }}}}} intmain() { doublea=-3.0; doubleb=5.0; doubleresult=dichotomy(a,b); coutvv"求解的结果是: "vvresultvvendl; return0; } 附录3 #includeviostream.h> #includevmath.h> #defineeps0.01 doublefun(doublex) { returnx*x*x-2*x+1; } doublediff_fun(doublex) { return3*x*x-2; } doublediff_2_fun(doublex) { return6*x; } doublenewton(doublea,doubleb) { doubleresult=(a+b)/2; doublet=0.0; while(true) { t=result-(diff_fun(result)/diff_2_fun(result)); if(fabs((t-result))veps) { returnresult; } else { result=t; } } } intmain() { doublea=0.0; doubleb=3.0; doublex=newton(a,b); coutvv"求解的结果是x="vvxvvendl; coutvv"此时f(x)="vvfun(x)vvendl; return0; } 附录4 #includeviostream> #includevmath.h> usingnamespacestd; doublefun(doublet) { return(t*t+2*t); } voidGoldensection(double(*pfun)(doublet)) { intmaxflag=1000,k=1; doublea=-3,b=5,err=0.001,t,t1,t2; do { t1=a+0.618*(b-a); t2=b-0.618*(b-a); if(t1=t2){a=t2;b=t1;} else{if(t1vt2){a=t2;} else{b=t1;}} k++; }while(fabs(a-b)>err&&kvmaxflag); if(k>=maxflag) coutvvendlvv"黄金分割法迭代失败! 迭代次数为k="vvkvvendl;else { t=(a+b)/2; coutvvendlvv"黄金分割法迭代成功! 迭代次数为k="vvk-1vvendl; : f(root)="vvfun(t)vvendl;} coutvv"迭代结果: 近似根为root="vvtvvendl;coutvv"函数值近似为 } intmain() { Goldensection(fun); return0; } 附录5 #include #include usingnamespacestd; doublefun(doublex) { return(8*x*x*x-2*x*x-7*x+3); } doublemax(doublea,doubleb) { if(a>b)returna; elsereturnb; } doublemin(doublea,doubleb) { if(a>b)returnb; elsereturna; } voidParainterpolation(double(*pfun)(doublex)){ doublea=0,b=2,err=0.001,x=0,x0=1,f,f0; do { x=((x0*x0-b*b)*fun(a)+(b*b-a*a)*fun(x0)+(a*a-x0*x0)*fun(b))/(2*((x0-b)*fun(a)+(b-a)*fun(x0)+(a-x0)*f un(b))); f0=fun(x0); f=fun(x); if(f=f0){a=min(x,x0);b=max(x,x0);x0=(a+b)/2;} else{ if((fun(x)-f0)*(x-x0)>0) { b=max(x,x0);x0=min(x,x0); } else { a=min(x,x0);x0=max(x,x0); } } }while(fabs(x-x0)>err); x=(x+x0)/2; coutvv"迭代结果: "wendl; "]X*[|jER=[|JdIO】x*[o]耳乙=【0】dh]b*pwE|+[|Jx=[|Jx! [o]6¥piue|+[o]x=[o]x! (e161x)epLue|=piue|}(00乙=>辭头(【116JL]6+[o]6¥[o]6)lJbs)9|! i|M! |pus»;noo! o=! h】d-=[|Jb! [o]d-=[o]6堆17】e+【0】x*[乙]e+[|jx*[订耳乙)=[|Jd乂【£]e+【|Jx*[乙]e+[o]x*[o]耳乙)=[0】d! [i]e«uio(++! ! 9>! : 0=! )JOj! |pu9»H: [g]e、[朋、[£旧、⑵e、[圧[ole: 诲翌阴诲國Y嗨逖羽舆..»inoo ! |pu9»11[g]e+sx[i7]e+以[£旧+乙xjxNe+乙xrx[订盼|,x^x[o]e=(x)j华莎沁..»inoo! u=[|,]x! iu=[o]x! u«uio! iu«uio! |PU9»uu\: 旬阴[|JxTo]xu»inoo 0VVUQ! |PU9»H9固耿Y嗨舆u»inoo: 0=! iuitu'iu'A'o'[乙]b'[乙]dsiqnopl9】E'【£]x'piUE|©iqnop! |pus»;noolPU9»u番孫马吴自畐搦W窖搦$蚩劉丄堪窖u»inoo }OuiblupioA{! sujn;sj! (^bus)/21UB|-=s! s9|qnop! ((21de)/v\od+(21[oK[o]B)Mod)-=2iue| 堆lJx*[|Jx*©[|jE)/v\od+[o]x*[o]x*(y[o】E)Mod)=MH: 3iue|£|,iue|令iqnop}([s]b°|qnop'[乙]d°|qnop'[乙]x°|qnop)wpiUE|令|qnop # #9沓朗 {: 0ujn;sj! (unj)uo! ;e|odj9;u! ejec| }OujBiuM {! |pu9»(x)un»,,: ■沏必旬滋国..»inoo! |pu9»x»H: 制沏必„»inoo g【o]=-P【o】; g【i]=-P【i]; i++; coutvv' I******************************************I 'vvendl; coutvv"第"vvivv"次迭代结果: "vvendl; cout<<"p的模为: "vvsqrt(g[0]*g[0]+g[1]*g[1])vvendl; coutvv'x的值"vvx[0]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 方法 课程 实验 报告