天天看點

遺傳算法matlab工具箱及其應用

前言

為了省略艱深難懂的遺傳算法數學理論和降低程式開發的難度,MATLAB軟體已經将遺傳算法指令進行了封裝,做成專門的遺傳算法工具箱(GA Toolbox),方 便使用者調用

1.ga函數

ga函數是對目标函數進行遺傳計算,其格式如下:

其中,fitnessfun為适應度句柄函數; nvars 為目标函數自變量的個數; options 為算法的屬性設定,該屬性是通過函數gaoptimset賦予的;x為經過遺傳進化以後自變量最佳染色體傳回值;fval為最佳染色體的适應度;exitflag為算法停止的原因;output為輸出的算法結構;population為最終得到種群适應度的列向量;scores為最終得到的種群。

例1 已知不等式

遺傳算法matlab工具箱及其應用

使用ga函數求x1,x2的值。

clear all;
clc;
A=[1 1;-1 2;2 1];
b =[2;2; 3];
lb = zeros(2,1);
[x,fval,exitflag] = ga(@lincontest6,2,A, b,[],[],lb)
           
遺傳算法matlab工具箱及其應用

2.gaoptimset函數

gaoptimset函數是設定遺傳算法的參數和句柄函數,如表介紹常用的11種屬性。

屬性名 預設值 實作功能
PopInitRange [0;1] 初始種群生成空間
PopulationSize 20 種群規模
CrossoverFraction 0.8 交配機率
MigrationFraction 0.2 變異機率
Generations 100 超過進化代數時算法停止
TimeLimit Inf 超過運算時間限制時算法停止
FitnessLimit Inf 最佳個體等于或小于适應度門檻值時算法停止
StallGenLimit 50 超過連續代數不進化則算法停止
StallTimeLimit 20 超過連續時間不進化則算法停止
InitialPopulation [ ] 初始化種群
PlotFens [ ] 繪圖函數

其使用格式如下:

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

最後一個輸出變量final_pop傳回的就是本次運作得到的最後種群。再将final_pop作為ga函數的初始種群,文法格式如下:

options = gaoptimset( 'InitialPopulation', finnal_ pop) ;
[x, fval, reason, output, finnal_pop2] = ga(@fitnessfcn, nvars, options) ;
           

遺傳算法和直接搜尋工具箱中的ga函數是求解目标函數的最小值,是以求目标函數最小值的問題,可直接令目标函數為适應度函數。編寫适應度函數,文法格式如下:

function f = fitnessfen(x)	%x為自變量向量
f=f(x);
           

如果有限制條件(包括自變量的取值範圍),對于求解函數的最小值問題,可以使用如下文法格式:

function f= fitnessfcn(x)
if( x<= -1|x>3)
%表示有限制x>-1和x<-3,其他限制條件類推
	f= inf;
else
	f= f(x); 	
end
           

如果有限制條件(包括自變量的取值範圍),對于求解函數的最大值問題,可以使用如下文法格式:

function f= fitnessfcn(x)
if(x<=-1|x>3)
	f= inf;
else
	f= -f(x);
%這裡 f=-f(x),而不是f=f(x)
end
           

若目标函數作為适應度函數,則最終得到的目标函數值為 -fval 而不是fval。

3.gaoptimget函數

該函數用于得到遺傳算法參數結構中的參數具體值。其調用格式如下:

其中,options為結構體變量;name為需要得到的參數名稱,傳回值為val。

例2 利用遺傳算法求解函數

f(x,y) = (cos(x2 +y2)-0.1)/(1+0.3(x2+y2)2)+3的最大值。

解:首先建立遺傳算法 的适應度函數。

function y= ga43(x)
	y= (cos(x(1)^2 + x(2)^3)-0.1)/(1+0.3* (x(1)^2+ x(2)^2)^2) + 3;
end
           

然後利用遺傳算法尋找函數最大值,在MATLAB指令行視窗輸人代碼如下:

結果:

遺傳算法matlab工具箱及其應用

繼續閱讀