1. 程式人生 > 其它 >【ELMAN預測】基於布穀鳥演算法改進ELMAN動態遞迴神經網路實現資料預測matlab原始碼

【ELMAN預測】基於布穀鳥演算法改進ELMAN動態遞迴神經網路實現資料預測matlab原始碼

一、Elman神經網路介紹

1.特點
Elman神經網路是一種典型的動態遞迴神經網路,它是在BP網路基本結構的基礎上,在隱含層增加一個承接層,作為一步延時運算元,達到記憶的目的,從而使系統具有適應時變特性的能力,增強了網路的全域性穩定性,它比前饋型神經網路具有更強的計算能力,還可以用來解決快速尋優問題。
2.結構
Elman神經網路是應用較為廣泛的一種典型的反饋型神經網路模型。一般分為四層:輸入層、隱層、承接層和輸出層。其輸入層、隱層和輸出層的連線類似於前饋網路。輸入層的單元僅起到訊號傳輸作用,輸出層單元起到加權作用。隱層單元有線性和非線性兩類激勵函式,通常激勵函式取Signmoid非線性函式。而承接層則用來記憶隱層單元前一時刻的輸出值,可以認為是一個有一步遲延的延時運算元。隱層的輸出通過承接層的延遲與儲存,自聯到隱層的輸入,這種自聯方式使其對歷史資料具有敏感性,內部反饋網路的加入增加了網路本身處理動態資訊的能力,從而達到動態建模的目的。其結構圖如下圖1所示,

其網路的數學表示式為:



其中,y為m維輸出節點向量;x為n維中間層節點單元向量;u為r維輸入向量;​為n維反饋狀態向量;​為中間層到輸出層連線權值;​為輸入層到中間層連線權值;​為承接層到中間層連線權值;g()為輸出神經元的傳遞函式,是中間層輸出的線性組合;f()為中間層神經元的傳遞函式,常採用S函式。
3.與BP網路的區別
它是動態反饋型網路,它能夠內部反饋、儲存和利用過去時刻輸出資訊,既可以實現靜態系統的建模,還能實現動態系統的對映並直接反應系統的動態特性,在計算能力及網路穩定性方面都比BP神經網路更勝一籌。
4.缺點
與BP神經網路一樣,演算法都是採用基於梯度下降法,會出現訓練速度慢和容易陷入區域性極小點的缺點,對神經網路的訓練較難達到全域性最優。

二、布穀鳥演算法

布穀鳥演算法是布穀鳥育雛行為和萊維飛行結合的一種演算法 。​​​ 在CS演算法中,有兩個路徑(或者說成是兩個位置的更新)備受關注:

​​

CS演算法的執行過程如下:​​​

三、演算法流程

步驟1:輸入影響因素資料與目標輸出資料,ELMAN神經網路劃分訓練集與測試集,對資料歸一化處理,

步驟2:構建ELMAN神經網路,初始化網路結構。

步驟3:布穀鳥演算法引數初始化。初始化最大迭代次數N,種群大小n,以及c1,c2,w引數。

步驟4:初始化粒子群演算法PSO的種群位置。根據步驟2的網路結構,計算需要優化的變數元素個數。

步驟5:使用布穀鳥演算法優化。將適應度函式設為ELMAN預測的均方誤差。執行布穀鳥的迴圈體過程,即速度更新和位置更新,直至達到最大迭代次數,終止粒子群優化演算法。

步驟6:將布穀鳥優化後的權值和閾值引數,賦給ELMAN神經網路。(或者在迴圈體當中,將網路結構理解為優化變數,輸出最優的網路結構)。

步驟7:布穀鳥優化後的ELMAN神經網路訓練和預測,並與優化前的ELMAN神經網路進行預測誤差分析和對比。

四、演示程式碼

%#ok<*SAGROW> Remove hints of syntax
%#ok<*CLALL>
%#ok<*FNDSB>
clear all ; 
close all ;
clc ;
N = 25; % Number of nests(The scale of solution)
D = 10 ; %  Dimensionality of solution
T = 200 ; % Number of iterations
Xmax = 20 ;
Xmin = -20 ;
Pa = 0.25 ; % Probability of building a new nest(After host bird find exotic bird eggs)
nestPop = rand(N,D)*(Xmax-Xmin)+Xmin ;  % Random initial solutions
for t=1:T
    levy_nestPop =  func_levy(nestPop,Xmax,Xmin) ; % Generate new solutions by Levy flights
    nestPop = func_bestNestPop(nestPop,levy_nestPop);  % Choose a best nest among  new and old nests     
    rand_nestPop = func_newBuildNest(nestPop,Pa,Xmax,Xmin); % Abandon(Pa) worse nests and build new nests by (Preference random walk )
    nestPop = func_bestNestPop(nestPop,rand_nestPop) ; % Choose a best nest among  new and old nests
    [~,index] = max(func_fitness(nestPop)) ; % Best nests
    trace(t) = func_objValue(nestPop(index,:)) ; 
end
figure 
plot(trace);
xlabel('迭代次數') ;
ylabel('適應度值') ;
title('適應度進化曲線') ;

​五、模擬結果

程式碼結果圖:

六、參考文獻及程式碼私信博主

《排土場沉降預測的Elman模型及_省略_性分析_以大寶山礦李屋排土場為例_寧志傑》