資源描述:
《混合法求極值程序C語言》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、優(yōu)化設(shè)計(jì)作業(yè)混合懲罰函數(shù)法求極值輪機(jī)研李凱2011129026混合懲罰函數(shù)法求極值程序#include#includedoubledv[2];doublexl[2];〃目標(biāo)函數(shù)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;}〃懲罰函數(shù)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);}〃單純形法求最優(yōu)解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);/*****判斷好點(diǎn)、壞點(diǎn)*****/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);/*****求中心點(diǎn)、反射點(diǎn)*****/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]);/*****判斷除好點(diǎn)、壞點(diǎn)以外的點(diǎn)]*****/for(l=0;l<=2;l++)if(l!=m&&l!=n)break;fl=fun(x[l][0],x[l][l],r);嚴(yán)***宣分類判斷*****/if(f[4]>fe)/*****反射點(diǎn)函數(shù)值比好點(diǎn)差*****/if(f[4]>fl)/*****反射點(diǎn)函數(shù)值比除壞點(diǎn)以外的點(diǎn)都差****勺{if(f[4J>=fh)/*****反射點(diǎn)函數(shù)值比壞點(diǎn)還差,反射失敗*****/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/*****反射點(diǎn)比除壞點(diǎn)以x[6][l]=x⑶[l]+0.5*(xh[l]-x[3][l]);外的點(diǎn)好*****/if(fl6]>fh)/*****收縮失敗,縮小
7、邊長(zhǎng)*****/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/*****反射點(diǎn)比好點(diǎn)還好{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];/*****反射點(diǎn)
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]