?? fitness.m
字號:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function fit_value=fitness(antibody,training_x,training_y)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函數fitness通過輸入一個個體編碼,以及訓練樣本集,就能返回該個體的
% 網絡適應度的值。具體實現的思路是:解碼個體,構建出個體所代表的RBF網絡的結構
% 并利用LS算法構建網絡的輸出層參數,從而得到完整的網絡。然后利用訓練數據計算MG
% 序列的預測誤差。最終生成適應度的值。
%
% 關于輸入參數,當參數為3個時,執行一般的適應度計算操作;當參數為4個時,第
% 4個參數表示固定的寬度,此時執行指定寬度的適應度計算操作。
% 從antibody得到網絡有效節點的中心和寬度。count記錄了控制基因不為零的行。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=find(antibody(:,1));
if (size(count,1)==0)
fit_value=0;
else
centers=antibody(count,2:(size(antibody,2)-1));
radius=antibody(count,size(antibody,2));
cou1=find(radius<.01);
radius(cou1)=.01;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 構建網絡輸出層。這里采用newrb中計算輸出層權值和誤差的方法,調用了
% radbas和dist兩個函數計算隱層節點的輸出。輸入參量的結構為:
% training_x: M*N。M為輸入維數,N為樣本個數。
% training_y: T*N。T為輸出維數,N為樣本個數,這里T=1。
% centers: S*M。S為中心的個數,M為輸入維數(即中心矢量的維數)。
% radius: S*1。S為中心的個數。
%r2為S*N矩陣,其中所有的列向量均為對應的寬度矢量。
%p1即為隱層節點的輸出,為S*N矩陣。
r1=1./(radius*sqrt(2));
r2=r1*ones(1,size(training_x,2));
p1=radbas(dist(centers,training_x).*r2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%根據p1和training_y計算輸出層權值weights,并計算誤差sse1。
weights=training_y*pinv(p1);
result=weights*p1;
sse1=sumsqr(training_y-result);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 通過輸出的值與樣本中的數值的誤差得到適應度。
fit_value=1/(sse1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -