天天看點

基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)

基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)

目錄

​​1 概述​​

​​2 粒子群優化算法​​

​​3 BP神經網絡​​

​​4 PSO優化 BP網絡算法​​

​​5 Matlab代碼及文章​​

​​6 運作結果​​

​​7 參考文獻 ​​

​​8 寫在最後​​

1 概述

在工程應用中經常會遇到一些複雜的非線性系統,這些系統的狀态方程複雜,難以準确的用數學方法模組化,而BP神經網絡實質上實作了一個從輸入到輸出的映射功能,數學理論證明三層的神經網絡就能夠以任意精度逼近任何非線性連續函數,具有非常強的非線性映射能力,使得其特别适合于求解内部機制複雜的問題.該方法是把未知系統看成是一個黑箱,首先用系統輸入輸出資料訓練BP網絡,使得網絡能夠表達該未知非線性函數,然後用訓練好的網絡預測系統輸出".但是傳統的BP網絡算法具有收斂速度慢、容易陷入局部極值和誤差比較大等缺點,是以優化這種網絡成了必要.粒子群優化算法作為一種智能算法,是一種仿生算法和随機搜尋算法,參數少,尋優能力較好,将其和BP網絡結合起來,優化BP網絡的權值和門檻值,彌補了BP網絡的一些缺點,提高了BP網絡拟合函數的能力.

2 粒子群優化算法

粒子群優化算法是一種群體智能的優化算法,它是源于對鳥類捕食行為的研究,鳥類捕食時,每隻鳥找到食物最簡單最有效的方法就是搜尋目前距離食物最近的鳥的周圍區域. PSO算法是從這種生物種群行為特征中得到啟發并求解優化問題的.算法中每個粒子都代表問題的一個潛在解,每個粒子對應一個由适應度函數決定的适應度值,粒子的速度決定了其移動的方向和距離,速度随自身及其他粒子的移動經驗進行動态調整,進而實作個體在可解空間中的尋優.

​​粒子群算法(帶限制處理)——Python&Matlab實作​​
​​混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)​​

3 BP神經網絡

BP神經網絡是一種多層前饋神經網絡,拓撲結構包括:輸入層、隐層、輸出層,它的主要特點是信号前向傳遞,誤差反向傳播.在前向傳遞中,輸人信号從輸人層經隐含層逐層處理,直至輸出層,每--層的神經元狀态隻影響下一層神經元狀态.如果輸出層得不到期望輸出,則轉入反向傳播,根據預測誤差調整網絡權值和門檻值,進而使網絡預測輸出不斷逼近期望輸出. BP網絡訓練的步驟如下:

基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)

4 PSO優化 BP網絡算法

BP網絡的非線性泛化能力很強,但是其收斂速度慢,容易陷人局部極值,誤差比較大,為了彌補BP網絡的這種缺點,将PSO算法與BP網絡結合,用PSO算法優化BP網絡的權值和門檻值,提高了網絡的非線性拟合能力. PSO-BP算法如下:

(1)初始化網絡的訓練樣本數m,測試樣本數n ,隐層節點數hidden _.num,粒子群數目particle_num,疊代次數epoch ,慣性權重w ,加速度因子c,C2.

(2)根據目标函數獲得訓練樣本和測試樣本的輸人和理想輸出,并畫出理想曲線和測試樣本點.(3)随機初始化粒子群的位置和速度,并計算各粒子的适應度值.

(4)根據上述公式更新各個粒子的位置和速度,并記錄每個粒子的最佳位置.(5)記錄全局最優位置.

(6)計算測試樣本的輸出,并畫出預測曲線及誤差曲線.

5 Matlab代碼及文章

本文僅展現主函數代碼,全部代碼及文章見:

​​基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)​​

%% 清空環境變量
tic
clc
clear
close all
format compact
%% 導入資料
load data1
input=In';
output=U3;
%%
% 随機生成訓練集、測試集
rand('seed',0)

k = randperm(size(input,1));
m=7100;
P_train=input(k(1:m),:)';
T_train=output(k(1:m));

P_test=input(k(m+1:end),:)';
T_test=output(k(m+1:end));

%% 歸一化
% 訓練集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 測試集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);

%% 節點個數
inputnum=size(Pn_train,1);
hiddennum=5;
outputnum=1;
%% 沒有優化的bp
net=newff(Pn_train,Tn_train,hiddennum);
net.trainParam.epochs=200;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00000001;
net.trainParam.max_fail = 200;

%網絡訓練
[net,per2]=train(net,Pn_train,Tn_train);
an=sim(net,Pn_test);
error=an-Tn_test;

test_simu=mapminmax('reverse',an,outputps);
disp('優化前')
E1=norm(error);
E2=mse(error)
MAPE=mean(abs(error)./Tn_test);

figure
plot(test_simu)
hold on
plot(T_test)
legend('實際輸出','期望輸出')

%% 粒子群優化bp


% [bestchrom,trace]=psoforbp(inputnum,hiddennum,outputnum,Pn_train,Tn_train);%粒子群算法
% x=bestchrom;
% save result x
load result%直接調用訓練好的
% 用pso優化的BP網絡進行值預測
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2';

%% BP網絡訓練
%網絡進化參數
net.trainParam.epochs=200;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00000001;
net.trainParam.max_fail = 200;

%網絡訓練
[net,per2]=train(net,Pn_train,Tn_train);

%% BP網絡預測
%資料歸一化
an=sim(net,Pn_test);
error=an-Tn_test;

test_simu=mapminmax('reverse',an,outputps);
disp('優化後')
E1=norm(error);
E2=mse(error)
MAPE=mean(abs(error)./Tn_test);
toc
%%
figure
plot(test_simu)
hold on
plot(T_test)
legend('實際輸出','期望輸出')      

6 運作結果

基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)
基于粒子群優化算法的BP神經網絡預測模型(Matlab代碼實作)粒子群算法(帶限制處理)——Python&Matlab實作混合螢火蟲和粒子群優化算法(Matlab完整代碼實作)

7 參考文獻 

8 寫在最後

繼續閱讀