机械优化设计-复合型法
现代设计黄金分割法、复合形法实验报告

《现代设计理论与方法》实验报告一、实验目的机械优化设计是一门实践性较强的课程,学生通过实际上机计算可以达到以下目的: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)间接法
间接法包括:罚函数法(内点罚函数法、外点罚 函数法、混合罚函数法)、广义乘子法、广义简约梯 度法和约束变尺度法等。
直接解法通常适用于仅含不等式约束的问题,思路是
如前所述,在求解无约束问题的单纯形法中,不 需计算目标函数的梯度,而是靠选取单纯形的顶点并 比较各顶点处目标函数值的大小,来寻找下一步的探 索方向的。在用于求解约束问题的复合形法中,复合 形各顶点的选择和替换,不仅要满足目标函数值的下 降,还应当满足所有的约束条件。
基本思想:在可行域中选取K个设计点 ( n+1≤K≤2n)作为初始复合形的顶点。比较各顶点目标 函数值的大小,去掉目标函数值最大的顶点(称最坏点) ,以坏点以外其余各点的中心为映射中心,用坏点的 映射点替换该点,构成新的复合形顶点。
取次好点和好点连线的中点为X(0)。
令:X(4)= X(0)+α(X(0)-X(H))
称X(4)为映射点,记为X(R),α为映射系数,通常取 α=1.3,可根据实际情况进行缩减。
一般情况下,映射点的函数值比坏点的函数值要 小,即F(X(R))< F(X(H))。若满足可行域,则用X(R)代替 X(H)构成新的复合形。如此反复迭代直到找到最优解。
(3)计算坏点外的其余各顶点的中心点X(0)。
X0
1 K K1j1
X(j),
j
H
(4)计算映射点X(R)
X (R )X (0 )(X (0 )X (H ))
检查X(R)是否在可行域内。若X(R)为非可行点,将映 射系数减半后再按上式改变映射点,直到X(R)进入可行 域内为止。
机械优化设计-第04章 多维有约束优化方法

第四章:多维有约束优化方法4.1概述一、多维有约束问题的数学模型机械优化设计问题绝大多数是属于多维有约束非线性规划,其数学模型可表示为式中a i、b i分别为x i的下界和上界。
在求解约束优化问题时,虽然可以利用第三章的无约束优化方法,再加上约束的逻辑判断,使搜索点保持在可行域内逐步逼近约束最优解,但这样处理太复杂,缺乏严格的科学性。
因此,出现了一些直接求解约束优化问题的方法,其基本思路也是数值迭代法。
目前,约束优化方法虽然不如无约束优化方法那样多而完善,但对求解工程优化问题已有很多较好的方法。
二、多维有约束优化方法的分类(1)直接法直接法包括:网格法、分层降维枚举法、复合形法、随机试验法、随机方向法、可变容差法和可行方向法。
(2)间接法间接法包括:罚函数法、内点罚函数法、外点罚函数法、混合罚函数法、精确罚函数法、广义乘子法、广义简约梯度法和约束变尺度法。
直接法不需要利用目标函数和约束函数的梯度,就可直接利用迭代点和目标函数值的信息来构造搜索方向。
间接法要利用目标、约束函数的梯度,其中也包括利用差分来近似梯度的应用。
很多约束优化方法是先转变成无约束优化方法来求解。
可见,无约束优化方法也是也是约束优化方法的基础。
4.2复合形法一、方法概述基本思路:在可行域中选取K个设计点(n+1≤K≤2n)作为初始复合形的顶点。
比较各顶点目标函数值的大小,去掉目标函数值最大的顶点(称最坏点),以坏点以外其余各点的中心为映射中心,用坏点的映射点替换该点,构成新的复合形顶点。
反复迭代计算,使复合形不断向最优点移动和收缩,直至收缩到复合形的顶点与形心非常接近,且满足迭代精度要求为止。
初始复合形产生的全部K个顶点必须都在可行域内。
二、初始复合形的产生复合形法是一种在可行域内收索最优点大直接解法。
(1)确定可行点作为初始复合形的第一个顶点:式中:通过调整随机数,使第一个初始点控制在可行域范围内。
(2)产生其余(K-1)个随机点。
(完整版)机械优化设计习题参考答案孙靖民第四版机械优化设计

