机械优化设计 复合形法实验报告

合集下载

机械优化设计实验报告

机械优化设计实验报告

《机械优化设计》课程实验报告M a t l a b优化工具箱一、实验目的和要求熟悉Matlab7.0软件的界面和基本功能,了解Matlab优化工具箱的常用算法;使用Matlab优化工具箱的f m i n u n c/f m i n s e a r c h函数求解多变量非线性无约束优化问题;使用Matlab优化工具箱的f m i n c o n函数求解多变量非线性约束优化问题。

二、实验设备和软件台式计算机,Matlab7.0软件。

三、实验内容求解下列优化问题的最优解。

要求:(1)编写求解优化问题的M文件,(2)在命令窗口输入求解优化问题的命令,并得出计算结果。

1、标量优化问题1) f=x2-10x+362) f=x4-5x3+4x2-6x+603) f=(x+1)(x-2)22、多变量非线性无约束优化问题1) f=4(x1-5) 2+( x2-6) 2初始点:x0=[8,9]T;2) f=(x12+x2-11)2+( x1+ x22-7)2初始点:x0=[1,1]T;3) f=[1.5- x1(1- x2)]2+[2.25- x1(1- x22)]2+[2.625- x1(1- x23)]2初始点:x0=[2,0.2]T;4) f=( x12+12 x2-1)2+(49 x1+49 x2+84 x1+2324 x2-681)2初始点:x0=[1,1]T;5) f=( x1+10 x2)2+5(x3- x4)2+( x2-2 x3)4+10(x1- x4)4初始点:x0=[3,-1,0,1]T;3、多变量非线性约束优化问题1) f=( x1-2)2+( x2-1)2g1= x12-x2≤0g2= x1+x2-2≤0初始点:x0=[3,3]T;2) f= x23[( x1-3)2-9]/273≤0g1=x2-x1/3≤0g2=-x1+x2/3≤0g3=x1+x2/3-6≤0g4=-x1≤0g5=-x2≤0初始点:x0=[1,5]T;3) f=1000- x12-2x2 2-x32-x1x2-x1x3g1=-x1≤0g2=-x2≤0g3=-x3≤0g4=x12+x22+x3 2-25=0g5=8x1+14x2+7x3-56=0初始点:x0=[2,2,2]T4)f=100(x2-x12)2+(1-x1)2+90(x4-x32)2+(1-x3)2+10[(x2-1)2+(x4-1)2]+19.8(x2-1)(x4-1)-10≤x1≤10-10≤x2≤10-10≤x3≤10-10≤0x4≤10初始点:x0=[-3,-1,-3,-1]T;四、M文件、在命令窗口输入的求解命令清单及计算结果记录>>1、(1)目标函数的M文件function f=fun1(x)f=x^2-10*x+36调用求解命令x0=0;options=optimset('LargeScale','off');lb=-10;ub=10;[x,fval]=fminbnd(@fun1,lb,ub,options)或{ x0=0; [x,fval]=fminbnd(@fun1,-10,10)} x =5.0000fval =11.00002、(2)目标函数的M文件function f=fun2(x)f=x^4-5*x^3+4*x^2-6*x+60调用求解命令x0=0;options=optimset('LargeScale','off');lb=0;ub=10;[x,fval]=fminbnd(@fun2,lb,ub,options)x =3.2796fval =22.65902、(3)目标函数的M文件function f=fun3(x)f=(x+1)*(x-2)^2调用求解命令> x0=0;options=optimset('LargeScale','off');lb=0;ub=10;[x,fval]=fminbnd(@fun3,lb,ub,options)x =2.0000fval =1.9953e-0113(1)目标函数的M文件function f=fun4(x)f=4*(x(1)-5)^2+(x(2)-6)^2调用求解命令x0=[8,9];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun4,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =5.00006.0000fval =1.7876e-0123(2)目标函数的M文件function f=fun5(x)f=(x(1)^2+x(2)-11)^2+(x(1)+x(2)^2-7)^2调用求解命令>> x0=[1,1];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun5,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =3.0000 2.0000fval =5.2125e-0123(3)目标函数的M文件function f=fun6(x)f=[1.5-x(1)*(1-x(2))]^2+[2.25-x(1)*(1-x(2)^2)]^2+[2.625-x(1)*(1-x(2)^3)]^2调用求解命令x0=[2,0.2];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun6,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =3.0000 0.5000fval =3.9195e-0143(4)目标函数的M文件function f=fun7(x)f=(x(1)^2+12*x(2)-1)^2+(49*x(1)+49*x(2)+84*x(1)+2324*x(2)-681)^2调用求解命令x0=[1,1];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun7,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =0.9570 0.2333fval =7.37643(5)目标函数的M文件function f=fun8(x)f=(x(1)+10*x(2))^2+5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4调用求解命令>> x0=[3,-1,0,1];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun8,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =0.0015 -0.0002 -0.0031 -0.0031fval =6.3890e-009三、3、(1)目标函数的M文件function f=fun9(x)f=(x(1)-2)^2+(x(2)-1)^2约束函数的M文件function [c,cep]=con1(x)c=[x(1)^2-x(2);x(1)+x(2)-2];cep=[]当前窗口条用求解命令x0=[3,3];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun9,x0,[],[],[],[],[],[],@con1,options)Optimization terminated: first-order optimality measure less than options.TolFun and maximum constraint violation is less than options.TolCon.Active inequalities (to within options.TolCon = 1e-006):lower upper ineqlin ineqnonlin12x =1.0000 1.0000fval =1.00003、(2)目标函数的M文件function f=fun10(x)f=x(2)^3*[(x(1)-3)^2-9]/27*3^(1/2)约束函数的M文件function [c,cep]=con2(x)c=[x(2)-x(1)/3^(1/2);-x(1)+x(2)/3^(1/2);x(1)+x(2)/3^(1/2)-6];cep=[]当前窗口条用求解命令x0=[1,5];lb=[0,0];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun10,x0,[],[],[],[],lb,ub,@con2,options)Optimization terminated: first-order optimality measure lessthan options.TolFun and maximum constraint violation is lessthan options.TolCon.Active inequalities (to within options.TolCon = 1e-006):lower upper ineqlin ineqnonlin13x =4.5000 2.5981fval =-7.59383、(3)目标函数的M文件function f=fun11(x)f=1000-x(1)^2-2*x(2)^2-x(3)^2-x(1)*x(2)-x(1)*x(3)约束函数的M文件function [c,cep]=con3(x)c=[];cep=[x(1)^2+x(2)^2+x(3)^2-25;8*x(1)+14*x(2)+7*x(3)-56];当前窗口条用求解命令x0=[2,2,2];lb=[0,0,0];ub=[];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun11,x0,[],[],[],[],lb,ub,@con3,options)Optimization terminated: first-order optimality measure lessthan options.TolFun and maximum constraint violation is lessthan options.TolCon.No active inequalitiesx =3.5121 0.2170 3.5522fval =961.71523、(4)目标函数的M文件function f=fun12(x)f=100*(x(2)-x(1)^2)^2+(1-x(1))^2+90*(x(4)-x(3)^2)^2+(1-x(3))^2+10*[(x(2)-1) ^2+(x(4)-1)^2]+19.8*(x(2)-1)*(x(4)-1)约束函数的M文件function [c,cep]=con4(x)cep=[];当前窗口条用求解命令x0=[-3,-1,-3,-1,];lb=[-10,-10,-10,-10];ub=[10,10,10,10];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun12,x0,[],[],[],[],lb,ub,@con4,options)Optimization terminated: Magnitude of directional derivative in searchdirection less than 2*options.TolFun and maximum constraint violationis less than options.TolCon.No active inequalitiesx =1.0001 1.0002 0.9999 0.9997fval =2.3989e-007五、质疑和建议对于一维标量优化问题搜索,在当前窗口中调用求解命令时,[x,fval]=fminbnd(@fun1,lb,ub,options)可以改成[x,fval]=fminbnd(@fun1,-10,10)如下:function f=fun1(x)f=x^2-10*x+36调用求解命令x0=0;options=optimset('LargeScale','off');lb=-10;ub=10;[x,fval]=fminbnd(@fun1,lb,ub,options)或{ x0=0; [x,fval]=fminbnd(@fun1,-10,10)}x =5.0000fval =11.0000。

