演化算法作業(yè)_第1頁
演化算法作業(yè)_第2頁
演化算法作業(yè)_第3頁
演化算法作業(yè)_第4頁
演化算法作業(yè)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

利用演化算法求約束優(yōu)化問題姓名: 學(xué)號 指導(dǎo)老師:1問題:用遺傳算法求解下列約束優(yōu)化問題:一、sin3(2二x1)sin(2二x2)maxf(x1,x2)xi(x1X2)其中:2g1(x)=xi-x21<0g2(x)=1-x2+(x2-4)2<00Mxi<10,0<x2<102演化算法計算過程:個體的編碼:采用實數(shù)向量編碼, 每一個個體是一實數(shù)對。 本文采用二進制編碼, 自變量精度取小數(shù)點后三位,一個自變量需要二進制位數(shù)為 14位,總共需要28位二進制來編碼兩個自變量。譯碼:將二進制編碼翻譯為變量的實數(shù)形式: xj=dec(14位二進制位用)*0.01(i=1,2)適應(yīng)函數(shù):本文使用目標函數(shù)作為適應(yīng)函數(shù)選擇策略:采用輪盤賭算法。雜交算子:隨機挑選兩條不同的染色體,隨機選出雜交位點 kw[0,L-1],然后交換片段。完成后檢查重組后的染色體是否滿足約束條件, 若不滿足,則舍棄,恢復(fù)原染色體并重新雜交,直到完成15對染色體的雜交。變異算子:隨機生成14個隨機數(shù)pie[0,1]對應(yīng)于每條染色體的每個基因位點,若 pi<pm則對該基因位點進行變異。 同時完成變異后檢查是否滿足約束條件, 若不滿足,則舍棄變異,恢復(fù)染色體并重新變異直到滿足約束條件為止。參數(shù)設(shè)置:種群規(guī)模為30,最大代數(shù)為1000代,雜交概率0.9,變異概率0.1初始化:隨機產(chǎn)生初始種群,自動生成初始群體,完成檢查是否滿足約束條件, 若不滿足,則重新初始化直到有30個個體滿足約束條件為止。終止條件:算法運行所指定的最大代數(shù)后終止,即 1000代后終止迭代。

33實驗結(jié)果表1四次實驗結(jié)果比對表迭代次數(shù)500迭代次數(shù)1000A次運行第二次運行第三次運行第四次運行Xi1.2271.2481.2451.253X23.3033.3423.2593.251maxf(x1,x2)0.109440110450.093851245410.114697976850.11279980732由表1可以看出迭代次數(shù)越多遺傳算法的效果可能越好;并且多次迭代結(jié)果較為穩(wěn)定,證明沒有陷入局部優(yōu)化。表2某2次迭代過程表代數(shù)(迭代總次數(shù)1000)X1X2maxf(x1,x2)11.2894.3630.05720063406280318311.2954.230.07322047082080911751.2924.2540.075195615866267181341.2414.2560.094659884583908491371.2254.2620.09525349615511472最終結(jié)果1.2254.2620.0952534961551147211.3373.2460.056900429479572031.3213.3060.06461712393829212101.2973.2960.08375858854088097481.2813.2750.097390379205658811491.2713.2190.10366960257048366最終結(jié)果1.2713.2190.10366960257048366由表2可以看出迭代結(jié)果在經(jīng)過若干代后已經(jīng)趨于穩(wěn)定; 同時隨著迭代次數(shù)的增加,最優(yōu)值越來越靠近目標值。對原有遺傳算法進行改進,在進行重組時將最好的兩個個體保留下來直接進入下一次迭代,剩余個體繼續(xù)保持原來重組方式。表3不同遺傳算法運算比對表原遺傳算子改進遺傳算子第三次運行第四次運行第五次案六次x11.2451.2531.2671.251x23.2593.2513.2353.249maxf(x1,x2)0.114697976850.112799807320.106877506920.11349618572由表3可以看出實驗結(jié)果穩(wěn)定。附錄(演化算法java實現(xiàn)代碼)importjava.lang.Math;importjava.util.Random;publicclassGA{publicstaticfinalintPOP_SIZE=30;//種群數(shù)目publicstaticString[]pop=newString[POP_SIZE];//種群編碼publicstaticPair[]result=newPair[POP_SIZE];//種群代表的結(jié)果publicstaticfinalintLENGTH=28;//編碼長度,因為要精確到小數(shù)點后六位,所以編為22位長,有一公式可參考publicstaticdouble口fitness=newdouble[POP_SIZE];//存放種群適應(yīng)度publicstaticfinaldoublePC=0.90;//交叉率publicstaticfinaldouble PM=0.1;//變異率publicstaticdouble口p=newdouble[POP_SIZE];//輪盤賭方法個體適應(yīng)度概率publicstaticdouble口q=newdouble[POP_SIZE];//q[i]是前i項p之和publicstaticPairpair=newPair(0,0);publicstaticMaxmax=newMax(0,pair);//最大值publicstaticRandomirandom=newRandom();//用于廣生隨機數(shù)的工具/*約束條件*/public{staticdoublegx1(Pairresult)returnMath.pow(result.getX1(),2)-result.getX2()+1;)publicstaticdoublegx2(Pairresult){return1-Math.pow(result.getX1(),2)+Math.pow(result.getX2()-4,2);)/*初始化種群*/publicvoidinitialization(){Stringa="0000000000000000000000000000" ;for(inti=0;i<pop.length;i++){pop[i]=a;)for(inti=0;i<POP_SIZE;i++){StringBuffers=newStringBuffer(pop[i]);for(intj=0;j〈LENGTHj++){doubletemp=Math.random();if(temp<0.5)s.setCharAt(j,'0');elses.setCharAt(j,'1');)//剔除不符合約束的初始化pop[i]=s.toString();decoding();fitness();if(gx1(result[i])>0||gx2(result[i])>0||result[i].getX1()>10||result[i].getX1()>10)i--;))/**解碼方法,將二進制字節(jié)碼還原為解*/publicvoiddecoding(){for(inti=0;i<POP_SIZE;i++){String subX1=pop[ i ].substring(0,14);String subX2=pop[ i ].substring(14,28);double x1=Integer. parseInt(subX1 , 2);double x2=Integer. parseInt(subX2,2);result[i]=newPair(x1*0.001,x2*0.001);))/*適應(yīng)度函數(shù),也是目標函數(shù)*/publicvoidfitness(){for(inti=0;i<result.length;i++){[i].getX1()),fitness[i]=Math.pow(Math.sin(2*Math.PI*result3)*Math.sin(2*Math.PI*result[i].getX2())[i].getX1()),/(Math.pow(result[i].getX1(),3)*(result[i].getX1()+result[i].getX2()));))/*交叉操作*/publicvoidcrossover(){for(inti=0;i<POP_SIZE/2;i++)

doubled=random.nextDouble();if(d<PC)(int k1=random.nextInt( POP_SIZE);int k2=random.nextInt( POP_SIZE);while(k1==k2||k1==1||k1==2||k2==1||k2==2)(k1=(int)random.nextInt(POP_SIZE);k2=(int)random.nextInt( POP_SIZE);}intposition =random.nextInt( LENGTH;Strings11=null,s12=null,s21=null,s22=nullposition);position,LENGTH);position);position);position,LENGTH);position);position,LENGTH);pop[k2]=s21+s12;//恢復(fù)不符合約束的重組,再重組decoding();fitness();[k2])if(gx1(result[k1])>0||gx2(result[k1])>0||gx1(result[k2])>0||gx2(result>0||[k2])result[k1].getX1()>10||result[k2].getX1()>10)(pop[k1]=s11+s12;pop[k2]=s21+s22;i--;decoding();fitness();}}}}/**變異操作*/publicvoidmutation()(for(inti=2;i<pop.length;i++)Strings=pop[i];for(intj=0;j<LENGTHj++)

