遺傳算法的經(jīng)典解析(2008-08-17 102247)_第1頁
遺傳算法的經(jīng)典解析(2008-08-17 102247)_第2頁
遺傳算法的經(jīng)典解析(2008-08-17 102247)_第3頁
遺傳算法的經(jīng)典解析(2008-08-17 102247)_第4頁
遺傳算法的經(jīng)典解析(2008-08-17 102247)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.遺傳算法的經(jīng)典解析(2008-08-17 10:22:47)標簽:遺傳算法 雜談  分類:科學研究遺傳算法的經(jīng)典解析-看了以后就會用ga了zhanhuichong 發(fā)表于: 2008-6-14 10:42 來源: Matlab中文學習站下面是英國sheffield大學的ga工具箱的經(jīng)典編寫程序示例,大家可以根據(jù)它,對相關數(shù)據(jù)修改就可以解決一切ga問題了至于matlab自帶的ga工具箱,使用相當簡單,真正工程應用沒有sheffield大學的ga工具箱應用廣泛,這里就不多累贅了記住使用時將下面的大寫全部改為小寫Nvar=20;%變量個數(shù)Nind=100;%種群大小Subpop

2、=10;%子種群數(shù)量Maxgen=500;%最大遺傳代數(shù)Miggen=20;%每隔20代發(fā)生遷移Range=0;200;%變量范圍Ggap=0.8;%代溝率Xovr=1;%交叉率Mutr=1/xovr;%變異率Insr=0.9;%插入率Migr=0.2;%遷移率Selfun=sus;%選擇函數(shù)Xovfun=recdis;%重組函數(shù)Mutfun=mutbga;%變異函數(shù)Gen=0;Trace=zeros(maxgen,2);%遺傳算法性能跟蹤FieldDD=rep(range,1,nvar);%譯碼矩陣Chorm=crtrp(nind,fieldDD);%創(chuàng)建初始種群Objv=objfun(ch

3、orm);%計算目標函數(shù)While gen<maxgenFitv=ranking(objv,2,1,subpop);%分配適度值Selch=selet(selfun,chorn,fitv,ggap,subpop);%選擇recch=recombin(xovfun,selch,xovr,subpop);%重組mutch=mutate(mutfun,recch,fieldDD,mutr,subpop);%變異objvoff=objfun(mutch);%計算目標函數(shù)值chorm,objv=reins(chorm,mutch,subpop,1 indr,objv,objvoff);%替