现代设计黄金分割法、复合形法实验报告

现代设计黄金分割法、复合形法实验报告

《现代设计理论与方法》实验报告一、实验目的机械优化设计是一门实践性较强的课程,学生通过实际上机计算可以达到以下目的:1.加深对机械优化设计方法的基本理论和算法步骤的理解;2.培养学生独立编制或调试计算机程序的能力;3.掌握常用优化方法程序的使用方法;4.培养学生灵活运用优化设计方法解决工程实际问题的能力。

二、实验项目、学时分配及对每个实验项目的要求序号实验项目学时实验要求1 黄金分割法2 1.明确黄金分割法基本原理、计算步骤及程序框图;2.编制或调试黄金分割法应用程序;3.用测试题对所编程序进行测试;4.撰写实验报告。

2 复合形法41.明确复合形法基本原理、计算步骤及程序框图等;2.编制或调试复合形法应用程序;3.用测试题对所编程序进行测试;4.撰写实验报告。

三、测试题1.黄金分割法程序测试题1) ,取,,程序如下:#include<stdio.h>#include<conio.h>#include<math.h>#define e 0.00001#define tt 0.01float function(float x){float y=pow(x,2)-10*x+36;//求解的一维函数 return(y);}void finding(float a[3],float f[3]){float t=tt,a1,f1,ia;int i;a[0]=0;//初始区间的下界值f[0]=function(a[0]);for(i=0;;i++){a[1]=a[0]+t;f[1]=function(a[1]);if(f[1]<f[0]) break;if(fabs(f[1]-f[0])>=e){t=-t;a[0]=a[1];f[0]=f[1];}else{if(ia==1) return;t=t/2;ia=1;}}for(i=0;;i++){a[2]=a[1]+t;f[2]=function(a[2]);if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if(a[0]>a[2]){a1=a[0];f1=f[0];a[0]=a[2];f[0]=f[2];a[2]=a1;f[2]=f1;}return;}float gold(float *ff){float a1[3],f1[3],a[4],f[4];float aa;int i;finding(a1,f1);a[0]=a1[0];f[0]=f1[0];a[3]=a1[2];f[3]=f1[2];a[1]=a[0]+0.382*(a[3]-a[0]);a[2]=a[0]+0.618*(a[3]-a[0]);f[1]=function(a[1]);f[2]=function(a[2]);for(i=0;;i++){if(f[1]>=f[2]){a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];a[2]=a[0]+0.618*(a[3]-a[0]);f[2]=function(a[2]);}else{a[3]=a[2];f[3]=f[2];a[2]=a[1];f[2]=f[1];a[1]=a[0]+0.382*(a[3]-a[0]);f[1]=function(a[1]);}if((a[3]-a[0])<e){aa=(a[1]+a[2])/2;*ff=function(aa);break;}}return(aa);}void main(){float xx, ff;xx=gold(&ff);printf("\n The Optimal Design Result Is:\n"); printf("\n\tx*=%f\n\tf*=%f", xx, ff);getch();}运行结果:2) ,取,,程序如下:#include<stdio.h>#include<conio.h>#include<math.h>#define e 0.00001#define tt 0.01float function(float x){float y=pow(x,4)-5*pow(x,3)+4*pow(x,2)-6*x+60;//求解的一维函数 return(y);}void finding(float a[3],float f[3]){float t=tt,a1,f1,ia;int i;a[0]=0;//初始区间的下界值f[0]=function(a[0]);for(i=0;;i++){a[1]=a[0]+t;f[1]=function(a[1]);if(f[1]<f[0]) break;if(fabs(f[1]-f[0])>=e){t=-t;a[0]=a[1];f[0]=f[1];}else{if(ia==1) return;t=t/2;ia=1;}}for(i=0;;i++){a[2]=a[1]+t;f[2]=function(a[2]); if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if(a[0]>a[2]){a1=a[0];f1=f[0];a[0]=a[2];f[0]=f[2];a[2]=a1;f[2]=f1;}return;}float gold(float *ff){float a1[3],f1[3],a[4],f[4];float aa;int i;finding(a1,f1);a[0]=a1[0];f[0]=f1[0];a[3]=a1[2];f[3]=f1[2];a[1]=a[0]+0.382*(a[3]-a[0]);a[2]=a[0]+0.618*(a[3]-a[0]);f[1]=function(a[1]);f[2]=function(a[2]);for(i=0;;i++){if(f[1]>=f[2]){a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];a[2]=a[0]+0.618*(a[3]-a[0]);f[2]=function(a[2]);}else{a[3]=a[2];f[3]=f[2];a[2]=a[1];f[2]=f[1];a[1]=a[0]+0.382*(a[3]-a[0]);f[1]=function(a[1]);}if((a[3]-a[0])<e){aa=(a[1]+a[2])/2;*ff=function(aa);break;}}return(aa);}void main(){float xx, ff;xx=gold(&ff);printf("\n The Optimal Design Result Is:\n");printf("\n\tx*=%f\n\tf*=%f", xx, ff);getch();}运行结果如下:3) ,其中,取,,程序如下:#include<stdio.h>#include<conio.h>#include<math.h>#define e 0.00001#define tt 0.01float function(float x){float y=(x+1)*pow((x-2),2);//求解的一维函数return(y);}void finding(float a[3],float f[3]){float t=tt,a1,f1,ia;int i;a[0]=0;//初始区间的下界值f[0]=function(a[0]);for(i=0;;i++){a[1]=a[0]+t;f[1]=function(a[1]); if(f[1]<f[0]) break;if(fabs(f[1]-f[0])>=e){t=-t;a[0]=a[1];f[0]=f[1];}else{if(ia==1) return;t=t/2;ia=1;}}for(i=0;;i++){a[2]=a[1]+t;f[2]=function(a[2]); if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if(a[0]>a[2]){a1=a[0];f1=f[0];a[0]=a[2];f[0]=f[2];a[2]=a1;f[2]=f1;}return;}float gold(float *ff){float a1[3],f1[3],a[4],f[4];float aa;int i;finding(a1,f1);a[0]=a1[0];f[0]=f1[0];a[3]=a1[2];f[3]=f1[2];a[1]=a[0]+0.382*(a[3]-a[0]);a[2]=a[0]+0.618*(a[3]-a[0]);f[1]=function(a[1]);f[2]=function(a[2]);for(i=0;;i++){if(f[1]>=f[2]){a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];a[2]=a[0]+0.618*(a[3]-a[0]);f[2]=function(a[2]);}else{a[3]=a[2];f[3]=f[2];a[2]=a[1];f[2]=f[1];a[1]=a[0]+0.382*(a[3]-a[0]);f[1]=function(a[1]);}if((a[3]-a[0])<e){aa=(a[1]+a[2])/2;*ff=function(aa);break;}}return(aa);}void main(){float xx, ff;xx=gold(&ff);printf("\n The Optimal Design Result Is:\n"); printf("\n\tx*=%f\n\tf*=%f", xx, ff);getch();}运行结果如下:2.复合形法程序测试题1)取:程序如下:#include "math.h"#include "stdio.h"#include "stdlib.h"#define E1 0.001#define ep 0.00001#define n 2#define k 4double af;int i,j;double X0[n],XX[n],X[k][n],FF[k];double a[n],b[n];double rm=2657863.0;double F(double C[n]){double F;F=pow(C[0]-2,2)+pow(C[1]-1,2);return F;}int cons(double D[n]){if((D[1]-pow(D[0],2)>=0)&&((2-D[0]-D[1])>=0)) return 1;elsereturn 0;}void bou(){a[0]=-5,b[0]=6;a[1]=-5,b[1]=8;}double r(){double r1,r2,r3,rr;r1=pow(2,35);r2=pow(2,36);r3=pow(2,37);rm=5*rm; if(rm>=r3){rm=rm-r3;}if(rm>=r2){rm=rm-r2;}if(rm>=r1){rm=rm-r1;}rr=rm/r1;return rr;}void produce(double A[n],double B[n]){int jj;double S;s1: for(i=0;i<n;i++){S=r();XX[i]=A[i]+S*(B[i]-A[i]);}if(cons(XX)==0){goto s1;}for(i=0;i<n;i++){X[0][i]=XX[i];}for(j=1;j<k;j++){for(i=0;i<n;i++){S=r();X[j][i]=A[i]+S*(B[i]-A[i]);}}for(j=1;j<k;j++){for(i=0;i<n;i++){X0[i]=0;for(jj=1;jj<j+1;jj++){X0[i]+=X[jj][i];}X0[i]=(1/j)*(X0[i]);}if(cons(X0)==0){goto s1;}for(i=0;i<n;i++){XX[i]=X[j][i];}while(cons(XX)==0){for(i=0;i<n;i++){X[j][i]=X0[i]+0.5*(X[j][i]-X0[i]); XX[i]=X[j][i];}}}}main(){double EE,Xc[n],Xh[n],Xg[n],Xl[n],Xr[n],Xs[n],w; int l,lp,lp1;bou();s111:produce(a,b);s222:for(j=0;j<k;j++){for(i=0;i<n;i++){XX[i]=X[j][i];}FF[j]=F(XX);}for(l=0;l<k-1;l++){for(lp=0;lp<k-1;lp++){lp1=lp+1;if(FF[lp]<FF[lp1]){w=FF[lp];FF[lp]=FF[lp1];FF[lp1]=w;for(i=0;i<n;i++){XX[i]=X[lp][i];X[lp][i]=X[lp1][i];X[lp1][i]=XX[i]; }}}}for(i=0;i<n;i++){Xh[i]=X[0][i];Xg[i]=X[l][i];Xl[i]=X[k-1][i];}for(i=0;i<n;i++){Xs[i]=0;for(j=0;j<k;j++){Xs[i]+=X[j][i];}Xs[i]=1/(k+0.0)*Xs[i];}EE=0;for(j=0;j<k;j++){EE+=pow((FF[j]-F(Xs)),2); }EE=pow((1/(k+0.0)*EE),0.5); if(EE<=E1){goto s333;}for(i=0;i<n;i++){Xc[i]=0;for(j=1;j<k;j++){Xc[i]+=X[j][i];}Xc[i]=1/(k-1.0)*Xc[i]; }if(cons(Xc)==1){af=1.3;ss:for(i=0;i<n;i++){Xr[i]=Xc[i]+af*(Xc[i]-Xh[i]); }if(cons(Xr)==1){if(F(Xr)>=F(Xh)){if(af<=ep){for(i=0;i<n;i++){Xh[i]=Xg[i];}af=1.3;goto ss;}else{af=1/2.0*af;goto ss;}}else{for(i=0;i<n;i++){X[0][i]=Xr[i];}goto s222;}}else{af=1/2.0*af;goto ss;}}else{for(i=0;i<n;i++){if(Xl[i]<Xc[i]){a[i]=Xl[i];b[i]=Xc[i];}else{a[i]=Xc[i];b[i]=Xl[i];}}goto s111;}s333:printf("F(Xmin)=%f\n",F(Xl));for(i=0;i<n;i++){printf("\n The X%d is %f.",i,Xl[i]); }}运行结果如下:2)取:程序如下:#include "math.h"#include "stdio.h"#include "stdlib.h"#define E1 0.001#define ep 0.00001#define n 4#define k 6double af;int i,j;double X0[n],XX[n],X[k][n],FF[k];double a[n],b[n];double rm=2657863.0;double F(double C[n]){double F;F=100*pow(C[1]-C[0],2)+pow(1-C[0],2)+90*pow(C[3]-(pow(C[2],2)),2)+pow(1-C[2],2)+10*(pow(C[0]-1,2)+pow(C[3]-1,2))+19.8*(C[1]-1)*(C[3]-1);return F;}int cons(double D[n]){if((D[0]>=-10)&&(D[1]>=-10)&&(D[2]>=-10)&&(D[3]>=-10)&&(D[0]<=10)&&(D[1]<=10)&&(D[2]<=10)&&(D[3]<=10))return 1;elsereturn 0;}void bou(){a[0]=-10,b[0]=10;a[1]=-10,b[1]=10;a[2]=-10,b[2]=10;a[3]=-10,b[3]=10;}double r(){double r1,r2,r3,rr;r1=pow(2,35);r2=pow(2,36);r3=pow(2,37);rm=5*rm;if(rm>=r3){rm=rm-r3;}if(rm>=r2){rm=rm-r2;}if(rm>=r1){rm=rm-r1;}rr=rm/r1;return rr;}void produce(double A[n],double B[n]){int jj;double S;s1: for(i=0;i<n;i++){S=r();XX[i]=A[i]+S*(B[i]-A[i]);}if(cons(XX)==0){goto s1;}for(i=0;i<n;i++){X[0][i]=XX[i];}for(j=1;j<k;j++){for(i=0;i<n;i++){S=r();X[j][i]=A[i]+S*(B[i]-A[i]); }}for(j=1;j<k;j++){for(i=0;i<n;i++){X0[i]=0;for(jj=1;jj<j+1;jj++){X0[i]+=X[jj][i];}X0[i]=(1/j)*(X0[i]);}if(cons(X0)==0){goto s1;}for(i=0;i<n;i++){XX[i]=X[j][i];}while(cons(XX)==0){for(i=0;i<n;i++){X[j][i]=X0[i]+0.5*(X[j][i]-X0[i]);XX[i]=X[j][i];}}}}main(){double EE,Xc[n],Xh[n],Xg[n],Xl[n],Xr[n],Xs[n],w; int l,lp,lp1;bou();s111:produce(a,b);s222:for(j=0;j<k;j++){for(i=0;i<n;i++){XX[i]=X[j][i];}FF[j]=F(XX);}for(l=0;l<k-1;l++){for(lp=0;lp<k-1;lp++){lp1=lp+1;if(FF[lp]<FF[lp1]){w=FF[lp];FF[lp]=FF[lp1];FF[lp1]=w;for(i=0;i<n;i++){XX[i]=X[lp][i];X[lp][i]=X[lp1][i];X[lp1][i]=XX[i]; }}}}for(i=0;i<n;i++){Xh[i]=X[0][i];Xg[i]=X[l][i];Xl[i]=X[k-1][i];}for(i=0;i<n;i++){Xs[i]=0;for(j=0;j<k;j++){Xs[i]+=X[j][i];}Xs[i]=1/(k+0.0)*Xs[i];}EE=0;for(j=0;j<k;j++){EE+=pow((FF[j]-F(Xs)),2);}EE=pow((1/(k+0.0)*EE),0.5);if(EE<=E1){goto s333;}for(i=0;i<n;i++){Xc[i]=0;for(j=1;j<k;j++){Xc[i]+=X[j][i];}Xc[i]=1/(k-1.0)*Xc[i];}if(cons(Xc)==1){af=1.3;ss:for(i=0;i<n;i++){Xr[i]=Xc[i]+af*(Xc[i]-Xh[i]); }if(cons(Xr)==1){if(F(Xr)>=F(Xh)){if(af<=ep){for(i=0;i<n;i++){Xh[i]=Xg[i];}af=1.3;goto ss;}else{af=1/2.0*af;goto ss;}}else{for(i=0;i<n;i++){X[0][i]=Xr[i];}goto s222;}}else{af=1/2.0*af;goto ss;}}else{for(i=0;i<n;i++){if(Xl[i]<Xc[i]){a[i]=Xl[i];b[i]=Xc[i];}else{a[i]=Xc[i];b[i]=Xl[i];}}goto s111;}s333:printf("F(Xmin)=%f\n",F(Xl));for(i=0;i<n;i++){printf("\n The X%d is %f.",i,Xl[i]); }}运行结果下:3)取:程序如下:#include "math.h"#include "stdio.h"#include "stdlib.h"#define E1 0.001#define ep 0.00001#define n 2#define k 4double af;int i,j;double X0[n],XX[n],X[k][n],FF[k];double a[n],b[n];double rm=2657863.0;double F(double C[n]){double F;F=pow(C[0],2)+pow(C[1],2)-C[0]*C[1]-10*C[0]-4*C[1]+60; return F;}int cons(double D[n]){if((D[0]>=0)&&(D[1]>=0)&&(6-D[0]>=0)&&(8-D[1]>=0)) return 1;elsereturn 0;}void bou(){a[0]=0,b[0]=6;a[1]=0,b[1]=8;}double r(){double r1,r2,r3,rr;r1=pow(2,35);r2=pow(2,36);r3=pow(2,37);rm=5*rm;if(rm>=r3){rm=rm-r3;}if(rm>=r2){rm=rm-r2;}if(rm>=r1){rm=rm-r1;}rr=rm/r1;return rr;void produce(double A[n],double B[n]) {int jj;double S;s1: for(i=0;i<n;i++){S=r();XX[i]=A[i]+S*(B[i]-A[i]);}if(cons(XX)==0){goto s1;}for(i=0;i<n;i++){X[0][i]=XX[i];}for(j=1;j<k;j++){for(i=0;i<n;i++){S=r();X[j][i]=A[i]+S*(B[i]-A[i]);}}for(j=1;j<k;j++){for(i=0;i<n;i++){X0[i]=0;for(jj=1;jj<j+1;jj++){X0[i]+=X[jj][i];X0[i]=(1/j)*(X0[i]);}if(cons(X0)==0){goto s1;}for(i=0;i<n;i++){XX[i]=X[j][i];}while(cons(XX)==0){for(i=0;i<n;i++){X[j][i]=X0[i]+0.5*(X[j][i]-X0[i]);XX[i]=X[j][i];}}}}main(){double EE,Xc[n],Xh[n],Xg[n],Xl[n],Xr[n],Xs[n],w; int l,lp,lp1;bou();s111:produce(a,b);s222:for(j=0;j<k;j++){for(i=0;i<n;i++){XX[i]=X[j][i];FF[j]=F(XX);}for(l=0;l<k-1;l++){for(lp=0;lp<k-1;lp++){lp1=lp+1;if(FF[lp]<FF[lp1]){w=FF[lp];FF[lp]=FF[lp1];FF[lp1]=w;for(i=0;i<n;i++){XX[i]=X[lp][i];X[lp][i]=X[lp1][i];X[lp1][i]=XX[i]; }}}}for(i=0;i<n;i++){Xh[i]=X[0][i];Xg[i]=X[l][i];Xl[i]=X[k-1][i];}for(i=0;i<n;i++){Xs[i]=0;for(j=0;j<k;j++){Xs[i]+=X[j][i];}Xs[i]=1/(k+0.0)*Xs[i];}EE=0;for(j=0;j<k;j++){EE+=pow((FF[j]-F(Xs)),2);}EE=pow((1/(k+0.0)*EE),0.5);if(EE<=E1){goto s333;}for(i=0;i<n;i++){Xc[i]=0;for(j=1;j<k;j++){Xc[i]+=X[j][i];}Xc[i]=1/(k-1.0)*Xc[i];}if(cons(Xc)==1){af=1.3;ss:for(i=0;i<n;i++){Xr[i]=Xc[i]+af*(Xc[i]-Xh[i]); }if(cons(Xr)==1){if(F(Xr)>=F(Xh)){if(af<=ep){for(i=0;i<n;i++){Xh[i]=Xg[i];}af=1.3;goto ss;}else{af=1/2.0*af;goto ss;}}else{for(i=0;i<n;i++){X[0][i]=Xr[i];}goto s222;}}else{af=1/2.0*af;goto ss;}}else{for(i=0;i<n;i++){if(Xl[i]<Xc[i]){a[i]=Xl[i];b[i]=Xc[i];} else{a[i]=Xc[i];b[i]=Xl[i];}}goto s111;}s333:printf("F(Xmin)=%f\n",F(Xl));for(i=0;i<n;i++){printf("\n The X%d is %f.",i,Xl[i]);}}运行结果如下:四、实验心得与体会1.通过本次实验熟悉了黄金分割法与复合形法上机步骤。

