1、 机械优化设计实验报告 (一) 题目:用复合形法求约束优化问题 ;;的最优解。 基本思路:在可行域中构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。 (二) 复合形法的计算步骤 1) 选择复合形
2、的顶点数k,一般取,在可行域内构成具有k个顶点的初始复合形。 2) 计算复合形个顶点的目标函数值,比较其大小,找出最好点xL、最坏点xH、及此坏点xG.. 3) 计算除去最坏点xH以外的(k-1)个顶点的中心xC。判别xC是否可行,若xC为可行点,则转步骤4);若xC为非可行点,则重新确定设计变量的下限和上限值,即令,然后转步骤1),重新构造初始复合形。 4) 按式计算反射点xR,必要时改变反射系数α的值,直至反射成功,即满足式。然后xR以取代xH,构成新的复合形。 5) 若收敛条件得到满足,计算终止。约束最优解为:。 (三) 复合形法程序框图见下图: 是 否 否 否 否
3、 是 是 是 是 否 求反射点 计算各顶点的目标函数值 f(xj)(j=1,2,……,k) 一次坏点xG代替最坏点xH 结 束 xR可行? xC可行? ? 计算出去xH后的各顶点中心 将各定点的目标函数值和坐 标按目标函数值的大小排序 形成初始复合形的k个顶点 xj(j=1,2,……,k) 输入 n,k,ε 开 始
4、
(四) 源程序如下:
#include
5、eturn ff;
}
#include
6、tf("\n x1=%.5f x2=%.5f f(x1,x2)=%.5f\n\n ",x[0],x[1],f);
}
/*wsd说明 n 优化模型维数 k复合形顶点数 kg 约束函数个数 ep 收敛精度 x a初始点下限 b初始点上限 xcom进程中的优化结果 *f */
#include
7、 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);
for(i=0;i
8、ent(int n,int k,int ll,int lh,double x0[],double xcom[][100])
{
int i,l;
double xs;
for(i=0;i
9、uble xcom[][100],double fxk[])
{
int l,lp,lp1,i;
double temp;
for(l=0;l 10、p]=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)
{
int i,iw,l,ll,lh,it;
double fx,fx0,sdx,fxh,fxr,alp;
double *x0=(double*)calloc(n,sizeof(double) 11、);
double *xh=(double*)calloc(n,sizeof(double));
double *xr=(double*)calloc(n,sizeof(double));
double *fxk=(double*)calloc(k,sizeof(double));
double *g=(double*)calloc(kg,sizeof(double));
s5: for(i=0;i 12、gau(x,g,kg);
if(iw==0)
goto s5;
for(i=0;i 13、 if(iw==0)
goto s5;
for(i=0;i 14、}
for(l=0;l 15、 X(%d)min=%.5f ",i+1,x0[i]);
printf(" Fmin=%.5f\n",fx0);
for(i=0;i 16、];
for(i=0;i 17、 if(alp>1.0e-4)
{
alp=alp*0.5;
goto s12;
}
lh=lh+1;
if(lh<3)goto s22;
}
for(i=0;i
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818