04 遺傳演算法的MATLAB程式設計

2021-09-25 03:02:56 字數 3208 閱讀 5181

一、程式設計流程及引數選取

1、遺傳演算法的程式設計偽**

begin t=0;%遺傳代數

初始化p(t);初始化種群或染色體

計算p(t)的適應值;

while(不滿足停止準則)do

begin

t=t+1;

從p(t-1)中選擇p(t);%選擇

重組p(t);%交叉和變異

計算p(t)的適應值;

endend

2、遺傳演算法的引數設計原則

(1)種群的規模:種群規模的乙個建議值為0~100 。

(2)變異概率:變異概率一般取為0.0001~0.2 。

(3)交配概率:交配概率一般取0.4~0.99 。

(4)進化代數:進化代數一般取100~500 。

(5)種群初始化:初始種群的生成是隨機的。在初始種群的賦予之前,盡  量進行乙個大概的區間估計,以免初始種群分布在遠離全域性最優解的編碼空     間,導致遺傳演算法的搜尋範圍受到限制,同時也為演算法減輕負擔。

二、matlab遺傳演算法工具箱

1、ga工具箱簡介

為了省略艱深難懂的遺傳演算法數學理論和降低程式開發的難度,matlab軟體已經將遺傳演算法命令進行了封裝,做成專門的遺傳演算法工具箱—ga toolbox

2、工具箱核心函式的用法

(1)函式ga

函式ga的語法格式

[x,fval,reason] = ga (@fitnessfun,nvars,options)
其中,x為經過遺傳進化後自變數最佳染色染體返回值(最佳解),fval為最佳染色體的適應度(最佳值),reason為演算法停止的原因,@fitnessfun為適應度控制代碼函式;nvars為目標函式自變數的個數;options為演算法的屬性設定,該屬性是通過函式gaoptimset賦予的 ;

(2)函式gaoptimset

函式gaoptimset的語法格式為

options=gaoptimset(『propertyname1』,』propertyvalue1』, 『propertyname2』,』propertyvalue2』, 

『propertyname3』,』propertyvalue3』,…….)

函式gaoptimset實現的功能為,設定遺傳演算法的引數和控制代碼函式,下圖所列為函式gaoptimset常用的11種屬性。

由於遺傳演算法本質上是一種啟發式的隨機運算,演算法程式經常重複執行多次才能得到理想結果。鑑於此,可以將前一次執行得到的最後種群作為下一次執行的初始種群,如此操作會得到更好的結果。例如:

[x,fval,reason,output,final_pop]=ga(@fitnessfcn,nvars);
最後乙個輸出變數final_pop返回的就是本次執行得到的最後種群。再將final_pop作為函式ga的初始種群,語法格式為

options=gaoptimset('initialpopulation',finnal_pop);

[x,fval,reason,output,finnal_pop2]=ga(@fitnessfcn,nvars,options);

三、genetic algorithm and direct search toolbox 適應度函式設計

例項1  遺傳演算法和直接搜尋工具箱中的函式ga是求解目標函式的最小值,所以求目標函式最小值的問題,可直接令目標函式為適應度函式(注意:這裡是求最小值)。編寫適應度函式,語法格式如下:

function f=fitnessfcn(x)%x為自變數向量

f=f(x);

例項2 如果有約束條件(包括自變數的取值範圍),對於求解函式的最小值問題,可以使用如下語法格式:

function f=fitnessfcn(x)

if(x<=-1)lx>3)%表示有約束x>-1和x<=3,其他約束條件類推

f=inf;

else

f=f(x);

end

例項3如果有約束條件(包括自變數的取值範圍),對於求解函式的最大值問題,可以使用如下語法格式

function f=fitnessfcn(x)

if(x<=-1)|x>3)

f=inf;

else

f=-f(x);%注意,這裡f=-f(x)而不是f=f(x)

end

若目標函式作為適應度函式,則最終得到的目標函式值為一fval而不是fval。

四、程式設計範例

首先編寫函式f(x)的檔案

function f=lbw(x)

if(x(1)>30|x(1)30|x(2)30|x(3)30|x(4)30|x(5)>30|x(5)30|x(6)30|x(7)30|x(8)30|x(9)30|x(10)

f=300;

else

f=-2*pi*exp(-0.2*sqrt(1/10*((x(1)).^2+(x(2)).^2+(x(3)).^2+(x(4)).^2+(x(5)).^2+(x(6)).^2+(x(7)).^2+(x(8)).^2+(x(9)).^2+(x(10)).^2)))-exp(1/10*(cos(2*pi*x(1))+cos(2*pi*x(2))+cos(2*pi*x(3))+cos(2*pi*x(4))+cos(2*pi*x(5))+cos(2*pi*x(6))+cos(2*pi*x(7))+cos(2*pi*x(8))+cos(2*pi*x(9))+cos(2*pi*x(10))))+2*pi;

end

編寫主函式

options=gaoptimset('generations',800,'stallgenlimit',300,'plotfcns',@gaplotbestf);

[x,f]=ga(@lbw,10,options)

執行結果: 

Matlab遺傳演算法例項

clear clc popsize input 輸入種群大小 n lengh input 請輸入染色體長度 n popsize 100 lengh 10 a 1 b 2 y x sin 10 pi x 1.0 初始種群 pop round rand popsize,lengh 行 種群大小,列 染色...

遺傳演算法的matlab實現

遺傳演算法是一種全域性最優化演算法,是運用了演化論優勝劣汰原理的隨機化搜尋方法。前些日子,在進行畢業設計的相關研究中,我接觸到了遺傳演算法,用其對乙個五元非線性函式進行最優化搜尋。平台使用的是matlab,主要使用的是謝菲爾德大學的matlab遺傳演算法工具箱。具體程式如下 clc clear al...

遺傳演算法(GA)的matlab實現

一 task 二 實現過程 1.編碼與解碼 編碼 在編碼之前需要確定求解的精度,設定求解的精度為小數點後六位,即10 6。這樣可以將每個自變數x的解空間劃分為 1 0 10 6 1000000個等分。使n滿足 1 0 10 6 2 n 1,這裡n表示使上式成立的最小整數,即表示自變數x的基因串的長度...