机械优化设计实验报告

机械优化设计实验报告

机械优化设计实验报告机械优化设计实验报告引言机械优化设计是一门重要的工程学科,旨在通过优化设计方法,提高机械系统的性能和效率。

本实验旨在通过对某一机械系统的优化设计,探索并验证优化设计的有效性和可行性。

实验目的本实验的主要目的是通过对某一机械系统进行优化设计,提高其性能和效率。

具体而言,我们将通过改变材料、几何形状等参数,寻找最佳设计方案,并通过实验验证其优化效果。

实验方法1. 确定优化目标:首先,我们需要明确机械系统的优化目标,例如提高系统的强度、降低系统的重量等。

2. 确定设计变量:根据机械系统的特点,确定需要进行优化的设计变量,例如材料的选择、零件的几何形状等。

3. 建立数学模型:根据机械系统的结构和运行原理,建立数学模型,用于优化设计的计算和分析。

4. 优化设计:使用优化算法,例如遗传算法、粒子群算法等,对机械系统进行优化设计,得到最佳设计方案。

5. 实验验证:根据最佳设计方案,制作实际样品,并进行实验验证,比较实验结果与模型计算结果的一致性。

实验结果经过优化设计和实验验证,我们得到了以下结果:1. 材料优化:通过对不同材料的比较,我们发现材料A具有更好的强度和耐久性,因此在最佳设计方案中选择了材料A。

