資源描述:
《遺傳算法入門最好的例子+matlab源程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、WORD格式可編輯遺傳算法入門最好的例子+Matlab源程序例:求下述二元函數(shù)的最大值:(1)個體編碼遺傳算法的運算對象是表示個體的符號串,所以必須把變量x1,x2編碼為一種符號串。本題中,用無符號二進制整數(shù)來表示。因x1,x2為0~7之間的整數(shù),所以分別用3位無符號二進制整數(shù)來表示,將它們連接在一起所組成的6位無符號二進制數(shù)就形成了個體的基因型,表示一個可行解。例如,基因型X=101110所對應(yīng)的表現(xiàn)型是:x=[5,6]。個體的表現(xiàn)型x和基因型X之間可通過編碼和解碼程序相互轉(zhuǎn)換。(2)初始群體
2、的產(chǎn)生遺傳算法是對群體進行的進化操作,需要給其淮備一些表示起始搜索點的初始群體數(shù)據(jù)。本例中,群體規(guī)模的大小取為4,即群體由4個個體組成,每個個體可通過隨機方法產(chǎn)生。如:011101,101011,011100,111001(3)適應(yīng)度汁算遺傳算法中以個體適應(yīng)度的大小來評定各個個體的優(yōu)劣程度,從而決定其遺傳機會的大小。本例中,目標函數(shù)總?cè)》秦撝担⑶沂且郧蠛瘮?shù)最大值為優(yōu)化目標,故可直接利用目標函數(shù)值作為個體的適應(yīng)度。(4)選擇運算選擇運算(或稱為復(fù)制運算)把當前群體中適應(yīng)度較高的個體按某種規(guī)則或模
3、型遺傳到下一代群體中。一般要求適應(yīng)度較高的個體將有更多的機會遺傳到下一代群體中。專業(yè)知識分享WORD格式可編輯本例中,我們采用與適應(yīng)度成正比的概率來確定各個個體復(fù)制到下一代群體中的數(shù)量。其具體操作過程是:l先計算出群體中所有個體的適應(yīng)度的總和Sfi(i=1.2,…,M);l其次計算出每個個體的相對適應(yīng)度的大小fi/Sfi,它即為每個個體被遺傳到下一代群體中的概率;l每個概率值組成一個區(qū)域,全部概率值之和為1;l最后再產(chǎn)生一個0到1之間的隨機數(shù),依據(jù)該隨機數(shù)出現(xiàn)在上述哪一個概率區(qū)域內(nèi)來確定各個個體
4、被選中的次數(shù)。(5)交叉運算交叉運算是遺傳算法中產(chǎn)生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。本例采用單點交叉的方法,其具體操作過程是:?先對群體進行隨機配對;?其次隨機設(shè)置交叉點位置;?最后再相互交換配對染色體之間的部分基因。專業(yè)知識分享WORD格式可編輯(6)變異運算變異運算是對個體的某一個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產(chǎn)生新個體的一種操作方法。本例中,我們采用基本位變異的方法來進行變異運算,其具體操作過程是:?首先確定出各個個體的基因變
5、異位置,下表所示為隨機產(chǎn)生的變異點位置,其中的數(shù)字表示變異點設(shè)置在該基因座處;?然后依照某一概率將變異點的原有基因值取反。對群體P(t)進行一輪選擇、交叉、變異運算之后可得到新一代的群體p(t+1)。從上表中可以看出,群體經(jīng)過一代進化之后,其適應(yīng)度的最大值、平均值都得到了明顯的改進。事實上,這里已經(jīng)找到了最佳個體“111111”。[注意]專業(yè)知識分享WORD格式可編輯需要說明的是,表中有些欄的數(shù)據(jù)是隨機產(chǎn)生的。這里為了更好地說明問題,我們特意選擇了一些較好的數(shù)值以便能夠得到較好的結(jié)果,而在實際運
6、算過程中有可能需要一定的循環(huán)次數(shù)才能達到這個最優(yōu)結(jié)果?!綧atlab程序清單】clc;clearall;formatlong;%設(shè)定數(shù)據(jù)顯示格式%初始化參數(shù)T=10;%仿真代數(shù)N=4;%群體規(guī)模pm=0.05;pc=0.8;%交叉變異概率專業(yè)知識分享WORD格式可編輯umax=7;umin=1;%參數(shù)取值范圍L=3;%單個參數(shù)字串長度,總編碼長度2Lbval=round(rand(N,2*L));%初始種群bestv=-inf;%最優(yōu)適應(yīng)度初值%迭代開始forii=1:T%解碼,計算適應(yīng)度for
7、i=1:Ny1=0;y2=0;forj=1:1:Ly1=y1+bval(i,L-j+1)*2^(j-1);endx1=(umax-umin)*y1/(2^L-1)+umin;forj=1:1:Ly2=y2+bval(i,2*L-j+1)*2^(j-1);endx2=(umax-umin)*y2/(2^L-1)+umin;專業(yè)知識分享WORD格式可編輯obj(i)=x1.^2+x2.^2;%目標函數(shù)xx(i,:)=[x1,x2];endfunc=obj;%目標函數(shù)轉(zhuǎn)換為適應(yīng)度函數(shù)p=func./s
8、um(func);q=cumsum(p);%累加[fmax,indmax]=max(func);%求當代最佳個體iffmax>=bestvbestv=fmax;%到目前為止最優(yōu)適應(yīng)度值bvalxx=bval(indmax,:);%到目前為止最佳位串optxx=xx(indmax,:);%到目前為止最優(yōu)參數(shù)endBfit1(ii)=bestv;%存儲每代的最優(yōu)適應(yīng)度%%%%遺傳操作開始%輪盤賭選擇fori=1:(N-1)r=rand;專業(yè)知識分享WORD格式可編輯tmp=find(r<=q);ne