(doublek=random.nextDouble();if(k<PM(s);StringBuffersb=newStringBuffer(if(sb.charAt(j)=='0')sb.setCharAt( j,'1');s);elsesb.setCharAt( j,'0');pop[i]=sb.toString();}}//恢復(fù)不符合約束的變異,重新變異decoding();fitness();if(gx1(result[i])>0||gx2(result[i])>0||result[i].getX1()>10||result[i].getX1()>10)(pop[i]=s;i--;decoding();fitness();}}}/**輪盤賭方法算法*/publicvoidroulettewheel()doublesum=0;for(inti=0;doublesum=0;for(inti=0;(sum=fitness}for(inti=0;(p[i]=fitness}for(inti=0;i<POP_SIZE;i++)[i]+sum;i<POP_SIZE;i++)[i]/sum;i<POP_SIZE;i++)for(intj=0;j<=i;j++)(q[i]+=P[j];))double[]ran=newdouble[POP_SIZE];String[]tempPop=newString[POP_SIZE];for(inti=0;i<ran.length;i++)(ran[i]=random.nextDouble();)for(inti=0;i<ran.length;i++)(intk=0;while(ran[i]>q[k])(k++;)tempPop[i]=pop[k];)for(inti=0;i<tempPop.length;i++)(pop[i]=tempPop[i];))publicvoidevaluate()(for(inti=0;i<fitness.length;i++)(if(fitness[i]>max.getMax())(maxsetMax(fitness[i]);maxsetPair( result[i]);)))publicstaticvoidmain(String[]args)(GAga=newGA();System. out.println( "初始化中..");System. out.println();ga.initialization();ga.decoding();ga.fitness();for(inti=0;i<1000;i++)(ga.roulettewheel();ga.decoding。;ga.fitness();ga.crossover();ga.mutation();ga.decoding。;ga.fitness();ga.evaluate();System.out.println(i+"."+"最優(yōu)解為:X1="+max.getPair().getX1()+"\tX2="+max.getPair().getX2()+"\tMax="+max.max);}System. out .println();System. out .println( "迭代結(jié)果為:");System. out .println( "最優(yōu)解為:\rX1="+max.getPair().getX1()+"\r'n" +"X2="+max.getPair().getX2());System.out.println("函數(shù)最大值\rf="+max.getMax());/*測試代碼段*/doublea=Math.pow(Math.sin(2*Math.PI*max.getPair().getX1()),3)*Math.sin(2*Math.PI*max.getPair().getX2())/(Math.pow(max.getPair().getX1(),3)*(max.getPair().getX1()+ max.getPair().getX2()));doublegx1=Math.pow(max.getPair().getX1(),2)- max.getPair().getX2()+1;doublegx2=1-Math.pow

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論