2. 几何形状优化:通过对不同几何形状的比较,我们发现几何形状B具有更好的流体动力学性能,因此在最佳设计方案中采用了几何形状B。

3. 性能提升:通过与原设计方案进行对比,我们发现最佳设计方案在强度和效率方面都有显著提升,验证了优化设计的有效性。

讨论与分析通过本实验,我们可以得出以下结论:1. 机械优化设计可以显著提高机械系统的性能和效率,为工程设计提供了有力的支持。

2. 优化设计需要综合考虑多个因素,如材料、几何形状等,以达到最佳设计效果。

3. 优化设计的结果需要通过实验验证,以确保其可行性和有效性。

结论本实验通过对某一机械系统的优化设计,验证了机械优化设计的有效性和可行性。

通过改变材料、几何形状等参数,我们成功提高了机械系统的性能和效率。

(完整word版)机械优化设计实验报告(word文档良心出品)

(完整word版)机械优化设计实验报告(word文档良心出品)

《机械优化设计》实验报告目录1.进退法确定初始区间 (3)1.1 进退法基本思路 (3)1.2 进退法程序框图 (3)1.3 题目 (3)1.4 源程序代码及运行结果 (3)2.黄金分割法 (4)2.2黄金分割法流程图 (4)2.3 题目 (5)2.4 源程序代码及结果 (5)3.牛顿型法 (5)3.1牛顿型法基本思路 (6)3.2 阻尼牛顿法的流程图 (6)3.3 题目 (6)3.4 源程序代码及结果 (6)4.鲍威尔法 (7)4.1 鲍威尔法基本思路 (7)4.2 鲍威尔法流程图 (7)4.3 题目 (8)4.4 源程序代码及结果 (8)5. 复合形法 (15)5.1 复合行法基本思想 (15)5.3 源程序代码及结果 (15)6. 外点惩罚函数法 (23)6.1解题思路: (23)6.2 流程框图 (23)6.3 题目 (23)6.4 源程序代码及结果 (23)7.机械设计实际问题分析 (29)7.2计算过程如下 (29)7.3 源程序编写 (30)8.报告总结 (32)1.进退法确定初始区间1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。

