机械优化复合形法 程序设计.docx
《机械优化复合形法 程序设计.docx》由会员分享,可在线阅读,更多相关《机械优化复合形法 程序设计.docx(7页珍藏版)》请在冰点文库上搜索。
机械优化复合形法程序设计
课程设计(实验)材料(3)
机械优化设计
课程设计(实验)报告
专业班级:
设计题目:
复合形程序设计
学生姓名:
学生学号:
任课教师:
2013年月日
1、设计要求:
根据已知条件,用复合形法完成一次迭代,只用反射变换复合形即可。
已知条件:
1、目标函数:
f(x)=25/(x1*x2*x2*x2)
2、约束条件:
g(x)30/(x1*x2*x2*x2)-50<=0
G(x)0.0004*x1*x2-0.001<=0
X1>=2x1<=4x2<=1x2>=0.5
3、初始复合形顶点:
X1=[2.2,0.55]X2=[2.4,0.6]X3=[2.6,0.65]X4=[2.8,0,7]
2、方法原理:
复合形法的基本思路是在n维空间的可行域中选取K个设计点(通常取n+1<=K<=2*n)作为初始复合形的顶点。
然后比较复合形各顶点目标函数的大小,其中目标函数值最大的点作为坏点,以坏点之外其余各点的中心为映射中心,寻找坏点的映射点,一般说来此映射点的目标函数值总是小于坏点的,也就是说映射点优于坏点。
这时,以映射点替换坏点与原复合形除坏点之外其余各点构成K个顶点的新的复合形。
如此反复迭代计算,在可行域中不断以目标函数值低的新点代替目标函数值最大的坏点从而构成新复合形,使复合形不断向最优点移动和收缩,直至收缩到复合形的各顶点与其形心非常接近、满足迭代精度要求时为止。
最后输出复合形各顶点中的目标函数值最小的顶点作为近似最优点。
三、程序清单:
#include
#include
#definep1.3
#definek4
floatfr,fh;
floatxr[2][1],xc[2][1];
intxb_h,xb_xh;
floatf(floatx[2][1]);
floatx1[2][1]={{2.2},{0.55}};
floatx2[2][1]={{2.4},{0.63}};
floatx3[2][1]={{2.6},{0.65}};
floatx4[2][1]={{2.8},{0.7}};
floatMax_value,Min_value,Max_h_value;
floatshuzu[4];
voidhanshu_Maxvalue(void);
voidhanshu_Max_h_value(void);
voidzhshuzu(void);
voidhanshu_Minvalue(void);
voidchu_h(void);
intke_xr(void);
intmain(void)
{intkexing_flag=0;
zhshuzu();
hanshu_Minvalue();
hanshu_Maxvalue();
hanshu_Max_h_value();
chu_h();
while(ke_xr())
{kexing_flag=1;
switch(xb_xh)
{case1:
fr=f(xr);
fh=f(x1);
if(fr{x1[0][0]=xr[0][0];
x1[1][0]=xr[1][0];}
break;
case2:
fr=f(xr);
fh=f(x2);
if(fr{x2[0][0]=xr[0][0];
x2[1][0]=xr[1][0];}
break;
case3:
fr=f(xr);
fh=f(x3);
if(fr{x3[0][0]=xr[0][0];x3[1][0]=xr[1][0];}break;
case4:
fr=f(xr);fh=f(x4);if(fr{x4[0][0]=xr[0][0];x4[1][0]=xr[1][0];}break;}if(kexing_flag==1)break;}
printf("替换后结果为");
printf("x1=");
printf("[%.1f,%.2f]\n",x1[0][0],x1[1][0]);
printf("输出\n");
printf("x2=");
printf("[%.1f,%.2f]\n",x2[0][0],x2[1][0]);
printf("x3=");
printf("[%.1f,%.2f]\n",x3[0][0],x3[1][0]);
printf("x4=");
printf("[%.1f,%.2f]\n",x4[0][0],x4[1][0]);
return0;
}
floatf(floatx[2][1])
{floathanshuvalue;
hanshuvalue=(25*1.0)/(x[0][0]*pow(x[1][0],3));
returnhanshuvalue;}
voidzhshuzu(void)
{shuzu[0]=f(x1);shuzu[1]=f(x2);shuzu[2]=f(x3);shuzu[3]=f(x4);}
voidhanshu_Minvalue(void)
{inti;Min_value=shuzu[0];
for(i=0;i<4;i++)
if(shuzu[i]<=Min_value)
Min_value=shuzu[i];
}
voidhanshu_Max_h_value(void)
{
inti;
Max_h_value=shuzu[0];
for(i=0;i<4;i++)
{
if(xb_h==i)
continue;
else
if(shuzu[i]>=Max_h_value)
Max_h_value=shuzu[i];}
}
voidhanshu_Maxvalue(void)
{
inti;
Max_value=shuzu[0];
for(i=0;i<4;i++)
if(shuzu[i]>=Max_value)
{
Max_value=shuzu[i];
xb_h=i;}}
voidchu_h(void)
{switch(xb_h)
{
case0:
xc[0][0]=1.0*(x2[0][0]+x3[0][0]+x4[0][0])/(k-1);
xc[1][0]=1.0*(x2[1][0]+x3[1][0]+x4[1][0])/(k-1);
xr[0][0]=xc[0][0]+p*(xc[0][0]-x1[0][0]);
xr[1][0]=xc[1][0]+p*(xc[1][0]-x1[1][0]);
xb_xh=1;
break;
case1:
xc[0][0]=1.0*(x1[0][0]+x3[0][0]+x4[0][0])/(k-1);
xc[1][0]=1.0*(x1[1][0]+x3[1][0]+x4[1][0])/(k-1);
xr[0][0]=xc[0][0]+p*(xc[0][0]-x2[0][0]);
xr[1][0]=xc[1][0]+p*(xc[1][0]-x2[1][0]);
xb_xh=2;
break;
case2:
xc[0][0]=1.0*(x1[0][0]+x2[0][0]+x4[0][0])/(k-1);
xc[1][0]=1.0*(x1[1][0]+x2[1][0]+x4[1][0])/(k-1);
xr[0][0]=xc[0][0]+p*(xc[0][0]-x3[0][0]);
xr[1][0]=xc[1][0]+p*(xc[1][0]-x3[1][0]);
xb_xh=3;
break;
case3:
xc[0][0]=1.0*(x1[0][0]+x2[0][0]+x3[0][0])/(k-1);
xc[1][0]=1.0*(x1[1][0]+x2[1][0]+x3[1][0])/(k-1);
xr[0][0]=xc[0][0]+p*(xc[0][0]-x3[0][0]);
xr[1][0]=xc[1][0]+p*(xc[1][0]-x3[1][0]);
xb_xh=4;
break;}}
intke_xr(void)
{if((30*1.0/(xr[0][0]*pow(xr[1][0],3))-50)<=0){
if((0.0004*xr[0][0]*xr[1][0]-0.001)<=0)
if(2<=xr[0][0]&&xr[0][0]<=4)
if(0.5<=xr[1][0]&&xr[1][0]<=1)return1;}
elsereturn0;}
四、实验结果(要求附上程序运行结果截图)
五、手算过程
计算初始复合形各顶点的值
f(X1)=68.3f(X2)=48.2
f(X3)=35.0f(X4)=26.0
坏点X(H)=X1好点X(L)=X4
去掉坏点后各点的几何中心X(C)
X(C)=[2.6,0.65]取映射α=1.3
映射X(R)=X(C)+α(X(C)-X(H))=[2.82,0.78]
将映射点代入约束条件验证
0.0004*2.82*0.78-0.001=-0.0001202<0
满足约束条件
X(R)=[2.82,0.78]是新的复合形顶点
最优点为X(R)=[3.12,0.78]