机械优化复合形法 程序设计Word文档下载推荐.docx
《机械优化复合形法 程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《机械优化复合形法 程序设计Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
g(x)30/(x1*x2*x2*x2)-50<
=0
G(x)0.0004*x1*x2-0.001<
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<
stdio.h>
math.h>
#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<
fh)
{x1[0][0]=xr[0][0];
x1[1][0]=xr[1][0];
}
break;
case2:
fh=f(x2);
if(fr<
{x2[0][0]=xr[0][0];
x2[1][0]=xr[1][0];
case3:
fh=f(x3);
{x3[0][0]=xr[0][0];
x3[1][0]=xr[1][0];
}break;
case4:
fh=f(x4);
if(fr<
{x4[0][0]=xr[0][0];
x4[1][0]=xr[1][0];
}if(kexing_flag==1)break;
}
printf("
替换后结果为"
);
x1="
[%.1f,%.2f]\n"
x1[0][0],x1[1][0]);
输出\n"
x2="
x2[0][0],x2[1][0]);
x3="
x3[0][0],x3[1][0]);
x4="
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];
i<
4;
{
if(xb_h==i)
continue;
else
if(shuzu[i]>
=Max_h_value)
Max_h_value=shuzu[i];
voidhanshu_Maxvalue(void)
Max_value=shuzu[0];
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;
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;
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;
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);
xb_xh=4;
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<
满足约束条件
X(R)=[2.82,0.78]是新的复合形顶点
最优点为X(R)=[3.12,0.78]