【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模型及_省略_性分析_以大寶山礦李屋排土場為例_寧志傑》