tic %該函式表示計時開始
clear all;
clc;
%原始資料
% A = [44;34 ;25; 42; 37; 32 ;43 ;25; 36; 30 ;35 ;41;
% 31;17; 22; 27; 18 ;21 ;33 ;27 ;16; 26; 24; 22;
% 20;18;19 ;12 ;21; 8 ;14 ;12 ;14; 20 ; 8 ;12;
% 15;21;23 ;13; 28 ;13; 23; 21 ;15; 28 ;12; 25];
% B = [40; 38 ;33 ;30 ;28 ;23 ;31 ;27; 35 ;42; 33 ;41;
% 33 ;26 ;29 ;30 ;26 ;23 ;23 ;27 ;27 ;24 ;17 ;32;
% 18; 19; 24; 20 ;10 ;10 ;16 ;17 ;21; 12 ;12; 15;
% 23 ;10; 28 ;11; 23 ;19 ;13; 27 ;9; 26 ;14; 18];
A = [44 31 20 15 23 11 23 37 34 17 18 21 16 13 25 38 25 22 19 23 18 20 26 37 42 27 12 13 25 15 25 33 37 18 21 28 21 10 22 29 32 21 8 13 15 16 19 25 43 33 14 23 21 20 16 22 25 27 12 21 25 13 14 22 36 16 14 15 18 11 14 25 30 26 20 28 16 19 16 29 35 24 8 12 23 18 19 33 41 22 12 25 23 11 23 37];
B = [40 33 18 23 11 20 24 35 38 26 19 10 11 12 14 17 33 29 24 28 11 20 23 25 30 30 20 11 12 12 18 40 28 26 10 23 14 20 17 26 23 23 10 19 16 13 23 17 31 23 16 13 18 18 14 34 27 27 17 27 20 14 23 37 35 27 21 9 22 17 16 19 42 24 12 26 24 16 19 23 33 17 12 14 26 15 22 40 41 32 15 18 27 18 14 29];
%要進行預測的實測資料
% E = [40; 38 ;28; 36 ;30; 31 ;35; 29 ;23; 29 ;39; 40;
% 24 ;18 ;14 ;15 ;20 ;26 ;31 ;32 ;28 ;22 ;17 ;14;
% 16 ;16 ;17 ;16 ;9 ; 19 ;13 ;5 ;13 ;19 ;9 ;6;
% 22 ;12; 26 ;12; 22 ;19; 14 ;25; 11 ;24; 15 ;18];
C = [40 24 16 22 10 11 22 14 38 18 16 12 5 15 20 37 28 14 17 26 6 19 16 18 36 15 16 12 11 17 14 30 30 20 9 22 19 13 13 27 31 26 19 19 25 11 15 20 35 31 13 14 27 14 18 36 29 32 5 15 23 18 22 14 23 28 13 11 16 18 23 38 29 22 19 24 9 14 22 17 39 17 9 15 5 11 19 32 40 14 6 18 7 14 16 25];
%序列p0
p0 = (A+B) / 2;
%歸一化
a = max(p0);
b = min(p0);
for i=1:96
p0(i) = (p0(i) - b) / (a - b);
end
%將p0向量的資料分為5個一組
for i=1:90
p(:,i) = [p0(i) p0(i+1) p0(i+2) p0(i+3) p0(i+4)]';
t(i) = p0(i+5);
end
%激勵函式
for i=1:96
f(i) = 1 / (1 + exp(p(i)));
end
%輪盤賭法
for i=1:90
p(i) = t(i) / f(i);
end
%交叉
b = rand();
Wkj = rand();
Wlj = rand();
Wkj = Wkj*(1-b) + Wlj*b;
Wlj = Wlj*(1-b) + Wkj*b;
%變異
r = rand();
r2 = rand();
g = 2;
Gmax = 3;
Wij = rand();
f(g) = r2 * (1 - g/Gmax);
if r >= 0.5
Wij = Wij + (Wij - max(Wij))*f(g);
else
Wij = Wij + (min(Wij) - Wij)*f(g);
end
%訓練函式選擇
[net,tr] = train(net,p,t);
%對時間序列用小波進行層小波分解
[c,s]=wavedec2(p0,2,'db32');
%提取小波分解結構中的一層的低頻系數和高頻系數
cal=appcoef2(c,s,'db32',1);
%水平方向
ch1=detcoef2('h',c,s,1);
%垂直方向
cv1=detcoef2('v',c,s,1);
%斜線方向
cd1=detcoef2('d',c,s,1);
%各頻率成份重構
a1=wrcoef2('a',c,s,'db32',1);
h1=wrcoef2('h',c,s,'db32',1);
v1=wrcoef2('v',c,s,'db32',1);
d1=wrcoef2('d',c,s,'db32',1);
c1=[a1,h1;v1,d1];
%還原
for i=1:96
c2(i) = c1(i)*(a - b) + b;
c2(i) = c2(i) + 5;
end
toc %該函式表示計時結束
%繪圖
figure(1);
plot(C,'-*b') %實測結果
hold on;
plot(c2,'-*r') %預測結果
xlabel('時間間隔');
ylabel('有效停車位');
legend('實測值','預測值')
axis([0 90 0 45]);
set(gca,'XTick',0:5:90);
set(gca,'YTick',0:10:45);
title('GA+xiaobo')
%誤差
sum = 0;
for i = 1:96
e(i) = (c2(i) - C(i)) / C(i);
sum = sum + e(i);
end
%均方誤差
MSE = sum / 95
%誤差曲線
figure(5);
plot(e,'-b');
xlabel('時間間隔');
ylabel('預測誤差');
set(gca,'XTick',0:5:90);
title('GA+xiaobo');
上面是代碼
運行的時候出現下面的問題

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/126271.html
標籤:其他開發語言
