机械优化设计-复合型法.doc

上传人:b****3 文档编号:2356220 上传时间:2022-10-29 格式:DOC 页数:8 大小:115.50KB
下载 相关 举报
机械优化设计-复合型法.doc_第1页
第1页 / 共8页
机械优化设计-复合型法.doc_第2页
第2页 / 共8页
机械优化设计-复合型法.doc_第3页
第3页 / 共8页
机械优化设计-复合型法.doc_第4页
第4页 / 共8页
机械优化设计-复合型法.doc_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

机械优化设计-复合型法.doc

《机械优化设计-复合型法.doc》由会员分享,可在线阅读,更多相关《机械优化设计-复合型法.doc(8页珍藏版)》请在冰豆网上搜索。

机械优化设计-复合型法.doc

机械优化设计实验报告

(一)题目:

用复合形法求约束优化问题

;;的最优解。

基本思路:

在可行域中构造一个具有K个顶点的初始复合形。

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

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

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

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

3)计算除去最坏点xH以外的(k-1)个顶点的中心xC。

判别xC是否可行,若xC为可行点,则转步骤4);若xC为非可行点,则重新确定设计变量的下限和上限值,即令,然后转步骤1),重新构造初始复合形。

4)按式计算反射点xR,必要时改变反射系数α的值,直至反射成功,即满足式。

然后xR以取代xH,构成新的复合形。

5)若收敛条件得到满足,计算终止。

约束最优解为:

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

求反射点

计算各顶点的目标函数值

f(xj)(j=1,2,……,k)

一次坏点xG代替最坏点xH

结束

xR可行?

xC可行?

计算出去xH后的各顶点中心

将各定点的目标函数值和坐

标按目标函数值的大小排序

形成初始复合形的k个顶点

xj(j=1,2,……,k)

输入n,k,ε

开始

(四)源程序如下:

#include

doubleobjfx(doublex[])

{

doubleff;

ff=(x[0]-5)*(x[0]-5)+4*(x[1]-6)*(x[1]-6);

returnff;

}

#include

voidmain()

{

voidcomple(intn,intk,intkg,doubleep,doublex[],doublebl[],doublebu[],doublexcom[][100],double*f);

doublea[]={0,0},b[]={10,20},f,x[2],xcom[2][100];

comple(2,3,3,0.00001,x,a,b,xcom,&f);

printf("\n\n\n输出最优解及目标函数值:

\n");

printf("\nx1=%.5fx2=%.5ff(x1,x2)=%.5f\n\n",x[0],x[1],f);

}

/*wsd说明n优化模型维数k复合形顶点数kg约束函数个数ep收敛精度xa初始点下限b初始点上限xcom进程中的优化结果*f*/

#include

#include

#include

doubleobjfx(doublex[]);

voidconstraint(doublex[],doubleg[]);

voidconstraint(doublex[],doubleg[])

{

g[0]=64-x[0]*x[0]-x[1]*x[1];

g[1]=x[1]-x[0]-10;

g[2]=x[0]-10;

}

intgau(doublex[],doubleg[],intkg)

{

inti;

constraint(x,g);

for(i=0;i

{

if(g[i]>0)

gotos33;

}

return1;

s33:

return0;

}

voidxcent(intn,intk,intll,intlh,doublex0[],doublexcom[][100])

{

inti,l;

doublexs;

for(i=0;i

{

xs=0;

for(l=0;l

{

if(l!

=lh)

xs=xs+xcom[i][l];

}

if(lh>-1)

x0[i]=xs/(ll-1);

else

x0[i]=xs/ll;

}

}

voidfxse(intn,intk,doublex[],doublexcom[][100],doublefxk[])

{

intl,lp,lp1,i;

doubletemp;

for(l=0;l

for(lp=0;lp

{

lp1=lp+1;

if(fxk[lp]<=fxk[lp1])

{

temp=fxk[lp];

fxk[lp]=fxk[lp1];

fxk[lp1]=temp;

for(i=0;i

{

x[i]=xcom[i][lp];

xcom[i][lp]=xcom[i][lp1];

xcom[i][lp1]=x[i];

}

}

}

}

voidcomple(intn,intk,intkg,doubleep,doublex[],doublebl[],doublebu[],doublexcom[][100],double*f)

{

inti,iw,l,ll,lh,it;

doublefx,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));

double*fxk=(double*)calloc(k,sizeof(double));

double*g=(double*)calloc(kg,sizeof(double));

s5:

for(i=0;i

x[i]=bl[i]+rand()/40000.0*(bu[i]-bl[i]);

iw=gau(x,g,kg);

if(iw==0)

gotos5;

for(i=0;i

xcom[i][0]=x[i];

for(l=1;l

for(i=0;i

xcom[i][l]=bl[i]+rand()/50000.0*(bu[i]-bl[i]);

lh=-1;

for(ll=1;ll

{

xcent(n,k,ll,lh,x0,xcom);

iw=gau(x0,g,kg);

if(iw==0)

gotos5;

for(i=0;i

x[i]=xcom[i][ll+1];

s24:

iw=gau(x,g,kg);

if(iw==0)

{

for(i=0;i

x[i]=x0[i]+0.5*(x[i]-x0[i]);

gotos24;

}

else

{

for(i=0;i

xcom[i][ll+1]=x[i];

}

}

for(l=0;l

{

for(i=0;i

x[i]=xcom[i][l];

fx=objfx(x);

fxk[l]=fx;

}

it=0;

s14:

it=it+1;

printf("\n\n\nN=%2d\n",it);

lh=-1;

xcent(n,k,k,lh,x0,xcom);

fx0=objfx(x0);

iw=gau(x0,g,kg);

for(i=0;i

printf("X(%d)min=%.5f",i+1,x0[i]);

printf("Fmin=%.5f\n",fx0);

for(i=0;i

printf("G(%d)min=%.5f",i,g[i]);

sdx=0;

for(l=0;l

sdx=sdx+(fx0-fxk[l])*(fx0-fxk[l]);

sdx=sqrt(sdx/(double)k);

if(sdx

fxse(n,k,x,xcom,fxk);

lh=0;

s22:

fxh=fxk[lh];

for(i=0;i

xh[i]=xcom[i][lh];

xcent(n,k,k,lh,x0,xcom);

iw=gau(x0,g,kg);

if(iw==0)gotos36;

alp=1.3;

s12:

for(i=0;i

xr[i]=x0[i]+alp*(x0[i]-xh[i]);

iw=gau(xr,g,kg);

if(iw==0)

{

alp=alp*0.5;

gotos12;

}

fxr=objfx(xr);

if(fxr>=fxh)

{

if(alp>1.0e-4)

{

alp=alp*0.5;

gotos12;

}

lh=lh+1;

if(lh<3)gotos22;

}

for(i=0;i

xcom[i][lh]=xr[i];

fxk[lh]=fxr;

gotos14;

s36:

for(i=0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1