机械优化作业 复合型法 1

发布 2022-06-29 17:50:28 阅读 5828

机械设计制造及其自动化03班。

李抗战。一) 题目:用复合形法求约束优化问题。

;的最优解。

基本思路:在可行域中构造一个具有k个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。

二) 复合形法的计算步骤。

1) 选择复合形的顶点数k,一般取,在可行域内构成具有k个顶点的初始复合形。

2) 计算复合形个顶点的目标函数值,比较其大小,找出最好点xl、最坏点xh、及此坏点xg..

3) 计算除去最坏点xh以外的(k-1)个顶点的中心xc。判别xc是否可行,若xc为可行点,则转步骤4);若xc为非可行点,则重新确定设计变量的下限和上限值,即令,然后转步骤1),重新构造初始复合形。

4) 按式计算反射点xr,必要时改变反射系数α的值,直至反射成功,即满足式。然后xr以取代xh,构成新的复合形。

5) 若收敛条件得到满足,计算终止。约束最优解为:。

三) 复合形法程序框图见下图:

四) 源程序如下:

*输入值选择n=2,k=3,本程序可以处理n为2或3,k为3或4的情况*/

#include <>

#include <>

#include <>

#include <>

#define e0 1e-5复合形法收敛控制精度*/

double **apply(int,int申请矩阵空间*/

double f(double目标函数*/

double *g(double约束函数*/

bool judge(double可行点的判断*/

int main()

int n,k;

int i,j,k1;

int l;

double temporary;

double restrain收敛条件*/

double reflect反射系数*/

srand((unsigned)time(null));

printf("请输入目标函数的维数n输入已知数据*/

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 *)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));存放最坏点的反射点*/

printf("本程序中的所有输入,两个数之间用空格隔开,然后按enter键时不要长时间的按,否则,可能会出错");

printf("请输入选定的第一个可行点x1(包含%d个数):"n);

for(i=0;i scanf("%lf",*x+i);

printf("请输入初选变量的下限a(包含%d个数):"n);

for(i=0;i scanf("%lf",a+i);

printf("请输入初选变量的上限b(包含%d个数):"n);

for(i=0;i scanf("%lf",b+i);

printf("输出输入结果为:n=%d,k=%d,x1=("n,k); 输出已知数据*/

for(i=0;i printf("%5lf ",x+i));

printf("%5lf)a=("x+n-1));

for(i=0;i printf("%f ",a+i));

printf("%5lf),b=("a+n-1));

for(i=0;i printf("%f ",b+i));

printf("%5lf)",*b+n-1));

l1: for(i=1;i for(j=0;jx+i)+j)=*a+j)+(double)(rand()%10000)/10000*(*b+j)-*a+j));

l=1;for(i=1;i if(judge(*(x+i)))

for(i=0;i for(j=i+1;jif(f(*(x+i))for(k1=0;k1

temporary=*(x+i)+k1);

x+i)+k1)=*x+j)+k1);

x+j)+k1)=temporary;

for(i=0;ix_c+i)=0;

for(i=0;i for(j=0;jx_c+j)+=x+i)+j);

for(i=0;ix_c+i)/=l;

if(!judge(x_c)) 判断可行点中心是否可行*/

goto l1;

elseelse

double **apply(int row,int col) /申请矩阵空间*/

机械优化大作业 MATLAB复合型法

机床主轴机构优化设计。机床主轴是机床中重要的零件之一,一般多为支撑空心阶梯轴。为了便于使用材料力学进行结构分析,常常将阶梯轴简化成以当量直径表示的等截面轴。如图0.1所示是一个已经简化处理的专用机床双主轴的力学模型。从机床主轴制造成本较低和加工精度较高的要求出发,需要考虑主轴的自重和外身段挠度这样两...

机械优化作业

机械优化设计报告。二次规划法。班级 信息计算111802班。姓名 甘金宝。学号 201118030202 一 绪论。二次规划是非线性规划中的一类特殊数学规划问题,在很多方面都有应用,如投资组合 约束最小二乘问题的求解 序列二次规划在非线性优化问题中应用等。在过去的几十年里,二次规划已经成为运筹学 经...

机械优化设计优化作业习题

1 63 机床主轴是机床中重要零件之一,一般为多支承空心阶梯轴。为了便于使用材料力学公式进行结构分析,常将阶梯轴简化成以当量直径表示的等截面轴。图1所示的为一根简化的机床主轴。要求以主轴的自重为目标,对该主轴进行优化设计。已知条件 主轴材料为45 内径d 30mm,外力f 15000n,许用挠度y0...