1.2 进退法程序框图1.3 题目:用进退法求解函数()2710=-+的搜索区间f x x x1.4 源程序代码及运行结果#include <stdio.h>#include <math.h>main(){float h,h0,y1,y2,y3,a1=0,a2,a3,fa2,fa3;scanf("h0=%f,y1=%f",&h0,&y1);h=h0;a2=h;y2=a2*a2-7*a2+10;if (y2>y1){h=-h;a3=a1;y3=y1;loop:a1=a2;y1=y2;a2=a3;y2=y3;}a3=a2+2*h;y3=a3*a3-7*a3+10;if (y3<y2){goto loop;}elseprintf("a1=%f,a2=%f,a3=%f,y1=%f,y2=%f,y3=%f\n",a1,a2,a3,y1,y2,y3);} 搜索区间为0 62.黄金分割法2.1黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。

合肥工业大学《机械优化设计》课程实践报告

合肥工业大学《机械优化设计》课程实践报告

合肥工业大学《机械优化设计》课程实践研究报告班级:学号:姓名:授课教师:日期:2016年11 月7 日目录作业要求 (2)一、λ=0.618的证明、一维搜索程序作业 (3)1、0.618法的基本思想 (3)2、关于0.618法中参数λ=0.618的证明 (4)3、一维搜索程序作业 (5)二、单位矩阵程序作业 (8)三、注释最佳再现给定运动规律连杆机构优化设计 (10)问题模型子程序 (10)四、连杆机构问题+其他工程优化问题 (12)1、连杆机构问题 (12)2、其他工程问题: (15)五、课程实践心得体会 (18)作业要求1、λ=0.618的证明、一维搜索程序作业;2、单位矩阵程序作业;3、注释最佳再现给定运动规律连杆机构优化设计问题模型子程序;4、连杆机构问题 + 自行选择小型机械设计问题或其他工程优化问题;(1)分析优化对象,根据设计问题的要求,选择设计变量,确立约束条件,建立目标函数,建立优化设计的数学模型并编制问题程序;(2)选择适当的优化方法,简述方法原理,进行优化计算; (3)进行结果分析,并加以说明。

5、写出课程实践心得体会,附列程序文本。

一、λ=0.618的证明、一维搜索程序作业1、0.618法的基本思想“0.618法”,又称为黄金分割法,是常用的一种一维搜索试探方法,适用于[,]a b 区间上的任何单调函数求极小值问题。

0.618法是建立在区间消去法原理基础上的试探方法,即在搜索区间[,]a b 内适当插入两点1a 、1b ,且11a b ,如下图所示。

通过比较函数值1()f a 与1()f b 的大小,应用函数的单调性,可得出以下两种情况:1) 若11()()f a f b <,则取1[,]a b 为缩短后的区间。

2) 若11()()f a f b >,则取1[,]a b 为缩短后的区间。

然后在保留下来的区间上进行同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。

《机械优化设计》课程实践报告

《机械优化设计》课程实践报告

《机械优化设计》课程实践报告(课程实践报告封⾯模版)合肥⼯业⼤学《机械优化设计》课程实践研究报告班级:机设10 -04学号: 20100495姓名:李健授课⽼师:王卫荣⽇期: 2012年⽉⽇⽬录⼀主要内容1、⼀维搜索程序作业A.λ = 0.618的证明 (1)B.编写⽤0.618法求函数极⼩值的程序 (2)2、单位矩阵程序作业 (4)3、其他⼯程优化问题 (9)4连杆机构问题 (12)⼆实践⼼得体会 (15)⼀: 主要内容1. ⼀维搜索程序作业:A.λ = 0.618的证明 (y2 > y1)证明:0.618法要求插⼊点α1、α 2 的位置相对于区间 [a,b] 两端点具有对称性,即已知a1=a2 , 要求α11=α22由于α1=b-λ(b-a)α2=a+λ(b-a)若使α11=α22则有:b1-λ(b1-a1)=a2+λ(b2-a2)= a1+λ2(b1-a1)因此: b1- a1=(λ2+λ)( b1- a1)( b1- a1)(λ2+λ-1)=0因为: b1= a1所以: λ2+λ-1=0则有: 取⽅程正数解得若保留下来的区间为 [α1,b] ,根据插⼊点的对称性,也能推得同样的λ的值。

其0.618法的程序框图如下:B.编写⽤0.618法求函数极⼩值的程序例:(1)a=0 ,b=2π,f(x)=cox(x)(2)a=0 ,b=10, f(x)=(x-2)2+3(1)#include#includevoid main(void){int i;float a1,a2,aa,y1,y2,ymin,e;float a=0,b=2*3.14159,n=0.618;a1=b-n*(b-a);a2=a+n*(b-a);print(“输⼊精度:”);scanf(“%f”,&e);for(i=0;i=10000;i=i++){y1=cos(a1);y2=cos(a2);if(y1{a=a1;a1=a2;a2=a+n*(b-a);}If(y1b=a2;a2=a1;a1=b-n*(b-a);}if(fabs(b-a)/b{aa=(a+b)/2;ymin=cos(aa);printf(“x=%7.4f\tf(x)=%7.4f\n”),aa,ymin); break;}}}运⾏结果:(2)#include#includevoid main(void){int i;float a1,a2,aa,y1,y2,ymin,e; float a=0,b=10,n=0.618;a1=b-n*(b-a);a2=a+n*(b-a);print(“输⼊精度:”);scanf(“%f”,&e);for(i=0;i=10000;i=i++){y1=(a1-2)*(a1-2)+3; y2=(a2-2)*(a2-2)+3; if(y1>=y2){a=a1;a1=a2;a2=a+n*(b-a);}If(y1b=a2;a2=a1;a1=b-n*(b-a);}if(fabs(b-a)/b{aa=(a+b)/2;ymin=(aa-2)*(aa-2)+3;printf(“x=%6.3f\tf(x)=%6.3f\n”),aa,ymin); break;}}}运⾏结果:2.单位矩阵程序作业编写⽣成单位矩阵的程序程序⽂本#includevoid main(void){int a[100][100];int N,i,j;printf("请输⼊所要输出矩阵的阶数(最多100阶):"); scanf("%d",&N);printf("输出的矩阵阶数为%d\n",N);printf(" N "); /*****制作表头*****/ for(i=0;iprintf("%3d",i+1);printf("\n");for(i=0;iprintf("---"); /*****分割线*****/ printf("\n");for(i=0;i<100;i++) /*****数组赋值*****/ for(j=0;j<100;j++) {if(i==j)a[i][j]=1;elsea[i][j]=0;}for(i=0;iprintf("%2d:",i+1); /*****纵列序号*****/for(j=0;j{printf("%3d",a[i][j]);}printf("\n");}}结果显⽰从键盘输⼊9,显⽰9阶单位矩阵,结果如下3. 其他⼯程优化问题有⼀箱形盖板,已知长度L=600mm ,宽度b=60mm ,厚度t s =0.5mm 承受最⼤单位载荷q=60N/cm ,设箱形盖板的材料为铝合⾦,其弹性模量MPa E 4107?=,泊松⽐3.0=µ,许⽤弯曲应⼒[]MPa 70=σ,许⽤剪应⼒[]MPa 45=τ,要求在满⾜强度、刚度和稳定性条件下,设计重量最轻的结构⽅案。

机械优化设计-复合型法