2.黄金分割法(0.618法)
原理:提高搜索效率:1)每次只插一个值,利用一个前次的插值;2)每次的缩短率λ相同。左右对称。
程序:p52
(四)插值方法
1.抛物线法
原理:任意插3点:
算得: ; ;
要求:
设函数 用经过3点的抛物线 代替,有
解线代数方程
解得:
程序框图p57
网格法 ,缩小区间,继续搜索。
Monte Carlo方法 , ,随机数。
比较各次得到的 得解
遗传算法(专题)
(二)区间消去法(凸函数)
1.搜索区间的确定:高—低--高( )则区间内有极值。
2.区间消去法原理:在区间[a, b]内插两个点a1, b1保留有极值点区间,消去多余区间。
缩短率:
(三)0.618法
可行方向—约束允许的、函数减小的方向。(图)约束边界的切线与函数等高线的切线方向形成的区域。
数学模型
用内点法或混合法,取 ,
直接方法
(一)随机方向法
1.在可行域产生一个初始点 ,因 (约束),则
--(0,1)的随机数。
2.找k个随机方向,每个方向有n个方向余弦,要产生kn个随机数 , , ,随机方向的单位向量为
3.取一试验步长 ,计算每个方向的最优点
4.找出可行域中的最好点 得搜索方向 。以 为起点, 为搜索方向得 。最优点必须在可行域内或边界上,为此要逐步增加步长。
得
穷举下去得递推公式
3.算例
p73
4.框图p72
5.特点
作业:1. 2.
(六)变尺度法
1.引言
坐标变换
二次函数
令 为尺度变换矩阵
机械优化设计(全,120张)

| F ( X (k1) ) F ( X (k) ) |
或
|
F(
X
(k1) ) F ( X | F(X (k)) |
(k)
)
|
(三)梯度准则
目标函数在迭代点的梯度模已达到充分小, 即:
|| F ( X (k1) ||
式中的ε为结定的迭代精度或允许误差,可 根据设计要求预先给定。
1.3 优化设计问题的基本解法
求解优化问题的方法:
解析法
数学模型复杂时不便求解
数值法
可以处理复杂函数及没有数学表达式 的优化设计问题
寻求极值点的搜索过程
1.4、迭代计算的终止准则
在迭代过程中,如果根据一个迭代公式能够计 算出接近精确解的近似解,即近似解序列X(k) 有极限
lim X (k) X * k
在设计这根主轴时, 有两个重要因素需要 考虑。一是主轴的自 重;一是主轴伸出端 c点的挠度。
1.11、设计变量
在优化设计的过程中,不断进行修改、调整, 一直处于变化的参数称为设计变量。
设计变量的全体实际上是一组变量,可用一 个列向量表示:
x x1 x2 ... xn T
本问题中,当主轴的材料选定时,其设计方案 由四个设计变量决定。孔径d、外径D、跨距l及 外伸端长度a。由于机床主轴内孔用于通过待加 工的棒料,其大小由机床型号决定。不作为设 计变量。故设计变量取为:
2、现代设计方法
现代设计方法是以电子计算机 为手段,运用工程设计的新理论和 新方法,使计算结果达到最优化,使 设计过程实现高效化和自动化.
运用现代设计方法可以适应市 场剧烈竞争的需要,提高设计质量 和缩短设计周期.
二、优化设计方法
机械优化设计PPT

2.梯度投影法
约束面上的梯度投影方向
四、步长的确定
1.取最优步长
2. αk取到约束边界的最大步长
1.取最优步长
2. αk取到约束边界的最大步长
1) 取一试验步长αt,计算试验点xt。
2) 判别试验点xt的位置。 3) 将位于非可行域的试验点xt,调整到约束面上。
2. αk取到约束边界的最大步长
3.计算步骤
三、 不等式约束的增广乘子法
三、 不等式约束的增广乘子法
三、 不等式约束的增广乘子法
图6-36 增广乘子法框图
第七节 非线性规划问题的线性化解法——线性逼近法
一、 序列线性规划法
二、割平面法 三、小步梯度法 四、非线性规划法
一、 序列线性规划法
6-37
二、割平面法
三、小步梯度法
1) 由设计者决定k个可行点,构成初始复合形。 2) 由设计者选定一个可行点,其余的(k-1)个可行点用随机法产生。 3) 由计算机自动生成初始复合形的全部顶点。
二、复合形法的搜索方法
1.反射 2.扩张 3.收缩 4.压缩
1.反射
1) 2) 3) 4) 计算复合形各顶点的目标函数值,并比较其大小,求出最好点L、最坏 点H及次坏点G 计算除去最坏点H外的(k-1)个顶点的中心C 从统计的观点来看,一般情况下,最坏点H和中心点C的连线方向为目标
四、非线性规划法
第八节 广义简约梯度法
一、 简约梯度法
一、 简约梯度法
二、 广义简约梯度法
二、 广义简约梯度法
三、 不等式约束函数的处理和换基问题
1.不等式约束函数的处理方法
2.基变量的选择和换基问题
1.不等式约束函数的处理方法
2.基变量的选择和换基问题
机械优化设计三个案例

