机械优化设计_第1页
机械优化设计_第2页
机械优化设计_第3页
机械优化设计_第4页
机械优化设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、机械优化设计一一复合形方法及源程序(一)题目:用复合形法求约束优化问题nmi /(x)= (a -5尸 +4(*2 -6T ; g = 64-xf -x22 0; g3 = -10 0的最优解。基本思路:在可行域中构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标函数 值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有 所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次, 就向最优点移动一步,直至逼近最优点。(二)复合形法的计算步骤1)选择复合形的顶点数k, 一般取n + lk2nf在可行域内构成具有k个顶点的初始复合 形。2)

2、计算复合形个顶点的目标函数值,比较其大小,找出最好点xl、最坏点xh、及此坏点xg.3)计算除去最坏点xh以外的(k-1)个顶点的中心X*判别xc是否可行,若xc为可行点,则转步骤4);若xc为非可行点,则重新确定设计变量的下限和上限值,即令。=xL,b = xc , 然后转步骤1),重新构造初始复合形。4)按式xR=xc + axc-xM算反射点Xr,必要时改变反射系数a的值,直至反射成功,即满足式gy(x/?)0,(; = 1,2,inf(xR)f(xH)o然后Xr以取代Xh,构成新的复合形。5)若收敛条件,上|/优)_得到满足,计算终止。约束最优解为: k 一 1 j=ix =x/(x

3、)=/(xL)o(三)复合形法程序框图见下图:(四)源程序如下:/*复合形法收敛控制精度*/*申请矩阵空间*/*目标函数*/*约束函数*/*可行点的判断*/int n.k;mt i,j,kl;int 1;double temporary;double restrain;double reflect;srand(unsigned)tmie(NULL);pnntf(”请输入目标函数的维数n:”);scanf(”d,&n);pnntf(”请输入复合形的顶点数k:”);scanf(”d”,&k);double *x=apply(k,n);double *y=(double *)calloc(k.siz

4、eof(double);double *p=(double *)calloc(3,sizeof(double);double *a=(double *)calloc(n.sizeof(double);double *b=(double *)calloc(n,sizeof(double);double *x_c=(double *)calloc(n.sizeof(double);double *x_r=(double *)calloc(n,sizeof(double);/*收敛条件*/*反射系数*/*输入己知数据*/*存放复合形顶点*/*存放目标函数值*/*存放约束函数值*/*存放设计变量的下限

5、*/*存放设计变量的上限*/*存放可行点中心*/*存放最坏点的反射点*/*输入值选择n=2,k=3,本程序可以处理n为2或3, k为3或4的情况*/#iiiclude #iiiclude #iiiclude #iiiclude #defiiie EO le-5double *apply(int,int);double f(double *);double *g(double *);bool judge(double *);int niaiii()pnntf(”本程序中的所有输入,两个数之间用空格隔开,然后按enter键时不要长时间的按,否则,可 能会出错寸);请输入选定的第一个可行点xl(包含

6、(1个数fbi(i=0;in;i+)scanff%lP;x+i);pnntf(iW输入初选变量的下限a(包含(1个数fbi(i=0;in;i+)scanff%lf,a+i);pnntf(iW输入初选变量的上限b(包含d个数):F);fbi(i=0;in;i+)scanff%lP,b+i);pnntf(”输出输入结果为:nn=%d,k=%d,xl=(”,n,k);/*输出已知数据*/fbr(i=O;in-l;i+)pnnW%51f”,*(*x+i);pnntff%.51f)Ea=(”,*(*x+n-l);fbr(i=O;in-l;i+)pnnrfT%f”,*(a+i);pnntff%.51f),

7、b=(”,*(a+n.l);fbr(i=O;in-l;i+)pnntf(”f”,*(b+i);pnntff%.51f)ir,*(b+n-l);Ll: for(i=l;ik;i+)/*随机得到其余(k-1)个可行点*/foi(j=Ojnj+) *(*(x+i)+j)=*(a-fj)+(double)(rand()%10000)/10000*(*(b+j)-*(a+j); 1=1; fol(l=l;ik;l+)/*找出可行点的个数1,并把可行点放在前1个位置上*/if(judge(*(x+i)I for(j=lJk;j+) if(!judge(*(x+j) ( for(kl=0;kln;kl+)

8、( tempoiary=*(*(x+i)+kl); *(*(x+i)+kl)=*(*(x+j)+kl);* (* (x+j )+k l)=temp orary; break;) 1+; foi(i=0;il-l;i+)/*把前1个可行点按目标函数值从大到小排序*/for(j=i+lJl;j+) if(f(*(x+i)f(*(x+j) fbr(k l=0;kln;kl +) ( temporary=*(*(x+i)+k 1); *(*(x+i)+kl)=*(*(x+j)+kl); *(*(x+j)+kl )=temporaiy; )foi(i=0;in;i+)/*求可行点中心 */*(x_c+i

9、)=O; foi(i=0;il;i+) for(j=0jvnj+) *(x_c+j)+=*(*(x+i)+j);*(x_c+i)/=l;if( !judge(x_c)/*判断可行点中心是否可行*/*(a+i)=*(*(x+l-l)+i);*(b+i)=*(x_c+i);goto LI; else for(i=l;ivk;i+)/*将不可行点可行化*/do( for(j=0jn;j-H-) *(*(x+i)+j)=*(x_c+j)+0.5*(*(*(x+i)+j)-*(x_c+j);wlule(!judge(*(x+i);L2:foi(i=0;ik-l;i+)/*将可行点按目标函数值从大到小排序

10、*/fbr(j=i+ljkj+) f(f(*(x+i)vf(*(x+j) for(kl=0;kln;kl+) ( tempoiary=*(*(x+i)+kl); *(*(x+i)+kl)=*(*(x+j)+kl);* (* (x+j )+k 1 )=temp orary;restiaiii=O;/*求收敛条件 */fbr(i=O;ik;i-H-) restiain+=(R*(x+i)f(*(x+k-l)*(f(*(x+i)f(*(x+kl);iestiaiii=sqrt(l .0/(k- l)*iestrain); if(restiaiiiEO)/* 判断收敛条件 */J I pnntf(”n

11、求得约束最优点为:(”); for(i=O;in;i-H-)pnntff%.5f ”,*(*(x+k.l)+i);pnntf()ii 目标函数的最优解为:%.5fn”,f(*(x+k-l); return 0: elseL3:for(i=0;in;i+)/*计算除去最坏点*x外的(k-1)个顶点的中心*/*(x_c+i)=0; for(i=l;ik;i+) for(j=0jn;j-H-) *(x_c+j)+=*(*(x+i)+j); for(i=0;in;i-H-) *(x_c+i)/=kl; reflect=1.3;L4:for(i=0;in;i+)/* 求反射点*/*(x_r+i)=*(x

12、_c+i)+reflect*(*(x_c+i)*(*x+i); if(!judge(x_r)reflect*=0.5;goto L4;else if(f(x_r)vR*x)jfbr(i=O;in;i+)*(*x+i)=*(x_r+i);goto L2;else if(reflect=le-10)fbr(i=0;in;i+)* (*x+i)=* (* (x+1 )+i);goto L3;elsereflect*=0.5;goto L4;double *apply(iiit row,hit col) /* 申请矩阵空间 */(int i;double *x=(double*)calloc(row*

13、col,sizeof(double);double *y=(double *)calloc(row,sizeof(double *);if(!x | !y)pnntf(呐存分配失败!,exit(l);for(i=0;iiow;i-H-)*(y+i)=x+i*col;return y;double f(double *x)/* 目标函数*/(return (*x-5)*(*x-5)+4*(*(x+l)-6)*(*(x+l)-6);double *g(double *x)/*约束函数*/(double *p=(double *)calloc(3,sizeof(double);】f(!p)pnntf(呐存分配失败!,exit(l);*p=64-(*x)*(*x)-(*(x+

温馨提示

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

评论

0/150

提交评论