机械优化设计-复合型法
double a[]={0,0},b[]={10,20},f,x[2],xcom[2][100];
comple(2,3,3,0.00001,x,a,b,xcom,&f);
printf(" \n\n\n输出最优解及目标函数值:\n");
printf("\n x1=%.5f x2=%.5f f(x1,x2)=%.5f\n\n ",x[0],x[1],f);
(一)题目:用复合形法求约束优化问题
; ; 的最优解。
基本思路:在可行域中构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。
{
xs=0;
for(l=0;l<ll;l++)
{
if(l!=lΒιβλιοθήκη )xs=xs+xcom[i][l];
}
if(lh>-1)
x0[i]=xs/(ll-1);
else
x0[i]=xs/ll;
}
}
void fxse(int n,int k,double x[],double xcom[][100],double fxk[])
iw=gau(x,g,kg);
if(iw==0)
goto s5;
for(i=0;i<n;i++)
xcom[i][0]=x[i];
for(l=1;l<k;l++)
for(i=0;i<n;i++)

复合形法

复合形法

太原理工大学机械学院机测系课程上机实验报告课程名称:机械优化设计班级日期成绩评定姓名实验室老师签名实验名称用复合形法程序解题所用软件C++ DEV实验目的及内容实验目的:1.掌握并能够建立最优化基本类型问题的数学模型。

2.掌握最优化方法的基本概念、基本理论和基本方法,奠定最优化的理论基础。

3.能够熟练编制和调试最优化方法的程序,奠定解决实际中的优化问题的基础实验内容:理解复合形法并编写相关程序求其最优解。

