版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、遺傳算法實例:也是自己找來的,原代碼有少許錯誤,本人都已更正了,調(diào)試運行都通過了的。對于初學(xué)者,尤其是還沒有編程經(jīng)驗的非常有用的一個文件遺傳算法實例%下面舉例說明遺傳算法%求如下函數(shù)的最大值 % f(x)=10*sin(5x)+7*cos(4x) x 0,10 %將x的值用一個10位的二值形式表示為二值問題,一個10位的二值數(shù)提供的分辨率是每為(10-0)/(2A10-1)0.01 。%將變量域0,10離散化為二值域0,1023, x=0+10*b/1023, 其中b 是0,1023 中的一個二值數(shù)。% %編程% 2.1初始化(編碼)% initpop.m 函數(shù)的功能是實現(xiàn)群體的初始化,pop
2、size表示群體的大小,chromlength表示染色體的長度(二值數(shù)的長度),%長度大小取決于變量的二進制編碼的長度(在本例中取10位)。%遺傳算法子程序煩始化function pop=in itpop(popsize,chromle ngth)pop=rou nd(ra nd(popsize,chromle ngth); % rand隨機產(chǎn)生每個單元為0,1 行數(shù)為popsize,列數(shù)為 chromlength 的矩陣,% roud對矩陣的每個單元進展圓整。這樣產(chǎn)生的初始種群。% 2.2計算目標(biāo)函數(shù)值% 將二進制數(shù)轉(zhuǎn)化為十進制數(shù)(1)%遺傳算法子程序滬生2An 2A( n-1) . 1的行
3、向量,然后求和,將二進制轉(zhuǎn)化為十進制function pop2=decodeb in ary(pop)px,py=size(pop); % 求 pop 行和列數(shù)for i=1:pypop1(:,i)=2.A(py-i).*pop(:,i);endpop2=sum(pop1,2); % 求 pop1 的每行之和% 將二進制編碼轉(zhuǎn)化為十進制數(shù)(2)% decodechrom.m函數(shù)的功能是將染色體(或二進制編碼)轉(zhuǎn)換為十進制,參數(shù) spoint表示 待解碼的二進制串的起始位置% (對于多個變量而言,如有兩個變量,采用 從1開始,另一個變量從 11開始。本例為 %參數(shù)1ength表示所截取的長度本例
4、為 %遺傳算法子程序20為表示,每個變量10為,如此第一個變量1),10。%各二進制編碼轉(zhuǎn)換成十進制function pop2=decodechrom(pop,spo in t,le ngth)pop仁pop(:,spo in t:spo in t+le ngth-1); pop2=decodeb in ary(pop1);% 計算目標(biāo)函數(shù)值%calobjvalue.m函數(shù)的功能是實現(xiàn)目標(biāo)函數(shù)的計算,其公式采用本文示例仿真,可根據(jù)不同優(yōu)化問題予以修改。%遺傳算法子程序澈現(xiàn)目標(biāo)函數(shù)的計算function objvalue=calobjvalue(pop)temp1=decodechrom(pop
5、,1,10); % 將 pop 每行轉(zhuǎn)化成十進制數(shù)x=temp1*10/1023; % 將二值域 中的數(shù)轉(zhuǎn)化為變量域的數(shù)objvalue=10*si n(5*x)+7*cos(4*x); % 計算目標(biāo)函數(shù)值% 2.3計算個體的適應(yīng)值%遺傳算法子程序% 十算個體的適應(yīng)值function fitvalue=calfitvalue(objvalue)global Cmi n;Cmi n=0;px,py=size(objvalue);for i=1:pxif objvalue(i)+Cm in>0temp=Cm in+objvalue(i);elsetemp=0.0;endfitvalue(i)
6、=temp;endfitvalue=fitvalue'% 2.4選擇復(fù)制%選擇或復(fù)制操作是決定哪些個體可以進入下一代。程序中采用賭輪盤選擇法選擇,這種方法較易實現(xiàn)。%根據(jù)方程pi=fi/ 刀fi=fi/fsum ,選擇步驟:% 1在第t代,由1式計算fsum和pi% 2產(chǎn)生0,1的隨機數(shù) rand(.),求 s=rand( .)*fsum% 3求刀fi > s中最小的k,如此第k個個體被選中% 4進展N次2、3操作,得到 N個個體,成為第t=t+1 代種群%遺傳算法子程序%選擇復(fù)制function n ewpop=select ion( pop,fitvalue)totalfit
7、=sum(fitvalue); % fitvalue=fitvalue/totalfit; % fitvalue=cumsum(fitvalue);求適應(yīng)值之和單個個體被選擇的概率%如 fitvalue=12 3 4,如此 cumsum(fitvalue)=13 6 10px,py=size(pop);ms=sort(ra nd(px,1); % fiti n=1;newin=1;while newin<=pxif(ms( newi n)<fitvalue(fit in) n ewpop( newin)=pop(fiti n); newin=newin+1;從小到大排列elsefi
8、t in=fit in+1;endend% 2.5交叉%交叉(crossover),群體中的每個個體之間都以一定的概率pc交叉,即兩個個體從各自字符串的某一位置%一般是隨機確定開始互相交換,這類似生物進化過程中的基因分裂與重組。例如,假設(shè)2個父代個體x1,x2為:%x1=0100110%x2=1010001%從每個個體的第 3位開始交叉,交又后得到2個新的子代個體y1,y2分別為:%y1=0100001%y2=1010110%這樣2個子代個體就分別具有了2個父代個體的某些特征。利用交又我們有可能由父代個體在子代組合成具有更高適合度的個體。%事實上交又是遺傳算法區(qū)別于其它傳統(tǒng)優(yōu)化方法的主要特點之
9、一。%遺傳算法子程序濃叉function n ewpop=crossover(pop,pc)px,py=size(pop);n ewpop=on es(size(pop);for i=1:2:px-1if(ran d<pc)cpo int=roun d(ra nd*py);n ewpop(i,:)=pop(i,1:cpo in t),pop(i+1,cpo in t+1:py);n ewpop(i+1,:)=pop(i+1,1:cpoi nt),pop(i,cpoi nt+1:py); elsen ewpop(i,:)=pop(i);n ewpop(i+1,:)=pop(i+1);end
10、end % 2.6變異%變異(mutation),基因的突變普遍存在于生物的進化過程中。變異是指父代中的每個個體的每一位都以概率pm翻轉(zhuǎn),即由“ 1"變?yōu)椤?0",%或由“0"變?yōu)椤?"。遺傳算法的變異特性可以使求解過程隨機地搜索到解可能存在的整 個空間,因此可以在一定程度上求得全局最優(yōu)解。%遺傳算法子程序%變異function n ewpop=mutatio n( pop,pm)px,py=size(pop);n ewpop=on es(size(pop);for i=1:pxif(ran d<pm)mpoint=roun d(ra nd*py)
11、;if mpoin t<=0mpoin t=1;endn ewpop(i)=pop(i);if any(n ewpop(i,mpo in t)=0n ewpop(i,mpo in t)=1;elsen ewpop(i,mpo in t)=0;endelsen ewpop(i)=pop(i);endend% 2.7求出群體中最大得適應(yīng)值與其個體%遺傳算法子程序%求出群體中適應(yīng)值最大的值function besti ndividual,bestfit=best(pop,fitvalue)px,py=size(pop);besti ndividual=pop(1,:);bestfit=fitv
12、alue(1);for i=2:pxif fitvalue(i)>bestfit besti ndividual=pop(i,:); bestfit=fitvalue(i);endend% 2.8主程序%遺傳算法主程序 clearclfpopsize=20; %群體大小chromlength=1O; % 字符串長度個體長度pc=0.6; %交叉概率pm=0.001; %變異概率pop=in itpop(popsize,chromle ngth); %隨機產(chǎn)生初始群體for i=1:20 %20為迭代次數(shù)objvalue=calobjvalue(pop); % 計算目標(biāo)函數(shù)fitvalue
13、=calfitvalue(objvalue); %計算群體中每個個體的適應(yīng)度n ewpop=select ion( pop,fitvalue); %復(fù)制n ewpop=crossover(pop,pc); % 交叉n ewpop=mutati on( pop,pc); %變異best in dividual,bestfit=best(pop,fitvalue); %求出群體中適應(yīng)值最大的個體與其適應(yīng)值y(i)=max(bestfit);n(i)=i;pop5=besti ndividual;x(i)=decodechrom(pop5,1,chromle ngth)*10/1023;pop=n
14、ewpop;end fplot('10*s in (5*x)+7*cos(4*x)',0 10)hold onplot(x,y,'r*')hold offz in dex=max(y); %計算最大值與其位置x5=x(index)%計算最大值對應(yīng)的x值y=z【問題】求f(x)=x 10*sin(5x) 7*cos(4x)的最大值,其中 0<=x<=9【分析】選擇二進制編碼,種群中的個體數(shù)目為10,二進制編碼長度為 20,交叉概率為0.95,變異概率為0.08【程序清單】%編寫目標(biāo)函數(shù)function sol,eval=fit ness(sol,opt
15、i ons)x=sol(1);eval=x 10*sin(5*x) 7*cos(4*x);%把上述函數(shù)存儲為fitness.m文件并放在工作目錄下in itPop=i nitializega(10,0 9,'fi tn ess');%生成初始種群,大小為10x endPop,bPop,trace=ga(0 9,'fitness',initPop,1e-6 11,'maxGe nTerm',25,' normGeomSelect',.0.08,'arithXove門,2,' nonUn ifMutati on
16、9;,2 25 3) %25次遺傳迭代運算借過為:x =7.8562 24.8553( 當(dāng) x 為 7.8562 時,f x 丨取最大值 24.8553)注:遺傳算法一般用來取得近似最優(yōu)解,而不是最優(yōu)解。遺傳算法實例2【問題】在5<=Xi<=5,i=1,2 區(qū)間內(nèi),求解 f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.A2 x2.A2)-exp(0.5*(cos(2*pi*x1)cos(2*pi*x2) 22.71282的最小值。【分析】種群大小10,最大代數(shù)1000,變異率0.1,交叉率0.3【程序清單】%源函數(shù)的matlab代碼function eval=
17、f(sol)nu mv=size(sol,2);x=sol(1: numv); eval=-20*exp(-0.2*sqrt(sum(x.A2)/numv)-exp(sum(cos(2*pi*x)/numv) 22.71282;%適應(yīng)度函數(shù)的matlab代碼function sol,eval=fit ness(sol,opti ons)nu mv=size(sol,2)-1;x=sol(1: numv);eval=f(x);eval=-eval;%遺傳算法的matlab代碼bou nds=o nes(2,1)*-5 5;p,e ndPop,bestSols,trace=ga(bo un ds,
18、'fit ness')注:前兩個文件存儲為m文件并放在工作目錄下,運行結(jié)果為p =0.0000 -0.0000 0.0055大家可以直接繪出f(x)的圖形來大概看看f x的最值是多少,也可是使用優(yōu)化函數(shù)來驗 證。matlab命令行執(zhí)行命令:fplot('x 10*sin(5*x) 7*cos(4*x)',0,9)evalops是傳遞給適應(yīng)度函數(shù)的參數(shù),opts是二進制編碼的精度,termops是選擇maxGenTerm 完畢函數(shù)時傳遞個maxGenTerm的參數(shù),即遺傳代數(shù)。xoverops是傳遞給交叉函數(shù)的參數(shù)。mutops是傳遞給變異函數(shù)的參數(shù)。【問題】求
19、f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中 0<=x<=9【分析】選擇二進制編碼,種群中的個體數(shù)目為 10,二進制編碼長度為 20,交叉概率為0.95, 變異概率為0.08【程序清單】%編寫目標(biāo)函數(shù)function sol,eval=fit ness(sol,opti ons)x=sol(1);eval=x+10*si n(5*x)+7*cos(4*x);%把上述函數(shù)存儲為fitness.m文件并放在工作目錄下in itPop=i nitializega(10,0 9,'fi tn ess');%生成初始種群,大小為10x endPop,b
20、Pop,trace=ga(0 9,'fitness',initPop,1e-6 11 ,'maxGe nTerm',25,' normGeomSelect',.0.08,'arithXove門,2,' nonUn ifMutati on ',2 25 3) %25次遺傳迭代運算借過為:x =7.8562 24.8553( 當(dāng) x 為 7.8562 時,f x 丨取最大值 24.8553)注:遺傳算法一般用來取得近似最優(yōu)解,而不是最優(yōu)解。遺傳算法實例2【問題】在5<=Xi<=5,i=1,2 區(qū)間內(nèi),求解f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.A2+x2.A2)-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省山大附中高三9月月考語文試題(含答案)
- 智研咨詢發(fā)布-2024年中國可降解塑料行業(yè)產(chǎn)業(yè)鏈全景分析及發(fā)展趨勢預(yù)測報告
- 二零二五年度綠色能源項目委托投標(biāo)合作協(xié)議3篇
- 項目式學(xué)習(xí)在初中英語閱讀教學(xué)中的應(yīng)用研究
- 2025版物業(yè)管理企業(yè)清潔服務(wù)外包委托合同3篇
- 建筑市政工程質(zhì)量安全第三方巡查方案
- 高端餐飲銷售工作總結(jié)
- 二零二五年度個人信息保密與數(shù)據(jù)安全保障合同3篇
- 二零二五年度汽車制造廠行車維修保障協(xié)議2篇
- 物流行業(yè)運輸安全管理總結(jié)
- 2024版全文:中國2型糖尿病預(yù)防及治療指南
- 社會主義發(fā)展史(齊魯師范學(xué)院)知到智慧樹章節(jié)答案
- 課程思政融入高職院校應(yīng)用文寫作課程教學(xué)路徑探析
- 2024全新鋼結(jié)構(gòu)安全培訓(xùn)
- 2025屆高三數(shù)學(xué)一輪復(fù)習(xí)-分段函數(shù)專項訓(xùn)練【含答案】
- 《工程力學(xué)》課程教學(xué)大綱
- 7.1.2 直觀圖的畫法-【中職專用】高一數(shù)學(xué)教材配套課件(高教版2021·基礎(chǔ)模塊下冊)
- 皮膚癬菌病的分子診斷工具
- SL+575-2012水利水電工程水土保持技術(shù)規(guī)范
- 人美版初中美術(shù)知識點匯總八年級全冊
- 迅雷網(wǎng)盤最最最全影視資源-持續(xù)更新7.26
評論
0/150
提交評論