一、程式設計流程及引數選取
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的基因串的長度...