1)2221)1()2()(min-+-=xxXF)(..2121≥-=xxXgt s2)(212≥--=xxXg取:321104]85[]65[-==-∈-∈εkxx实验原理:实验原理步骤、实验步骤:1,画流程图,编写程序;2,将目标函数代入;3,编译运行,将结果保存实验结果及分析**********复合形法计算结果**********本次优化的上下限为:a=[ -5.000, 6.000]b=[ -5.000, 8.000]初始复合形各顶点坐标及函数值:x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.9139073], f( 1)= 83.9742994x( 2)=[ -5.0000000, 6.9560839], f( 2)= 84.4749350x( 3)=[ -5.0000000, 6.9535330], f( 3)= 84.4445555最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.942570812迭代轮数k= 1x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.9139073], f( 1)= 83.9742994x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.9535330], f( 3)= 84.4445555最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.790313540迭代轮数k= 2x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.9139073], f( 1)= 83.9742994x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 1.158796098迭代轮数k= 3x( 0)=[ -5.0000000, 6.8509781], f( 0)= 83.2339449x( 1)=[ -5.0000000, 6.6907175],f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 1.326082257迭代轮数k= 4x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.6907175], f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.8412118], f( 2)= 83.1197550x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 1.284620848迭代轮数k= 5x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.6907175], f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.7584149], f( 3)= 82.1593422最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 1.843865066迭代轮数k= 6x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.6907175], f( 1)= 81.3842661x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 1.889592676迭代轮数k= 7x( 0)=[ -5.0000000, 6.6496590], f( 0)= 80.9186469x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 2.100384836迭代轮数k= 8x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.5154981], f( 2)= 79.4207197x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 2.741206122迭代轮数k= 9x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 6.4368979], f( 3)= 78.5598586最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 2.738219360迭代轮数k= 10x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 6.3303094], f( 1)= 77.4121981x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 3.274442715迭代轮数k= 11x( 0)=[ -5.0000000, 6.1388508], f( 0)= 75.4077872x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 3.840859862迭代轮数k= 12x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 6.0244969], f( 2)= 74.2455693x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 3.914810890迭代轮数k= 13x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 5.8105032], f( 3)= 72.1409408最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 4.655786221迭代轮数k= 14x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 5.5505501], f( 1)= 69.7075064x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 4.977492567迭代轮数k= 15x( 0)=[ -5.0000000, 5.3484158], f( 0)= 67.9087203x( 1)=[ -5.0000000, 4.2432084], f( 1)= 59.5184005x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 5.130175009迭代轮数k= 16x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 4.2432084], f( 1)= 59.5184005x( 2)=[ -5.0000000, 4.9787470], f( 2)= 64.8304278x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 5.591111034迭代轮数k= 17x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 4.2432084], f( 1)= 59.5184005x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 4.6192591], f( 3)= 62.0990368最低和最高顶点号:L= 2, H= 3复合形顶点值均方差: 5.383097686迭代轮数k= 18x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 4.2432084],f( 1)= 59.5184005x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 3, H= 1复合形顶点值均方差: 5.032530479迭代轮数k= 19x( 0)=[ -5.0000000, 3.6586572], f( 0)= 56.0684582x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 1, H= 0复合形顶点值均方差: 4.075033247迭代轮数k= 20x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 3.1271579], f( 2)= 53.5248005x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 2.445955398迭代轮数k= 21x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, -0.4348017], f( 2)= 51.0586558x( 3)=[ -5.0000000, 2.4505477], f( 3)= 51.1040888最低和最高顶点号:L= 0, H= 3复合形顶点值均方差: 1.421455082迭代轮数k= 22x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, -0.4348017], f( 2)= 51.0586558x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差: 1.090233677迭代轮数k= 23x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 2.3328587], f( 2)= 50.7765122x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.963931643迭代轮数k= 24x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, -0.2482854], f( 2)= 50.5582165x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.869333822迭代轮数k= 25x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 2.0903875], f( 2)= 50.1889450x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.718762840迭代轮数k= 26x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 0.3389249], f( 2)= 49.4370204x( 3)=[ -5.0000000, 0.0206951], f( 3)= 49.9590382最低和最高顶点号:L= 0, H= 3复合形顶点值均方差:0.490383508迭代轮数k= 27x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 0.3389249], f( 2)= 49.4370204x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 0, H= 2复合形顶点值均方差:0.222366457迭代轮数k= 28x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 1.5650406], f( 1)= 49.3192709x( 2)=[ -5.0000000, 1.5304375], f( 2)= 49.2813639x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 0, H= 1复合形顶点值均方差:0.166131819迭代轮数k= 29x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 1.5304375], f( 2)= 49.2813639x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 1, H= 2复合形顶点值均方差:0.137913956迭代轮数k= 30x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 0.6201420], f( 2)= 49.1442921x( 3)=[ -5.0000000, 1.4296473], f( 3)= 49.1845968最低和最高顶点号:L= 1, H= 3复合形顶点值均方差:0.086897399迭代轮数k= 31x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 0.6201420], f( 2)= 49.1442921x( 3)=[ -5.0000000, 0.5917880], f( 3)= 49.1666371最低和最高顶点号:L= 1, H= 3复合形顶点值均方差:0.079891031迭代轮数k= 32x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 0.6201420], f( 2)= 49.1442921x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 3, H= 2复合形顶点值均方差:0.070394704迭代轮数k= 33x( 0)=[ -5.0000000, 0.7198510], f( 0)= 49.0784834x( 1)=[ -5.0000000, 0.7867313],f( 1)= 49.0454835x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.046304162迭代轮数k= 34x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 0.7867313], f( 1)= 49.0454835x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 2, H= 1复合形顶点值均方差:0.025163811迭代轮数k= 35x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.1229312], f( 1)= 49.0151121x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.8611643], f( 3)= 49.0192754最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.013205196迭代轮数k= 36x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.1229312], f( 1)= 49.0151121x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 1.1129387], f( 3)= 49.0127552最低和最高顶点号:L= 2, H= 1复合形顶点值均方差:0.011065035迭代轮数k= 37x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 1.1129387], f( 3)= 49.0127552最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.008121836迭代轮数k= 38x( 0)=[ -5.0000000, 1.1012143], f( 0)= 49.0102443x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.005268438迭代轮数k= 39x( 0)=[ -5.0000000, 0.9159881], f( 0)= 49.0070580x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.003755703迭代轮数k= 40x( 0)=[ -5.0000000, 1.0838142], f( 0)= 49.0070248x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.003740303迭代轮数k= 41x( 0)=[ -5.0000000, 0.9272981], f( 0)= 49.0052856x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002951093迭代轮数k= 42x( 0)=[ -5.0000000, 1.0691112], f( 0)= 49.0047764x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002729299迭代轮数k= 43x( 0)=[ -5.0000000, 0.9368551], f( 0)= 49.0039873x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002398513迭代轮数k= 44x( 0)=[ -5.0000000, 1.0566871], f( 0)= 49.0032134x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002095651迭代轮数k= 45x( 0)=[ -5.0000000, 0.9449307], f( 0)= 49.0030326x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.002029012迭代轮数k= 46x( 0)=[ -5.0000000, 1.0461888], f( 0)= 49.0021334x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9464393], f( 3)= 49.0028688最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.001729933迭代轮数k= 47x( 0)=[ -5.0000000, 1.0461888], f( 0)= 49.0021334x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 1.0468300], f( 3)= 49.0021930最低和最高顶点号:L= 2, H= 3复合形顶点值均方差:0.001471563迭代轮数k= 48x( 0)=[ -5.0000000, 1.0461888], f( 0)= 49.0021334x( 1)=[ -5.0000000, 1.0113408],f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9901944], f( 3)= 49.0000961最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.001025689迭代轮数k= 49x( 0)=[ -5.0000000, 0.9758200], f( 0)= 49.0005847x( 1)=[ -5.0000000, 1.0113408], f( 1)= 49.0001286x( 2)=[ -5.0000000, 1.0090879], f( 2)= 49.0000826x( 3)=[ -5.0000000, 0.9901944], f( 3)= 49.0000961最低和最高顶点号:L= 2, H= 0复合形顶点值均方差:0.000252186*********************复合形法优化最优点及目标函数值为:x( *)=[ -5.0000000, 1.0090879], f( *)= 49.0000826迭代精度:0.000252186本次优化最终迭代次数为:49算法程序实现//*复合形法求仅有不等式的非线性最优化问题**/#include <math.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 2 /*给出优化问题的维数N*/#define K 4 /*给出复合形法顶点数K*/#define N1 5 /*给出约束方程个数K*/#define E 0.0000001 /*复合形法迭代精度*/#define NM 500 /*寻找初始复合形的最大次数*/FILE *fp;char outname[50]="复合形法计算结果.txt"; /*输出文件名*/int H=0,L=0; /*H,L--复合形顶点最大和最小值顶点号*/ double f[K]; /*本程序顶点值从f[0]开始*/struct{double x1[N]; /* double x2; 改为数组方式*/}Tpoint[K],xc,xr; /*Tpoint存放K个点的坐标,xc,xr分别为中心点和影射点坐标*//*目标函数子程序*/double function(double x[]){double zhi;zhi=(x[0]-2)(x[0]-2)+(x[1]-1)*(x[1]-1);return(zhi);}/*约束条件子程序*/int strain(double x[]){int i,fin=1;double g[N1];g[0]=x[1]-x[0]*x[0];g[1]=2-x[0]-x[1];for(i=0;i<N1;i++)if(g[i]≥0.){fin=0;break;}return(fin);}/*初始可行点产生区间*/void startab(double a[],double b[]){a[0]=-5.0;b[0]=6.0;a[1]=-5.0;b[1]=8.0;return;}/***********以上为修改部分***********//*输出当前迭代点坐标及目标函数值*/double xfout(double x[],int m){int j;double f;f=function(x);fprintf(fp," x(%3d)=[",m);for(j=0;j<N-1;j++)fprintf(fp,"%15.7lf,",x[j]);fprintf(fp,"%15.7lf], f(%3d)=%15.7lf\n",x[N-1],m,f);return f;}/**初始复合形****/int startfhx(double a[],double b[],int num){int i,i1,iw,kk=0;int j,j1,m,fh1=1;double sum2[N],sum3,delt1=0.01;double alf,r;srand( (unsigned)time( NULL ) ); /*种子函数*/do /*自动产生第一个可行点*/{for(i=0;i<N;i++){r=rand()/32767.; /*直接调用函数产生随机数*/Tpoint[0].x1[i]=a[i]+r*(b[i]-a[i]);}iw=strain(Tpoint[0].x1);kk=kk+1;if(kk>num){printf("找不到初始可行点,可能初始区间不合适!\n");fh1=2;return(fh1);}}while(iw==0);for(j=1;j<K;j++) /*产生其余个可行点*/{do{sum3=1.;for(i=0;i<N;i++){r=rand()/32767.; /*直接调用函数产生随机数*/Tpoint[j].x1[i]=a[i]+r*(b[i]-a[i]);}iw=strain(Tpoint[j].x1);if(iw==0){m=j;for(i1=0;i1<N;i1++)sum2[i1]=0.;for(i1=0;i1<N;i1++) /*求前j-1个顶点中心*/for(j1=0;j1<m;j1++)sum2[i1]+=Tpoint[j1].x1[i1];for(j1=0;j1<N;j1++)xc.x1[j1]=sum2[j1]/m;alf=0.5;do /*求中心的映射点*/{for(i=0;i<N;i++)Tpoint[m].x1[i]=xc.x1[i]+alf*(Tpoint[m].x1[i]-xc.x1[i]);sum3=0.;for(i1=0;i1<N;i1++)sum3+=(Tpoint[m].x1[i1]-xc.x1[i1])*(Tpoint[m].x1[i1]-xc.x1[i1]);sum3=sqrt(sum3);iw=strain(Tpoint[m].x1);}while(iw==0&&sum3>delt1);}}while(sum3<delt1);}return(fh1);}void suan() /*计算值并找出最好点和最差点*/{double max,min;int i;for(i=0;i<K;i++)f[i]=function(Tpoint[i].x1);max=f[0];min=f[0];H=0;L=0;for(i=1;i<K;i++){if(f[i]>max){max=f[i];H=i;}elseif(f[i]<min){min=f[i];L=i;}}return;}void suan1() /*找出次坏点*/{double min;int i,ih;min=f[L];ih=0;for(i=0;i<K;i++){if(i==H) continue;if(f[i]>min){min=f[i];ih=i;}}H=ih;return;}double panbie() /*检验迭代终止条件*/{double sum=0.0,temp;int i;for(i=0;i<K;i++)sum+=(f[i]-f[L])*(f[i]-f[L]);temp=sqrt(sum/K);return(temp);}int newfhx(double a[],double b[]){int i,j,fh1=1,chd=0;double sum1[N];double alfa; /**映射系数**/do{alfa=1.3;for(j=0;j<N;j++)sum1[j]=0.0;for(i=0;i<K;i++){if(i==H)continue;else{for(j=0;j<N;j++)sum1[j]+=Tpoint[i].x1[j];}}for(j=0;j<N;j++)xc.x1[j]=sum1[j]/(K-1);if(!(strain(xc.x1))){printf("xc is wrong非凸集\n");fh1=3;for(i=0;i<N;i++){a[i]=Tpoint[L].x1[i];b[i]=xc.x1[i];}return(fh1);}for(j=0;j<N;j++)xr.x1[j]=xc.x1[j]+alfa*(xc.x1[j]-Tpoint[H].x1[j]);while(!(strain(xr.x1))||(function(xr.x1)>=function(Tpoint[H].x1))){alfa=alfa*0.5;for(j=0;j<N;j++)xr.x1[j]=xc.x1[j]+alfa*(xc.x1[j]-Tpoint[H].x1[j]);if(alfa<E){if(chd==0){suan1(); /*寻找次坏点*/alfa=1.3;chd=1;break;}elsereturn(4);}}}while(chd==1);for(j=0;j<N;j++)Tpoint[H].x1[j]=xr.x1[j]; /**/return(fh1);}void main(){int i,val1,val2,dds,nmax;double a[N],b[N],fv;nmax=NM;fp=fopen(outname,"w");fprintf(fp,"**********复合形法计算结果**********\n\n");startab(a,b);fprintf(fp,"本次优化的上下限为:\n");fprintf(fp," a=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",a[i]);fprintf(fp,"%8.3f]\n",a[N-1]);fprintf(fp," b=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",b[i]);fprintf(fp,"%8.3f]\n",b[N-1]);do{val2=1;dds=1;val1=startfhx(a,b,nmax);if(val1==2)fprintf(fp,"找不到初始可行点,可能初始区间不合适!\n");else{fprintf(fp,"初始复合形各顶点坐标及函数值:\n");for(i=0;i<K;i++)fv=xfout(Tpoint[i].x1,i);suan();fprintf(fp," 最低和最高顶点号:L=%2d, H=%2d\n",L,H);fprintf(fp,"复合形顶点值均方差:%15.9lf\n\n",panbie());while(panbie()>E){val2=newfhx(a,b);if(val2==3){fprintf(fp,"该优化问题可行域为非凸集,");fprintf(fp,"重新给出优化的上下限为:\n");fprintf(fp,"a=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",a[i]);fprintf(fp,"%8.3f]\n",a[N-1]);fprintf(fp,"b=[");for(i=0;i<N-1;i++)fprintf(fp,"%8.3f,",b[i]);fprintf(fp,"%8.3f]\n",b[N-1]);break;}suan();fprintf(fp,"迭代轮数k=%3d \n",dds);for(i=0;i<K;i++)fv=xfout(Tpoint[i].x1,i);fprintf(fp," 最低和最高顶点号:L=%2d, H=%2d\n",L,H);fprintf(fp,"复合形顶点值均方差:%15.9lf\n\n",panbie());dds++;}}}while(val2==3&&val1!=2);if(val2==4){fprintf(fp,"对次坏点的影射仍然无法找到下一个");fprintf(fp,"复合形顶点,计算终止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

