资源描述:
《混合法求极值程序C语言》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、优化设计作业混合惩罚函数法求极值轮机研李凯2011129026混合惩罚函数法求极值程序#include#includedoubledv[2];doublexl[2];〃目标函数doublefunc(doublexl,doublex2){return((x1-2)*(x1-2)+(x2-l)*(x2-1));}〃约束条件doublehj(doublexl,doublex2){return(xl・2*x2+l);1doublegi(doublexl,doublex2){doubleg=0.25*x1*x1+x
2、2*x2・1;if(g<0)return0;elsereturng;}〃惩罚函数doublefun(doublexl,doublex2,doubler){doublef=func(xl,x2);doubleh=hj(xl,x2);doubleg二gi(xl,x2);return(f+r/g+(g*g+h*h)/r);}〃单纯形法求最优解voidF(doublexl,doublex2,doubledv[2],doubler){doublex[7][2];doublemax,min,t,xh[2],xe[2],f[6],fe,fh,fl;in
3、ti,l,m,n,k=0;x[0][0]=xl;x[0][l]=x2;x[l][0]=2.5;x[l][l]=3;x⑵roi=3;x[2][l]=2.5;do{for(i=0;iv=2;i++)f[i]=fun(x[i][01,x[i][l],r);/*****判断好点、坏点*****/max=min=f[0];m=n=0;for(i=0;i<=2;i++){if(f[i]>max){max=f[i];m=i;}if(f[i]4、hlO],xh[1J,r);xe[0]=x[n][0];xefl]=x[n][ll;fe=fun(xe[0],xe[l],r);/*****求中心点、反射点*****/for(i=0;i<2;i++)x[3][i]=0.5*(x[0][i]+x[l][i]+x[2][i]-xh[i]x[4][i]=x[3][i]+l*(x[3][i]-xh[i]);}f[3]=fun(x[3][0],x⑶[l],r);f[4]=fun(x[4]lO],x[4]Ll],r);xh[0]=x[4J[0];xh[1]=xl4][1];x⑹[0]=x[3][0
5、]+0.5*(xh[0]-x[3][0]);/*****判断除好点、坏点以外的点]*****/for(l=0;l<=2;l++)if(l!=m&&l!=n)break;fl=fun(x[l][0],x[l][l],r);严***宣分类判断*****/if(f[4]>fe)/*****反射点函数值比好点差*****/if(f[4]>fl)/*****反射点函数值比除坏点以外的点都差****勺{if(f[4J>=fh)/*****反射点函数值比坏点还差,反射失败*****/x[6][l]=x[3][l]+0.5*(xh[l]-x[3][l]
6、);f[6]=fun(x[6][0],x[6][l],r);if(f[6]>fh)for(i=0;i<=2;i++){x[i][0]=0.5*(x[i][0]+xe[0]);x[i][l]=0.5*(x[i][l]+xe[l]);elsex[m][0]=x[6][0];x[m][l]=x⑹[1];x[6][0]=x[3][0]+0.5*(xh[0]-x[3][0]);else/*****反射点比除坏点以x[6][l]=x⑶[l]+0.5*(xh[l]-x[3][l]);外的点好*****/if(fl6]>fh)/*****收缩失败,缩小
7、边长*****/for(i=0;i<=2;i++)*****/f[6]=fun(x[6][0],x[6][l],r);{x[m][0]=x[4][0J;x[m][l]=x[4][l];}else/*****反射点比好点还好{X⑸[0]=x⑶[0]+2*(x[4][0]・x[3][0]);x[i][0]=0.5*(x[i][0J+xe[0]);x[i][l]=0.5*(x[i][l]+xe[l]);}else/*****收缩成功,形成新的单纯矩阵*****/x[m][0]=x[6][0];x[m][l]=x[6][l];/*****反射点
8、仅比最x⑸[l]=x⑶⑴+2*(x[4][l]-x[3][l]);f[5]=fun(x[5][0],x[5][l],r);if(f[5]>fe){x[m][0]=x[4][0];x[m][l]