MATLAB遗传算法工具箱的函数及实例
?
遺傳算法(GA)是一種進化算法,是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。
遺傳算法把問題參數編碼為染色體,利用層層迭代的方式進行選擇、交叉以及變異等運算交換種群中染色體信息,最終生成符合優化目標的染色體。
本文將使用到Sheffield遺傳算法工具箱。Sheffield遺傳算法工具箱是由英國謝菲爾德大學開發的。該工具箱提供了大量的遺傳算法應用到的m函數,為我們研究遺傳算法提供了非常多的便捷。
我將在下面通過一個實例來介紹遺傳算法的過程。下面的實例是利用遺傳算法尋找一元函數的最小值。
%%?畫出函數圖figure(1);hold on;lb=1;ub=2; ?%函數自變量范圍[1,2]ezplot('sin(10*pi*X)/X',[lb,ub]); ??%畫出函數曲線xlabel('自變量/X')ylabel('函數值/Y')%% 定義遺傳算法參數NIND=40; ? ? ? ?%個體數目MAXGEN=20; ? ? ?%最大遺傳代數PRECI=20; ? ? ? %變量的二進制位數GGAP=0.95; ? ? ?%代溝px=0.7; ? ? ? ? %交叉概率pm=0.01; ? ? ? ?%變異概率trace=zeros(2,MAXGEN);?????????%尋優結果的初始值FieldD=[PRECI;lb;ub;1;0;1;1]; ?%區域描述器Chrom=crtbp(NIND,PRECI);???????%初始種群%% 優化算法(主要部分)gen=0;??????????????????%計算迭代次數X=bs2rv(Chrom,FieldD); ?%計算初始種群的十進制轉換ObjV=sin(10*pi*X)./X; ? %計算目標函數值while gen<MAXGEN???FitnV=ranking(ObjV);???????????????????%分配適應度值 ? SelCh=select('sus',Chrom,FitnV,GGAP); ?%選擇 ? SelCh=recombin('xovsp',SelCh,px); ? ? ?%重組 ? SelCh=mut(SelCh,pm); ? ? ? ? ? ? ? ? ? %變異 ? X=bs2rv(SelCh,FieldD); ? ? ? ? ? ? ? ? %子代個體的十進制轉換 ? ObjVSel=sin(10*pi*X)./X; ? ? ? ? ? ? ? %計算子代的目標函數值 ? [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新種群 ? X=bs2rv(Chrom,FieldD);???gen=gen+1;????????????????????????????????????%計算迭代次數加一 ? %獲取每代的最優解及其序號,Y為最優解,I為個體的序號 ? [Y,I]=min(ObjV); ? trace(1,gen)=X(I); ? ? ? ? ? ? ? ? ? ? ? ? ? ?%記下每代的最優值 ? trace(2,gen)=Y; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %記下每代的最優值endplot(trace(1,:),trace(2,:),'bo'); ?%畫出每代的最優點grid on;plot(X,ObjV,'b*'); ? %畫出最后一代的種群hold off%% 畫進化圖figure(2);plot(1:MAXGEN,trace(2,:));grid onxlabel('遺傳代數')ylabel('解的變化')title('進化過程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最優解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])由定義遺傳算法參數部分可知,我們將生成的種群包含40個個體,每個個體長度為20,最大遺傳迭代次數為20次。代溝為0.95,交叉概率為0.7,變異概率為0.01。
優化部分為遺傳算法的核心內容,其中也大量使用謝菲爾德工具箱中提供的m函數,綠色標記即為所使用函數。
crtbp函數
功能:該函數功能為創建初始離散隨機種群。
一般調用格式:Chrom=crtbp(種群個體數,個體長度)
bs2rv函數
功能:二進制到十進制的轉換
一般調用格式:Phen=bs2rv(Chrom,Field)
ranking函數
功能:基于排序的適應度分配
一般調用格式:FitnV=ranking(ObjV)
selcet函數
功能:從種群中選擇個體
一般調用格式:SelCh=select('sus',Chrom,FitnV,GGAP)
recombin函數
功能:重組個體
一般調用格式:SelCh=recombin('recdis',Chrom)
mut函數
功能:離散變異算子
一般調用格式:SelcCh=mut(NewChrom,pm)
reins函數
功能:重插入子代到種群
一般調用格式:Chrom=reins(Chrom,SelCh)
過程可表述為:初代種群通過分配適應度值進行淘汰選擇,再進行重組,再進行變異而得到第二代種群,第二代種群重插入到初代種群而產生新種群。
注:假設數據為二進制,則在重組中每一列不會產生0或1個數的變化。而變異會使某種群個體中某一長度編碼變化,即某幾個元素由0變1或是由1變0,從而使0和1數量發生變化。重插入指后代種群中某幾個種群直接取代了前代某幾個種群,即發生某一行的全部替代。
運行上述代碼后可得到結果為:取值點X=1.1497,最小值Y=-0.86977
?
該圖中圈符號為每代最優解,星符號為優化20代后的種群分布。兩者大部分集中在一個點,該點即為最優解。
該圖為最優解的迭代過程。
需要源碼請在文章下留言
總結
以上是生活随笔為你收集整理的MATLAB遗传算法工具箱的函数及实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 一个页面引用多个文件,如何防
- 下一篇: 数学建模常用网站