乙個很好的遺傳演算法工具箱

2021-04-01 02:41:15 字數 3243 閱讀 3541

最近在搞遺傳演算法(ga)方面的東西,matlab 7.0.4中對原來的ga toolbox做了較大改進,第一印象就是速度比原來快了不少。但是對於如何改變其中的ga編碼方法我仍然找不到太好的方法。在薛定宇老師的matlab大觀園中找到了the ge***ic algorithm optimization toolbox (gaot) for matlab 5

,這是乙個相當好的遺傳演算法工具箱,有興趣的話可以到該**上去看看。

附:matlab遺傳演算法工具箱函式及例項講解

gaotv5

核心函式:

(1)function [pop]=initializega(num,bounds,eevalfn,eevalops,options)--初始種群的生成函式

【輸出引數】

pop--生成的初始種群

【輸入引數】

num--種群中的個體數目

bounds--代表變數的上下界的矩陣

eevalfn--適應度函式

eevalops--傳遞給適應度函式的引數

options--選擇編碼形式(浮點編碼或是二進位制編碼)[precision f_or_b],如

precision--變數進行二進位制編碼時指定的精度

f_or_b--為1時選擇浮點編碼,否則為二進位制編碼,由precision指定精度)

(2)function [x,endpop,bpop,traceinfo] = ga(bounds,evalfn,evalops,startpop,opts,...

termfn,termops,selectfn,selectops,xoverfns,xoverops,mutfns,mutops)--遺傳演算法函式

【輸出引數】

x--求得的最優解

endpop--最終得到的種群

bpop--最優種群的乙個搜尋軌跡

【輸入引數】

bounds--代表變數上下界的矩陣

evalfn--適應度函式

evalops--傳遞給適應度函式的引數

startpop-初始種群

opts[epsilon prob_ops display]--opts(1:2)等同於initializega的options引數,第三個引數控制是否輸出,一般為0。如[1e-6 1 0]

termfn--終止函式的名稱,如['maxgenterm']

termops--傳遞個終止函式的引數,如[100]

selectfn--選擇函式的名稱,如['normgeomselect']

selectops--傳遞個選擇函式的引數,如[0.08]

xoverfns--交叉函式名稱表,以空格分開,如['arithxover heuristicxover ******xover']

xoverops--傳遞給交叉函式的參數列,如[2 0;2 3;2 0]

mutfns--變異函式表,如['boundarymutation multinonunifmutation nonunifmutation unifmutation']

mutops--傳遞給交叉函式的參數列,如[4 0 0;6 100 3;4 100 3;4 0 0]

注意】matlab工具箱函式必須放在工作目錄下

【問題】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9

【分析】選擇二進位制編碼,種群中的個體數目為10,二進位制編碼長度為20,交叉概率為0.95,變異概率為0.08

【程式清單】

%編寫目標函式

function[sol,eval]=fitness(sol,options)

x=sol(1);

eval=x+10*sin(5*x)+7*cos(4*x);

%把上述函式儲存為fitness.m檔案並放在工作目錄下

initpop=initializega(10,[0 9],'fitness');%生成初始種群,大小為10

[x endpop,bpop,trace]=ga([0 9],'fitness',,initpop,[1e-6 1 1],'maxgenterm',25,'normgeomselect',...

[0.08],['arithxover'],[2],'nonunifmutation',[2 25 3]) %25次遺傳迭代

運算借過為:x =

7.8562 24.8553(當x為7.8562時,f(x)取最大值24.8553)

注:遺傳演算法一般用來取得近似最優解,而不是最優解。

遺傳演算法例項2

【問題】在-5<=xi<=5,i=1,2區間內,求解

f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。

【分析】種群大小10,最大代數1000,變異率0.1,交叉率0.3

【程式清單】

%源函式的matlab**

function [eval]=f(sol)

numv=size(sol,2);

x=sol(1:numv);

eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;

%適應度函式的matlab**

function [sol,eval]=fitness(sol,options)

numv=size(sol,2)-1;

x=sol(1:numv);

eval=f(x);

eval=-eval;

%遺傳演算法的matlab**

bounds=ones(2,1)*[-5 5];

[p,endpop,bestsols,trace]=ga(bounds,'fitness')

注:前兩個檔案儲存為m檔案並放在工作目錄下,執行結果為

p =

0.0000 -0.0000 0.0055

大家可以直接繪出f(x)的圖形來大概看看f(x)的最值是多少,也可是使用優化函式來驗證。matlab命令列執行命令:

fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])

evalops是傳遞給適應度函式的引數,opts是二進位制編碼的精度,termops是選擇maxgenterm結束函式時傳遞個maxgenterm的引數,即遺傳代數。xoverops是傳遞給交叉函式的引數。mutops是傳遞給變異函式的引數。

遺傳演算法工具箱求函式極值

這是乙個用ga演算法來求函式極值的例子 clcclear all t 100 optionsorigin gaoptimset generation t 2 x,fval,reason,output,finnal pop ga ch14 2f,2,optionsorigin options1 gao...

MATLAB遺傳演算法之 工具箱實現

標準演算法 遺傳演算法 每次選代產生乙個單點,點的序列逼近乙個優化解 每次迭代產生乙個種群,種群通近乙個優化解 通過確定性的計算在該序列中選擇下乙個點 通過隨機進化選擇計算來選擇下一代種群 遺傳演算法工具有兩種使用方式 以命令列方式呼叫遺傳演算法函式ga。通過使用者圖形介面使用遺傳演算法工具。在命令...

初遇Sheffield遺傳演算法工具箱

安裝參考 安裝 1 解壓gatbx origin.zip,得到doc和src資料夾 2 拷貝src到matlab安裝目錄下的toolbox資料夾中,並將src更名為gatbx 3 開啟toolbox local 目錄下的pathdef.m檔案,在適當位置新增以下兩行 也可addpath code i...