机械优化设计案例11. 题目对一对单级圆柱齿轮减速器,以体积最小为目标进行优化设计。
2。
已知条件已知数输入功p=58kw ,输入转速n 1=1000r/min ,齿数比u=5,齿轮的许用应力[δ]H =550Mpa ,许用弯曲应力[δ]F =400Mpa 。
3.建立优化模型3。
1问题分析及设计变量的确定由已知条件得求在满足零件刚度和强度条件下,使减速器体积最小的各项设计参数。
由于齿轮和轴的尺寸(即壳体内的零件)是决定减速器体积的依据,故可按它们的体积之和最小的原则建立目标函数.单机圆柱齿轮减速器的齿轮和轴的体积可近似的表示为:]3228)6.110(05.005.2)10(8.0[25.087)(25.0))((25.0)(25.0)(25.0222122212221222212212122221222120222222222121z z z z z z z z z z z g g z z d d l d d m u mz b bd m u mz b b d b u z m b d b z m d d d d l c d d D c b d d b d d b v +++---+---+-=++++-----+-=πππππππ 式中符号意义由结构图给出,其计算公式为b c d m umz d d d mumz D mz d mz d z z g g 2.0)6.110(25.0,6.110,21022122211=--==-===由上式知,齿数比给定之后,体积取决于b 、z 1 、m 、l 、d z1 和d z2 六个参数,则设计变量可取为T z z T d d l m z b x x x x x x x ][][211654321== 3。
2目标函数为min )32286.18.092.0858575.4(785398.0)(2625262425246316321251261231232123221→++++-+-+-+=x x x x x x x x x x x x x x x x x x x x x x x x x x f3.3约束条件的建立1)为避免发生根切,应有min z z ≥17=,得017)(21≤-=x x g2 )齿宽应满足max min ϕϕ≤≤d b ,min ϕ和max ϕ为齿宽系数d ϕ的最大值和最小值,一般取min ϕ=0。
机械优化设计-复合型法

机械优化设计实验报告(一) 题目:用复合形法求约束优化问题()()()2221645min -+-=x x x f ;06422211≤--=x x g ;01013≤-=x g 的最优解.基本思路:在可行域中构造一个具有K 个顶点的初始复合形.对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。
(二) 复合形法的计算步骤 1)选择复合形的顶点数k ,一般取n k n 21≤≤+,在可行域内构成具有k 个顶点的初始复合形。
2)计算复合形个顶点的目标函数值,比较其大小,找出最好点x L 、最坏点x H 、及此坏点x G 。
. 3)计算除去最坏点x H 以外的(k-1)个顶点的中心x C .判别x C 是否可行,若x C 为可行点,则转步骤4);若x C 为非可行点,则重新确定设计变量的下限和上限值,即令C L x b x a ==,,然后转步骤1),重新构造初始复合形。
4)按式()H C C R x x x x -+=α计算反射点x R,必要时改变反射系数α的值,直至反射成功,即满足式()()()()H R R j x f x f m j x g <⋯⋯=≤;,2,1,0,。
然后x R以取代x H,构成新的复合形。
5)若收敛条件()()[]ε≤⎪⎭⎪⎬⎫⎩⎨⎧--∑=211211k j Lj x f x f k 得到满足,计算终止。
约束最优解为:()()L L x f x f x x ==*,*。
(三) 复合形法程序框图见下图:(四)源程序如下:#include〈math。
h〉double objfx(double x[]){double ff;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 bu[],double xcom[][100],double *f);double a[]={0,0},b[]={10,20},f,x[2],xcom[2][100];comple(2,3,3,0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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++)
xcom[i][l]=bl[i]+rand()/50000.0*(bu[i]-bl[i]);
lh=-1;
for(ll=1;ll<k;ll++)
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;
}
int gau(double x[],double g[],int kg)
{
int i;
constraint(x,g);
(二)复合形法的计算步骤
1)选择复合形的顶点数k,一般取 ,在可行域内构成具有k个顶点的初始复合形。
2)计算复合形个顶点的目标函数值,比较其大小,找出最好点xL、最坏点xH、及此坏点xG..
3)计算除去最坏点xH以外的(k-1)个顶点的中心xC。判别xC是否可行,若xC为可行点,则转步骤4);若xC为非可行点,则重新确定设计变量的下限和上限值,即令 ,然后转步骤1),重新构造初始复合形。
{
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));
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++)
double *fxk=(double*)calloc(k,sizeof(double));
double *g=(double*)calloc(kg,sizeof(double));
s5: for(i=0;i<n;i++)
x[i]=bl[i]+rand()/40000.0*(bu[i]-bl[i]);
{
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);
{
int l,lp,lp1,i;
double temp;
for(l=0;l<k-1;l++)
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++)
4)按式 计算反射点xR,必要时改变反射系数α的值,直至反射成功,即满足式 。然后xR以取代xH,构成新的复合形。
5)若收敛条件 得到满足,计算终止。约束最优解为: 。
(三)复合形法程序框图见下图:
(四)源程序如下:
#include<math.h>
double objfx(double x[])
{
double ff;
}
/*wsd说明n优化模型维数k复合形顶点数kg约束函数个数ep收敛精度x a初始点下限b初始点上限xcom进程中的优化结果*f */
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
double objfx(double x[]);
void constraint(double x[],double g[]);
{
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 bu[], double xcom[][100],double *f)
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 bu[], double xcom[][100],double *f) ;