复合型法 程序.docx_第1页
复合型法 程序.docx_第2页
复合型法 程序.docx_第3页
复合型法 程序.docx_第4页
复合型法 程序.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学机械学院机测系课程上机实验报告课 程 名 称: 机械优化设计 班级xxx日 期2012/6/7成绩评定姓名 xxx实验室机械馆图强机房老师签名实验名称用复合形法程序解题所用软件DEV-C+ 5实验目的及内容实验目的:1.掌握并能够建立最优化基本类型问题的数学模型。2.掌握最优化方法的基本概念、基本理论和基本方法,奠定最优化的理论基础。3.能够熟练编制和调试最优化方法的程序,奠定解决实际中的优化问题的基础实验内容:理解复合形法并编写相关程序求其最优解。复合形法程序考核题: 1) 取: 2) 取: 3) 取: 实验原理步骤、实验原理:略实验步骤:1,画流程图,编写程序;2,将目标函数代入;3,编译运行,将结果保存。 1) 取:迭代轮数 k= 34 x( 0)= 0.9949069, 0.9911837, f( 0)= 1.0102899x( 1)= 0.9960168, 1.0013936, f( 1)= 1.0079842x( 2)= 0.9962051, 1.0033725, f( 2)= 1.0076155x( 3)= 0.9953445, 1.0029982, f( 3)= 1.0093417最低和最高顶点号: L= 2, H= 0复合形顶点值均方差: 0.001602164迭代轮数 k= 35 x( 0)= 0.9959325, 1.0035147, f( 0)= 1.0081638x( 1)= 0.9960168, 1.0013936, f( 1)= 1.0079842x( 2)= 0.9962051, 1.0033725, f( 2)= 1.0076155x( 3)= 0.9953445, 1.0029982, f( 3)= 1.0093417 最低和最高顶点号: L= 2, H= 3复合形顶点值均方差: 0.000924146*复合形法优化最优点及目标函数值为:x( *)= 0.9962051, 1.0033725, f( *)= 1.0076155迭代精度: 0.000924146本次优化最终迭代次数为: 35 2) 取:迭代轮数 k= 33 x( 0)= 3.0053454, 1.7288957, f( 0)= -0.9945421x( 1)= 2.9991673, 1.7301840, f( 1)= -0.9967700x( 2)= 3.0011276, 1.7309552, f( 2)= -0.9981034x( 3)= 2.9998686, 1.7308602, f( 3)= -0.9979392最低和最高顶点号: L= 2, H= 0复合形顶点值均方差: 0.001903181迭代轮数 k= 34 x( 0)= 2.9991947, 1.7309542, f( 0)= -0.9981017x( 1)= 2.9991673, 1.7301840, f( 1)= -0.9967700x( 2)= 3.0011276, 1.7309552, f( 2)= -0.9981034x( 3)= 2.9998686, 1.7308602, f( 3)= -0.9979392最低和最高顶点号: L= 2, H= 1复合形顶点值均方差: 0.000671761*复合形法优化最优点及目标函数值为: x( *)= 3.0011276, 1.7309552, f( *)= -0.9981034迭代精度: 0.000671761本次优化最终迭代次数为: 34算法程序实现/*复合形法求仅有不等式的非线性最优化问题*/#include #include #include #include #define N 2 /*给出优化问题的维数N*/#define K 4 /*给出复合形法顶点数K*/#define N1 5 /*给出约束方程个数K*/#define E 0.0000001 /*复合形法迭代精度*/#define NM 500 /*寻找初始复合形的最大次数*/FILE *fp;char outname50=复合形法计算结果.txt; /*输出文件名*/int H=0,L=0; /*H,L-复合形顶点最大和最小值顶点号*/double fK; /*本程序顶点值从f0开始*/struct double x1N; /* double x2; 改为数组方式*/TpointK,xc,xr; /*Tpoint存放K个点的坐标,xc,xr分别为 中心点和影射点坐标*/*目标函数子程序*/double function(double x)double zhi;zhi=-x0*x1*x1;return(zhi);/*约束条件子程序*/int strain(double x)int i,fin=1;double gN1; g0=x0;g1=x1;g2=20-x0;g3=20-x1;g4=200-(3*x0+2*x1)*x1;for(i=0;iN1;i+)if(gi0.)fin=0;break;return(fin);/*初始可行点产生区间*/void startab(double a,double b)a0=-10.0;b0=10.0;a1=-10.0;b1=10.0;return;/*以上为修改部分*/*输出当前迭代点坐标及目标函数值*/double xfout(double x,int m)int j;double f;f=function(x);fprintf(fp, x(%3d)=,m);for(j=0;jN-1;j+)fprintf(fp,%15.7lf,xj);fprintf(fp,%15.7lf, f(%3d)=%15.7lfn,xN-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 sum2N,sum3,delt1=0.01;double alf,r;srand( (unsigned)time( NULL ) ); /*种子函数*/do /*自动产生第一个可行点*/for(i=0;inum)printf(找不到初始可行点,可能初始区间不合适!n);fh1=2;return(fh1);while(iw=0);for(j=1;jK;j+) /*产生其余个可行点*/dosum3=1.;for(i=0;iN;i+)r=rand()/32767.; /*直接调用函数产生随机数*/Tpointj.x1i=ai+r*(bi-ai);iw=strain(Tpointj.x1);if(iw=0)m=j;for(i1=0;i1N;i1+)sum2i1=0.;for(i1=0;i1N;i1+) /*求前j-1个顶点中心*/for(j1=0;j1m;j1+)sum2i1+=Tpointj1.x1i1;for(j1=0;j1N;j1+)xc.x1j1=sum2j1/m; alf=0.5;do /*求中心的映射点*/for(i=0;iN;i+)Tpointm.x1i=xc.x1i+alf*(Tpointm.x1i-xc.x1i);sum3=0.;for(i1=0;i1delt1);while(sum3delt1);return(fh1);void suan() /*计算值并找出最好点和最差点*/double max,min;int i;for(i=0;iK;i+)fi=function(Tpointi.x1);max=f0;min=f0;H=0;L=0;for(i=1;imax) max=fi;H=i; else if(fimin) min=fi; L=i; return;void suan1() /*找出次坏点*/double min; int i,ih;min=fL;ih=0;for(i=0;imin) min=fi;ih=i;H=ih;return;double panbie() /*检验迭代终止条件*/double sum=0.0,temp;int i;for(i=0;iK;i+)sum+=(fi-fL)*(fi-fL);temp=sqrt(sum/K);return(temp);int newfhx(double a,double b)int i,j,fh1=1,chd=0;double sum1N;double alfa; /*映射系数*/doalfa=1.3;for(j=0;jN;j+)sum1j=0.0;for(i=0;iK;i+)if(i=H)continueelsefor(j=0;jN;j+)sum1j+=Tpointi.x1j;for(j=0;jN;j+)xc.x1j=sum1j/(K-1); if(!(strain(xc.x1)printf(xc is wrong非凸集n);fh1=3;for(i=0;iN;i+)ai=TpointL.x1i;bi=xc.x1i;return(fh1);for(j=0;j=function(TpointH.x1)alfa=alfa*0.5;for(j=0;jN;j+)xr.x1j=xc.x1j+alfa*(xc.x1j-TpointH.x1j); if(alfaE)if(chd=0)suan1(); /*寻找次坏点*/alfa=1.3;chd=1;break;elsereturn(4); while(chd=1);for(j=0;jN;j+)TpointH.x1j=xr.x1j; /*/return(fh1);main()int i,val1,val2,dds,nmax;double aN,bN,fv; nmax=NM; fp=fopen(outname,w);fprintf(fp,*复合形法计算结果*nn); startab(a,b);fprintf(fp,本次优化的上下限为:n);fprintf(fp, a=); for(i=0;iN-1;i+)fprintf(fp,%8.3f,ai);fprintf(fp,%8.3fn,aN-1); fprintf(fp, b=); for(i=0;iN-1;i+) fprintf(fp,%8.3f,bi);fprintf(fp,%8.3fn,bN-1); doval2=1;dds=1;val1=startfhx(a,b,nmax);if(val1=2)fprintf(fp,找不到初始可行点,可能初始区间不合适!n); elsefprintf(fp,初始复合形各顶点坐标及函数值:n);for(i=0;iE)val2=newfhx(a,b);if(val2=3)fprintf(fp,该优化问题可行域为非凸集,);fprintf(fp,重新给出优化的上下限为:n);fprintf(fp,a=); for(i=0;iN-1;i+)fprintf(fp,%8.3f,ai);fprintf(fp,%8.3fn,aN-1); fprintf(fp,b=); for(i=0;iN-1;i+)fprintf(fp,%8.3f,bi);fprintf(fp,%8.3fn,bN-1);break; suan();fprintf(fp,迭代轮数 k=%3d n,dds);for(i=0;iK;i+) fv=xfout(Tpointi.x1,i);fprintf(fp, 最低和最高顶点号: L=%2d, H=%2dn,L,H);fprintf(fp,复合形顶点值均方差:%15.9lfnn,panbie();dds+;while(val2=3&val1!=2);if(val2=4)fprintf(fp,对次坏点的影射仍然无法找到下一个);fprintf(fp,复合形顶点,计算终止。n);elseif(val1!=2)fprintf(fp,n*n);fprintf(fp,复合形法优化最优点及目标函数值为:n);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论