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
是傳遞給變異函式的引數。
MATLAB遺傳演算法之 工具箱實現
標準演算法 遺傳演算法 每次選代產生乙個單點,點的序列逼近乙個優化解 每次迭代產生乙個種群,種群通近乙個優化解 通過確定性的計算在該序列中選擇下乙個點 通過隨機進化選擇計算來選擇下一代種群 遺傳演算法工具有兩種使用方式 以命令列方式呼叫遺傳演算法函式ga。通過使用者圖形介面使用遺傳演算法工具。在命令...
MATLAB 自帶遺傳工具箱之遺傳演算法簡述
matlab 自帶優化工具箱 optimization tool 之遺傳演算法簡述 在命令視窗內一鍵啟動工具箱 對視窗頁面進行解釋 solver 求解器 選擇選擇需要的演算法problem 需要解決的問題 fitness function 需要優化的目標函式,填寫格式 f f為編寫目標函式的檔名 n...
MATLAB遺傳演算法工具箱的函式及例項
遺傳演算法 ga 是一種進化演算法,是模擬達爾文生物演化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜尋最優解的方法。遺傳演算法把問題引數編碼為染色體,利用層層迭代的方式進行選擇 交叉以及變異等運算交換種群中染色體資訊,最終生成符合優化目標的染色體。本文將使用到she...