4、代Gen=gen+1;trace(gen,1) =min(objv);Trace(gen,2)=mean(objv);%在子種群中遷移個體If  (rem(gen,miggen)=0)chorm,objv=migrate(chor,subpop,migr,1,1,objv);EndEndyy,ii=min(objv);%輸出最有解及序號Figure(1)Plot(chorm(ii,-ro);Figure(2);%遺傳算法性能跟蹤圖Plot(trace(:,1);Hold onPlot(trace(:,2),-.r);Legend(解的變化,種群均值的變化);Xlabel(迭

5、代次數(shù)); 本帖最后由 zhanhuichong 于 2008-6-14 11:08 編輯 未命名.bmp最新回復zhanhuichong at 2008-6-15 12:18:36 因為每個個體對應一組染色體,故經(jīng)常叫種群中的個體為染色體而每個染色體有好多基因組成,每個基因就是對應為題的每一個變量1.函數(shù)bs2rvphen=bs2rv(chrom,fieldD)根據(jù)譯碼矩陣fieldD將二進制串矩陣chorm轉(zhuǎn)換成實值向量,返回矩陣包含對應的種群表現(xiàn)型。fieldD=len;lb;ub;code;scale;lbin;ubinlen:指明chorm中每個變量(基因)的二進制編碼的長度,滿足s

6、um(len)=size(chorm,2)lb和ub:分別指明每個變量使用的上下邊界code:指明每個變量的編碼方式,1為標準二進制編碼,0為格雷編碼scale:指明每個變量的是否使用對數(shù)或算術刻度,1是對數(shù)刻度,0為算術刻度lbin和ubin:指明表示范圍總是否包含每個邊界,1表示包含,0不包含比如:fieldD=5  6  9  7       %len                

7、;      0  -5  -1  9       %lb                      10 0 10 20       %ub                 &#

8、160;    0  1  1  1             %code                      0  1  0  1         %scale 

9、                    1  1  1  0           %lbin                      0  1  0

10、  0         %ubin表示chrom的每個個體(染色體)的編碼規(guī)則為:共有4個變量(即每個染色體有4個基因),第1個基因體是使用5位標準二進制編碼,上下邊界為0 10,只包含上邊界的算術刻度第2個基因體是使用6位格雷二進制編碼,上下邊界為-5 0,包含上下邊界的對數(shù)刻度2.crtbasebasevec=crtbase(lind,base)產(chǎn)生向量的元素對應染色體每個基因的基數(shù)(每個變量的范圍)lind:每個染色體的基因(變量)個數(shù),sum(lind)=變量個數(shù),且length(lind)=length(

11、base)base:對應每個基因的基數(shù)比如:>>basevec=crtbase(2 3 4 2,10 20 15 8)結果為:>>basevec=10 10 20 20 20 15 15 15 15 8 8上面表示創(chuàng)建有2+3+4+2=11個基因(變量)的染色體(個體)前兩的變量的取值為0-9,接著三個0-19,還有四個0-14,最后兩個0-7由上面可以看出basevec其實可使用matlab的其它簡單命令創(chuàng)建,因此很少用到它,一般使用rep。再強調(diào)一下,簡單一點說basevec其實就是每個變量的基數(shù)(取值范圍)3.crtbpnewchrom,newlind,newba

12、sevec=crtbp(nind,lind,basevec)創(chuàng)建離散隨機初始種群,經(jīng)常和crtbase一起使用basevec:其實就是上面創(chuàng)建的basevec向量nind:種群中染色體(個體)的數(shù)量lind:變量的個數(shù),即lind=length(basevec)注意在basevec給出時,lind可以省略,但要是basevec沒有給出,則lind必須給,此時默認創(chuàng)建取值為0-1的種群比如:>>basevec=crtbase(3,2,8,5)>>chrom1=crtbp(3,5)%創(chuàng)建一個有3個個體,5個變量的初始種群>>chrom2=crtbp(4,5,ba

13、sevec)%4*5的種群,等效chrom2=crtbp(4, basevec)結果為:>>basevec=8 8 8 5 5>>chrom1=0 1 0 0 01 1 0 1 01 0 1 1 0>>chrom2=6 5 7 0 47 1 3 4 23 7 1 0 46 6 4 4 3-前三個函數(shù)一般只是在離散編碼中使用-4.crtrpchrom=crtrp(nind,fieldDR)創(chuàng)建由任意個體組成的實值隨機原始種群nind:種群中個體數(shù)量fieldDR:是一個2*nvar的二維矩陣,表示每個變量的取值上下限比如:創(chuàng)建一個含有3個個體,4個變量的隨機種

14、群>>fieldDR=-100  -50  -30  -20                     100   50   30   20;>>chrom=crtrp(3,fieldDR)>>chrom=40.23   -17.17   28.00 &#

15、160;15.38                82.26   13.25    18.52   -9.09               -90.20   -13.25   7.89     9.255.migratechrom,objv=migrate(c

16、hrom,subpop,migopt,objv)完成當前種群的子種群間的遷移,并返回遷移后的種群subpop:子種群的數(shù)量migopt:migopt(1)個體遷移率,默認0.2migopt(2)遷移方式,0為均勻遷移,1為適應度的遷移,默認0migopt(3)遷移種群結構,0為完全網(wǎng)狀,1為臨近結構,2為環(huán)狀,默認0objv:為目標函數(shù)值列向量,當migopt(2)=1是必須給出6.mutatenewchorm=mutate(mutfun,oldchrom,fieldDR,mutopt,sunbpop)執(zhí)行種群變異mutfun:變異函數(shù)fieldDR:變量的取值范圍,實值型時為2*nvar的二

17、維矩陣,離散型時為1*nvar向量mutopt:mutopt(1)變異率,實值型默認1/nvar,離散型默認0.7/lindmutopt(2)壓縮變異的范圍,取值范圍為0 1,默認1(不可壓縮),注意當為離散型時不需要給出7.rankingfinnv=ranking(objv,rfun,subpop)按照個體的目標值objv由小到大的順序?qū)λ鼈冞M行排序,并返回一包含個體適應度值的fitnv的列向量rfun:rfun(2)指定排序方法,0為線性,1為非線性,默認0rfun(1)指定壓差,當rfun(2)=0時,取值為1 2,默認為2,當rfun(2)=1時,取值為1 length(objv)-2

18、     另外還可以length(objv)=length(rfun),此時它則包含對每一行的適應度值計算至于scaling一般使用很少,這里就不介紹了8.recombinnewchrom=recombine(recfun,oldchrom,recopt,subpop)執(zhí)行基因重組recfun:變異函數(shù)recopt:重組交叉率9.reinsnewchrom,newobjvch=reins(chrom,selch,subpop,insopt,objvch,objvsel)完成插入子代到當前種群,用子代代替父代并返回結構種群,本函數(shù)屬于選擇函數(shù),但是為了恢復

19、種群數(shù)量,必須要有,它沒有與select重復oldchrom:父代種群selch:子代種群insopt:insopt(1)指明選擇方法,0為均勻選擇,1為基于適應度的選擇insopt(2)重插入的比率,在0 1,默認1objvch:是chrom的目標值(基于適應度的選擇,該參數(shù)必須有)objvsel:是selch中個體目標值(基于適應度的選擇,該參數(shù)必須有)10.selectselch=select(selfun,chrom,fitnv,ggap,subpop)從種群chrom中選擇優(yōu)良個體selfun:選擇函數(shù)fitnv:列向量,chrom的個體適應度值ggap:代溝率,默認1.0 本帖最后

20、由 zhanhuichong 于 2008-6-15 12:24 編輯 zhanhuichong at 2008-6-15 12:29:53 下面是簡單算例解釋ga編程的一般順序                                        |-|計算目標函數(shù)- |                                                   

溫馨提示

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

評論

0/150

提交評論