fxk[l]=fx;
}
it=0;
s14: it=it+1;
printf("\n\n\n N= %2d\n",it);
lh=-1;
xcent(n,k,k,lh,x0,xcom);
fx0=objfx(x0);
iw=gau(x0,g,kg);
for(i=0;i<n;i++)
printf("
X(%d)min=%.5f ",i+1,x0[i]);
int gau(double x[],double g[],int kg) {
int i; constraint(x,g); for(i=0;i<kg;i++) {
if(g[i]>0)
goto s33; } return 1; s33:return 0; } void xcent(int n,int k,int ll,int lh,double x0[],double xcom[][100]) { int i,l; double xs; for(i=0;i<n;i++) { xs=0; for(l=0;l<ll;l++) {
bu[], double xcom[][100],double *f) {
int i,iw,l,ll,lh,it; double fx,fx0,sdx,fxh,fxr,alp; double *x0=(double*)calloc(n,sizeof(double)); double *xh=(double*)calloc(n,sizeof(double)); double *xr=(double*)calloc(n,sizeof(double)); double *fxk=(double*)calloc(k,sizeof(double)); double *g=(double*)calloc(kg,sizeof(double)); s5: for(i=0;i<n;i++)
四.程序结果
bu[], double xcom[][100],double *f) ;
double a[]={0,0},b[]={10,20},f,x[2],xcom[2][100];
comple(2,3,3,0.00001,x,a,b,xcom,&f); printf(" \n\n\n 输出最优解及目标函数值:\n"); printf("\n x1=%.5f x2=%.5f f(x1,x2)=%.5f\n\n ",x[0],x[1],f); } #include <stdlib.h> #include <math.h> #include <stdio.h> double objfx(double x[]); void constraint(double x[],double g[]); void constraint(double x[],double g[]) { g[0]=64-x[0]*x[0]-x[1]*x[1]; g[1]=x[1]-x[0]-10; g[2]=x[0]-10; }
if(l!=lh) xs=xs+xcom[i][l];
} if(lh>-1)
x0[i]=xs/(ll-1); else
x0[i]=xs/ll; } }
void fxse(int n,int k,double x[],double xcom[][100],double fxk[]) {
int l,lp,lp1,i; double temp; for(l=0;l<k-1;l++)
if(sdx<ep) goto s38;
fxse(n,k,x,xcom,fxk);
lh=0;
s22: fxh=fxk[lh];
for(i=0;i<n;i++)
xh[i]=xcom[i][lh]; xcent(n,k,k,lh,x0,xcom); iw=gau(x0,g,kg); if(iw==0)goto s36; alp=1.3; s12: for(i=0;i<n;i++)
ff=(x[0]-5)*(x[0]-5)+4*(x[1]-6)*(x[1]-6);
return ff;
}
#include<stdio.h>void main()
{
void comple(int n,int k,int kg,double ep,double x[],double bl[],double
printf(" Fmin=%.5f\n",fx0);
for(i=0;i<kg;i++)
printf( "
G(%d)min=%.5f",i,g[i]);
sdx=0;
for(l=0;l<k;l++)
sdx=sdx+(fx0-fxk[l])*(fx0-fxk[l]);
sdx=sqrt(sdx/(double)k);
lh=-1; for(ll=1;ll<k;ll++) {
xcent(n,k,ll,lh,x0,xcom);
iw=gau(x0,g,kg); if(iw==0)
goto s5; for(i=0;i<n;i++)
x[i]=xcom[i][ll+1]; s24: iw=gau(x,g,kg);
if(iw==0) {
x[i]=bl[i]+rand()/40000.0*(bu[i]-bl[i]); iw=gau(x,g,kg); if(iw==0)
goto s5; for(i=0;i<n;i++)
xcom[i][0]=x[i]; for(l=1;l<k;l++)
for(i=0;i<n;i++) xcom[i][l]=bl[i]+rand()/50000.0*(bu[i]-bl[i]);
} for(i=0;i<n;i++)
xcom[i][lh]=xr[i]; fxk[lh]=fxr; goto s14; s36: for(i=0;i<n;i++) {
bl[i]=xcom[i][k]; bu[i]=x0[i];
} goto s5; s38: for(i=0;i<n;i++)
x[i]=x0[i]; *f=objfx(x); free(x0); free(xh); free(xr); free(g); free(fxk); }
xr[i]=x0[i]+alp*(x0[i]-xh[i]); iw=gau(xr,g,kg); if(iw==0) {
alp=alp*0.5; goto s12; } fxr=objfx(xr); if(fxr>=fxh) { if(alp>1.0e-4) {
alp=alp*0.5; goto s12; } lh=lh+1; if(lh<3)goto s22;
复 合 型 法 实 验 报 告
院系:机电工程学院 专业:机制自动化 班级:10--03 班 姓名: 学号:
一.复合形法求约束思想
在可行区内构造一个具有 k 个顶点的初始复合形.对该复合形的 顶点的目标函数值进行比较,找到目标函数值最大的顶点(称最坏点), 然后按一定的法则求出目标函数值的所有下降的可行的新点,并用此 点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优 点移动一步,直至逼近最优点.
for(lp=0;lp<k-l;lp++) {
lp1=lp+1; if(fxk[lp]<=fxk[lp1]) {
temp=fxk[lp]; fxk[lp]=fxk[lp1]; fxk[lp1]=temp; for(i=0;i<n;i++) {
x[i]=xcom[i][lp]; xcom[i][lp]=xcom[i][lp1]; xcom[i][lp1]=x[i]; } } } } void comple(int n,int k,int kg,double ep,double x[],double bl[],double
for(i=0;i<n;i++) x[i]=x0[i]+0.5*(x[i]-x0[i]);
goto s24; } else {
for(i=0;i<n;i++) xcom[i][ll+1]=x[i];
} } for(l=0;l<k;l++) { for(i=0;i<n;i++) x[i]=xcom[i][l]; fx=objfx(x);
二.程序框图
开始
输入 n,k,ε
形成初始复合形的 k 个顶点 xj(j=1,2,3,.....k)
计算各顶点的目标函数值
a=xl
将各定点的目标函数值和坐标
b=xc
按目标函数值的大小排序
是 δ <ε 否
计算出去 xH 后的各顶点中心 xc=1−1k x
������ ������ =1
xj
否 xc 可行?

反射点 xr=xc+α (xc-xh)
x*=xl,f*=fl 结束
xr 可行?



f(xr)<f(xh)?
α =0.5α 否
α <=10^(-10)?


xh=xr
相关文档
最新文档