




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、机械优化设计复合形方法及源程序(一)题目:用复合形法求约束优化问题2 2 2 2min f xx154 x26;g164x1x20 ;g3x1100 的最优解。基本思路:在可行域中构造一个具有 K个顶点的初始复合形。对该复合形各顶点的目标 函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标 函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状 每改变一次,就向最优点移动一步,直至逼近最优点。(二)复合形法的计算步骤1)选择复合形的顶点数k,一般取n 1 k 2n,在可行域内构成具有k个顶点的初始 复合形。2) 计算复合形个顶点的目标函数值,比
2、较其大小,找出最好点xl、最坏点xh及此坏点Xg.3)计算除去最坏点Xh以外的(k-1)个顶点的中心Xc。判别Xc是否可行,若Xc为可行点, 则转步骤 4 );若Xc为非可行点,贝U重新确定设计变量的下限和上限值,即令4)a xL ,b,然后转步骤1),重新构造初始复合形。按式xRXh计算反射点XR,必要时改变反射系数 a的值,直至反射成功,即满足式gj Xr0, j,m ; f Xrf Xh。然后X R以取代X h,构成新的复合形。5)若收敛条件f Xjf Xl得到满足,计算终止。约束最优解为:X Xl, f Xf Xl 。(三)复合形法程序框图见下图:(四)源程序如下:/*输入值选择#in
3、 elude #in elude#in elude#in elude#defi ne EE0double输入n , k,n=2,k=3.本程序可以处理4n为2或3, k为3或4的情况*/形成初始复合形的k计算各顶点的目标函le-5*apply(int,int);double f(double*);double *g(doube *);bool judce(double *);int mai n()将各疋点的目标函数值复合形法收敛控制精度*/申请矩阵空间*/*否./*约束函数*/计算出去Xh后的各顶可彳点中心曰标函数*/1卩亍点的判断*/int nk;否int i,j,k1;int l;doub
4、le temporary;double restrai n;double reflect;pri nt:(一次坏点xg代替最坏sran d( un sig ned)time(NULL)scanf(%d,&n);printf( 请输入复合形的顶点数 k:);scanf(%d,&k);*/double *x=apply(k,n);/*存放复合形顶点double*y=(double*)calloc(k,sizeof(double);/*存放目标函数值 */double*p=(double*)calloc(3,sizeof(double);/*存放约束函数值 */double*a=(double*)c
5、alloc(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); /*存放最坏点的反射点 */八、printf(本程序中的所有输入, 两个数之间用空格隔开,然后按 enter 键时不要长时间的按,否则,可能会出错 n);printf(请输入选定的第一个可行点x1(包含d个数)
6、:,n);for(i=0;in;i+)scanf(%lf,*x+i);printf(请输入初选变量的下限a(包含d个数):,n);for(i=0;in;i+)scanf(%lf,a+i);pri ntf(请输入初选变量的上限b(包含d个数):,n);for(i=0;in;i+)scanf(%lf,b+i);printf( 输出输入结果为 :nn=%d,k=%d,x1=(,n,k);/*输出已知数据 */for(i=0;in-1;i+)printf(%.5lf ,*(*x+i);printf(%.5lf)na=(,*(*x+n-1); for(i=0;in-1;i+)printf(%f ,*(a
7、+i);printf(%.5lf),b=(,*(a+n-1); for(i=0;in-1;i+)printf(%f ,*(b+i);printf(%.5lf)n,*(b+n-1);L1: for(i=1;ik;i+)/*随机得到其余 (k-1) 个可行点 */for(j=0;jn;j+)*(*(x+i)+j)=*(a+j)+(double)(rand()%10000)/10000*(*(b+j)-*(a+j);l=1;for(i=1;ik;i+)/*找出可行点的个数 l ,并把可行点放在前 l 个位置上 */if(judge(*(x+i)for(j=1;jk;j+)if(!judge(*(x+
8、j)for(k1=0;k1n;k1+)temporary=*(*(x+i)+k1);*(*(x+i)+k1)=*(*(x+j)+k1); *(*(x+j)+k1)=temporary;break;l+;for(i=0;il-1;i+) /* 把前 l 个可行点按目标函数值从大到小排序 */ for(j=i+1;jl;j+)if(f(*(x+i)f(*(x+j)for(k1=0;k1n;k1+)temporary=*(*(x+i)+k1);*(*(x+i)+k1)=*(*(x+j)+k1);*(*(x+j)+k1)=temporary;for(i=0;in;i+) /* 求可行点中心 */*(x
9、_c+i)=0;for(i=0;il;i+)for(j=0;jn;j+)*(x_c+j)+=*(*(x+i)+j);for(i=0;in;i+)*(x_c+i)/=l;if(!judge(x_c) /* 判断可行点中心是否可行 */ for(i=0;in;i+)*(a+i)=*(*(x+l-1)+i);*(b+i)=*(x_c+i);goto L1;elsefor(i=l;ik;i+) /* 将不可行点可行化 */ dofor(j=0;jn;j+) *(*(x+i)+j)=*(x_c+j)+*(*(*(x+i)+j)-*(x_c+j);while(!judge(*(x+i);L2:for(i=
10、0;ik-1;i+) /* 将可行点按目标函数值从大到小排序 */ for(j=i+1;jk;j+)if(f(*(x+i)f(*(x+j) for(k1=0;k1n;k1+) temporary=*(*(x+i)+k1); *(*(x+i)+k1)=*(*(x+j)+k1);*(*(x+j)+k1)=temporary;restrain=0; /* 求收敛条件 */for(i=0;ik;i+) restrain+=(f(*(x+i)-f(*(x+k-1)*(f(*(x+i)-f(*(x+k-1);restrain=sqrt(k-1)*restrain);if(restrainE0) /* 判断
11、收敛条件 */printf(n 求得约束最优点为 :( ); for(i=0;in;i+)printf(%.5f ,*(*(x+k-1)+i);printf()n 目标函数的最优解为 :%.5fn,f(*(x+k-1);return 0;elseL3:*/for(i=0;in;i+) /* 计算除去最坏点 *x 外的 (k-1) 个顶点的中心*(x_c+i)=0;for(i=1;ik;i+) for(j=0;jn;j+)*(x_c+j)+=*(*(x+i)+j);for(i=0;in;i+)*(x_c+i)/=k-1;reflect=;L4:for(i=0;in;i+) /* 求反射点 */
12、*(x_r+i)=*(x_c+i)+reflect*(*(x_c+i)-*(*x+i);if(!judge(x_r)reflect*=;goto L4;else if(f(x_r)f(*x) for(i=0;in;i+)*(*x+i)=*(x_r+i);goto L2;else if(reflect=1e-10)for(i=0;in;i+)*(*x+i)=*(*(x+1)+i);goto L3;elsereflect*=;goto L4;double *apply(int row,int col) /* 申请矩阵空间 */ int i;double *x=(double*)calloc(row
13、*col,sizeof(double);double *y=(double *)calloc(row,sizeof(double *); if(!x | !y)printf( 内存分配失败 !);exit(1);for(i=0;irow;i+)*(y+i)=x+i*col;return y;double f(double *x) /* 目标函数 */return (*x-5)*(*x-5)+4*(*(x+1)-6)*(*(x+1)-6);double *g(double *x) /* 约束函数 */double *p=(double *)calloc(3,sizeof(double);if(!p)printf( 内存分配失败 !);exit(1);*p=64-(*x)*(*x)-(*(x+1)*(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CMMA/T 1-2015镁质胶凝材料制品用硫酸镁
- CAB 1015-2012汽车座垫
- 茶叶种植区域规划与优化考核试卷
- 计算机网络设备配置与应用考核试卷
- 畜牧饲料产品差异化竞争策略考核试卷
- 金属包装容器在烟草行业的应用考核试卷
- 2024年厢式货车项目投资申请报告代可行性研究报告
- 跨国矿产开采安全风险评估与委托管理协议
- 2025年中国笔记本电脑行业市场现状及未来发展前景预测分析报告
- 2025年中国保安服务行业市场规模调研及投资前景研究分析报告
- DB34∕T 2570-2015 祁红香螺加工技术规程
- 湖北省黄冈市(2024年-2025年小学三年级语文)人教版随堂测试(下学期)试卷(含答案)
- 中医护理学 课件 模块七 中医护理操作 项目九中药熏洗技术
- 2021MAM-6070M空压机微电脑控制器
- 2024年全国高考新课标卷物理真题(含答案)
- J∕T∕T 1039-2016 公路桥梁聚氨酯填充式伸缩装置
- 工学云周报范文200字
- 山东省济南市高新区2023-2024学年八年级下学期期末物理试题
- 2022-2023学年广东省广州市荔湾区教科版(广州)四年级下册期末综合练习英语试卷(无答案)
- DLT 5285-2018 输变电工程架空导线(800mm以下)及地线液压压接工艺规程
- 蛛网膜下腔出血及动脉瘤影像表现
评论
0/150
提交评论