资源描述:
《优化设计混合惩罚函数法程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、源程序:packageHyBrid;publicclasshybrid{publicstaticintcount=1;publicstaticdouble[]x={1,30};publicstaticdoubler=3,c=0.7,w1=0;publicstaticdoubledv[]=newdouble[2];publicstaticdoublex1[]=newdouble[2];publicdoublefunction(doublex1,doublex2){//目标函数return120*x1+x2;}pub
2、licdoubleg1(doublex1,doublex2){//约束条件一doubleG1=-x1;returnG1;}publicdoubleg2(doublex1,doublex2){//约束条件二doubleG2=-x2;returnG2;}publicdoubleg3(doublex1,doublex2){//约束条件三doubleG3=1-0.25*x2;returnG3;}publicdoubleg4(doublex1,doublex2){//约束条件四doubleG4=1-7*x1*x2/45;r
3、eturnG4;}publicdoubleg5(doublex1,doublex2){//约束条件五doubleG5=1-7*Math.pow(x1,3)*x2/45;returnG5;}publicdoubleg6(doublex1,doublex2){//约束条件六doubleG6=1-Math.pow(x2,2)*x1/320;returnG6;}publicdoublefun(doublex[],doubler){//构建惩罚函数doubleFUN=0;doublef=function(x[0],x[1]
4、);doubleg10=g1(x[0],x[1]);doubleg20=g2(x[0],x[1]);doubleg30=g3(x[0],x[1]);doubleg40=g4(x[0],x[1]);doubleg50=g5(x[0],x[1]);doubleg60=g6(x[0],x[1]);/*判断条件一的正负*/if(g10<0){FUN-=r/g10;}else{FUN+=(1.0/r)*Math.pow(g10,2);}/*判断条件二的正负*/if(g20<0){FUN-=r/g20;}else{FUN+=
5、(1.0/r)*Math.pow(g20,2);}/*判断条件三的正负*/if(g30<0){FUN-=r/g30;}else{FUN+=(1/r)*Math.pow(g30,2);}/*判断条件四的正负*/if(g40<0){FUN-=r/g40;}else{FUN+=(1/r)*Math.pow(g40,2);}/*判断条件五的正负*/if(g50<0){FUN-=r/g50;}else{FUN+=(1/r)*Math.pow(g50,2);}/*判断条件六的正负*/if(g60<0){FUN-=r/g60;
6、}else{FUN+=(1/r)*Math.pow(g60,2);}returnf+FUN;}publicdouble[]reflect(doublea,doublex3[],doublexh[]){//反射double[]result1=newdouble[2];result1[0]=x3[0]+a*(x3[0]-xh[0]);result1[1]=x3[1]+a*(x3[1]-xh[1]);returnresult1;}publicdouble[]stretch(doublec,doublex3[],doub
7、lex4[]){//延伸double[]result2=newdouble[2];result2[0]=x3[0]+c*(x4[0]-x3[0]);result2[1]=x3[1]+c*(x4[1]-x3[1]);returnresult2;}publicdouble[]shrink(doubleb,doublex3[],doublexh[]){//收缩double[]result3=newdouble[2];result3[0]=x3[0]+b*(xh[0]-x3[0]);result3[1]=x3[1]+b*
8、(xh[1]-x3[1]);returnresult3;}publicvoidnarrow(doublex0[],doublex1[],doublex2[],doublexe[]){//缩小x0[0]=0.5*(x0[0]+xe[0]);x0[1]=0.5*(x0[1]+xe[1]);x1[0]=0.5*(x1[0]+xe[0]);x1[1]=0.5*(x1[1]+xe[