基于小波神经网络的交通流预测MATLAB代码

基于小波神经网络的交通流预测MATLAB代码_第1张图片

目录

1. 主程序

2. 小波子函数

3. 代码运行结果


1. 主程序

main.m程序

%% 基于小波神经网络的交通流预测代码
% 清空环境变量
clc
clear
close all

%% 网络参数配置
input = [66,64,60,58;64,60,58,17;60,58,17,49;58,17,49,34;17,49,34,17;49,34,17,8;34,17,8,53;17,8,53,15;8,53,15,15;53,15,15,45;15,15,45,57;15,45,57,33;45,57,33,42;57,33,42,8;33,42,8,52;42,8,52,24;8,52,24,29;52,24,29,-13;24,29,-13,37;29,-13,37,37;-13,37,37,4;37,37,4,32;37,4,32,38;4,32,38,68;32,38,68,77;38,68,77,95;68,77,95,119;77,95,119,161;95,119,161,184;119,161,184,276;161,184,276,247;184,276,247,251;276,247,251,193;247,251,193,226;251,193,226,213;193,226,213,195;226,213,195,182;213,195,182,166;195,182,166,188;182,166,188,149;166,188,149,132;188,149,132,167;149,132,167,181;132,167,181,203;167,181,203,219;181,203,219,226;203,219,226,216;219,226,216,234;226,216,234,197;216,234,197,219;234,197,219,230;197,219,230,247;219,230,247,238;230,247,238,259;247,238,259,270;238,259,270,232;259,270,232,202;270,232,202,243;232,202,243,223;202,243,223,202;243,223,202,235;223,202,235,184;202,235,184,215;235,184,215,217;184,215,217,209;215,217,209,199;217,209,199,197;209,199,197,226;199,197,226,217;197,226,217,254;226,217,254,243;217,254,243,281;254,243,281,285;243,281,285,285;281,285,285,251;285,285,251,288;285,251,288,236;251,288,236,266;288,236,266,214;236,266,214,213;266,214,213,186;214,213,186,209;213,186,209,176;186,209,176,163;209,176,163,199;176,163,199,171;163,199,171,170;199,171,170,134;171,170,134,128;170,134,128,72;134,128,72,113;128,72,113,94;69,41,53,48;41,53,48,42;53,48,42,25;48,42,25,21;42,25,21,32;25,21,32,16;21,32,16,52;32,16,52,63;16,52,63,7;52,63,7,38;63,7,38,9;7,38,9,50;38,9,50,60;9,50,60,3;50,60,3,51;60,3,51,-7;3,51,-7,29;51,-7,29,32;-7,29,32,21;29,32,21,46;32,21,46,50;21,46,50,38;46,50,38,26;50,38,26,49;38,26,49,64;26,49,64,73;49,64,73,114;64,73,114,182;73,114,182,239;114,182,239,242;182,239,242,233;239,242,233,255;242,233,255,240;233,255,240,211;255,240,211,225;240,211,225,207;211,225,207,176;225,207,176,190;207,176,190,158;176,190,158,153;190,158,153,169;158,153,169,152;153,169,152,165;169,152,165,197;152,165,197,226;165,197,226,236;197,226,236,226;226,236,226,221;236,226,221,209;226,221,209,175;221,209,175,226;209,175,226,255;175,226,255,229;226,255,229,279;255,229,279,234;229,279,234,259;279,234,259,225;234,259,225,215;259,225,215,199;225,215,199,188;215,199,188,194;199,188,194,214;188,194,214,222;194,214,222,222;214,222,222,186;222,222,186,241;222,186,241,251;186,241,251,247;241,251,247,208;251,247,208,233;247,208,233,263;208,233,263,274;233,263,274,254;263,274,254,267;274,254,267,281;254,267,281,259;267,281,259,258;281,259,258,225;259,258,225,211;258,225,211,240;225,211,240,227;211,240,227,227;240,227,227,172;227,227,172,171;227,172,171,161;172,171,161,180;171,161,180,142;161,180,142,164;180,142,164,96;142,164,96,73;164,96,73,91;96,73,91,92;31,38,28,44;38,28,44,65;28,44,65,46;44,65,46,13;65,46,13,28;46,13,28,6;13,28,6,33;28,6,33,30;6,33,30,65;33,30,65,54;30,65,54,33;65,54,33,56;54,33,56,9;33,56,9,22;56,9,22,51;9,22,51,47;22,51,47,31;51,47,31,22;47,31,22,9;31,22,9,49;22,9,49,4;9,49,4,44;49,4,44,57;4,44,57,85;44,57,85,77;57,85,77,115;85,77,115,158;77,115,158,165;115,158,165,216;158,165,216,279;165,216,279,241;216,279,241,215;279,241,215,220;241,215,220,192;215,220,192,211;220,192,211,185;192,211,185,185;211,185,185,192;185,185,192,201;185,192,201,155;192,201,155,178;201,155,178,165;155,178,165,198;178,165,198,162;165,198,162,202;198,162,202,240;162,202,240,210;202,240,210,199;240,210,199,221;210,199,221,208;199,221,208,218;221,208,218,235;208,218,235,211;218,235,211,241;235,211,241,240;211,241,240,220;241,240,220,241;240,220,241,242;220,241,242,202;241,242,202,224;242,202,224,184;202,224,184,221;224,184,221,184;184,221,184,216;221,184,216,207;184,216,207,239;216,207,239,226;207,239,226,230;239,226,230,258;226,230,258,232;230,258,232,247;258,232,247,288;232,247,288,243;247,288,243,309;288,243,309,252;243,309,252,271;309,252,271,256;252,271,256,251;271,256,251,222;256,251,222,228;251,222,228,229;222,228,229,172;228,229,172,171;229,172,171,219;172,171,219,195;171,219,195,164;219,195,164,155;195,164,155,118;164,155,118,107;155,118,107,86;118,107,86,78;107,86,78,55];
output = [17;49;34;17;8;53;15;15;45;57;33;42;8;52;24;29;-13;37;37;4;32;38;68;77;95;119;161;184;276;247;251;193;226;213;195;182;166;188;149;132;167;181;203;219;226;216;234;197;219;230;247;238;259;270;232;202;243;223;202;235;184;215;217;209;199;197;226;217;254;243;281;285;285;251;288;236;266;214;213;186;209;176;163;199;171;170;134;128;72;113;94;78;42;25;21;32;16;52;63;7;38;9;50;60;3;51;-7;29;32;21;46;50;38;26;49;64;73;114;182;239;242;233;255;240;211;225;207;176;190;158;153;169;152;165;197;226;236;226;221;209;175;226;255;229;279;234;259;225;215;199;188;194;214;222;222;186;241;251;247;208;233;263;274;254;267;281;259;258;225;211;240;227;227;172;171;161;180;142;164;96;73;91;92;52;65;46;13;28;6;33;30;65;54;33;56;9;22;51;47;31;22;9;49;4;44;57;85;77;115;158;165;216;279;241;215;220;192;211;185;185;192;201;155;178;165;198;162;202;240;210;199;221;208;218;235;211;241;240;220;241;242;202;224;184;221;184;216;207;239;226;230;258;232;247;288;243;309;252;271;256;251;222;228;229;172;171;219;195;164;155;118;107;86;78;55;54];
input_test = [28,71,21,69;71,21,69,34;21,69,34,11;69,34,11,27;34,11,27,49;11,27,49,50;27,49,50,36;49,50,36,45;50,36,45,58;36,45,58,9;45,58,9,22;58,9,22,5;9,22,5,12;22,5,12,42;5,12,42,38;12,42,38,44;42,38,44,23;38,44,23,-11;44,23,-11,44;23,-11,44,41;-11,44,41,14;44,41,14,33;41,14,33,77;14,33,77,78;33,77,78,103;77,78,103,96;78,103,96,136;103,96,136,179;96,136,179,199;136,179,199,265;179,199,265,238;199,265,238,234;265,238,234,201;238,234,201,179;234,201,179,194;201,179,194,182;179,194,182,203;194,182,203,197;182,203,197,183;203,197,183,144;197,183,144,129;183,144,129,154;144,129,154,159;129,154,159,217;154,159,217,239;159,217,239,218;217,239,218,241;239,218,241,239;218,241,239,214;241,239,214,224;239,214,224,240;214,224,240,228;224,240,228,252;240,228,252,255;228,252,255,215;252,255,215,232;255,215,232,237;215,232,237,222;232,237,222,208;237,222,208,237;222,208,237,225;208,237,225,221;237,225,221,198;225,221,198,216;221,198,216,238;198,216,238,247;216,238,247,236;238,247,236,213;247,236,213,245;236,213,245,215;213,245,215,245;245,215,245,271;215,245,271,297;245,271,297,299;271,297,299,270;297,299,270,276;299,270,276,246;270,276,246,269;276,246,269,260;246,269,260,242;269,260,242,204;260,242,204,198;242,204,198,180;204,198,180,208;198,180,208,208;180,208,208,205;208,208,205,164;208,205,164,146;205,164,146,99;164,146,99,124;146,99,124,85;99,124,85,58];
output_test = [34;11;27;49;50;36;45;58;9;22;5;12;42;38;44;23;-11;44;41;14;33;77;78;103;96;136;179;199;265;238;234;201;179;194;182;203;197;183;144;129;154;159;217;239;218;241;239;214;224;240;228;252;255;215;232;237;222;208;237;225;221;198;216;238;247;236;213;245;215;245;271;297;299;270;276;246;269;260;242;204;198;180;208;208;205;164;146;99;124;85;58;87];

M=size(input,2); %输入节点个数
N=size(output,2); %输出节点个数

n=6; %隐含层节点个数
lr1=0.01; %学习概率
lr2=0.001; %学习概率
maxgen=100; %迭代次数

%权值初始化
Wjk=randn(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij=randn(N,n);Wij_1=Wij;Wij_2=Wij_1;
a=randn(1,n);a_1=a;a_2=a_1;
b=randn(1,n);b_1=b;b_2=b_1;

%节点初始化
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);

%权值学习增量初始化
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);

%% 输入输出数据归一化
[inputn,inputps]=mapminmax(input');
[outputn,outputps]=mapminmax(output'); 
inputn=inputn';
outputn=outputn';

error=zeros(1,maxgen);
%% 网络训练
for i=1:maxgen
    
    %误差累计
    error(i)=0;
    
    % 循环训练
    for kk=1:size(input,1)
        x=inputn(kk,:);
        yqw=outputn(kk,:);
   
        for j=1:n
            for k=1:M
                net(j)=net(j)+Wjk(j,k)*x(k);
                net_ab(j)=(net(j)-b(j))/a(j);
            end
            temp=mymorlet(net_ab(j));
            for k=1:N
                y=y+Wij(k,j)*temp;   %小波函数
            end
        end
        
        %计算误差和
        error(i)=error(i)+sum(abs(yqw-y));
        
        %权值调整
        for j=1:n
            %计算d_Wij
            temp=mymorlet(net_ab(j));
            for k=1:N
                d_Wij(k,j)=d_Wij(k,j)-(yqw(k)-y(k))*temp;
            end
            %计算d_Wjk
            temp=d_mymorlet(net_ab(j));
            for k=1:M
                for l=1:N
                    d_Wjk(j,k)=d_Wjk(j,k)+(yqw(l)-y(l))*Wij(l,j) ;
                end
                d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j);
            end
            %计算d_b
            for k=1:N
                d_b(j)=d_b(j)+(yqw(k)-y(k))*Wij(k,j);
            end
            d_b(j)=d_b(j)*temp/a(j);
            %计算d_a
            for k=1:N
                d_a(j)=d_a(j)+(yqw(k)-y(k))*Wij(k,j);
            end
            d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j);
        end
        
        %权值参数更新      
        Wij=Wij-lr1*d_Wij;
        Wjk=Wjk-lr1*d_Wjk;
        b=b-lr2*d_b;
        a=a-lr2*d_a;
    
        d_Wjk=zeros(n,M);
        d_Wij=zeros(N,n);
        d_a=zeros(1,n);
        d_b=zeros(1,n);

        y=zeros(1,N);
        net=zeros(1,n);
        net_ab=zeros(1,n);
        
        Wjk_1=Wjk;Wjk_2=Wjk_1;
        Wij_1=Wij;Wij_2=Wij_1;
        a_1=a;a_2=a_1;
        b_1=b;b_2=b_1;
    end
end

%% 网络预测
%预测输入归一化
x=mapminmax('apply',input_test',inputps);
x=x';
yuce=zeros(92,1);
%网络预测
for i=1:92
    x_test=x(i,:);

    for j=1:1:n
        for k=1:1:M
            net(j)=net(j)+Wjk(j,k)*x_test(k);
            net_ab(j)=(net(j)-b(j))/a(j);
        end
        temp=mymorlet(net_ab(j));
        for k=1:N
            y(k)=y(k)+Wij(k,j)*temp ; 
        end
    end

    yuce(i)=y(k);
    y=zeros(1,N);
    net=zeros(1,n);
    net_ab=zeros(1,n);
end
%预测输出反归一化
ynn=mapminmax('reverse',yuce,outputps);

%% 结果分析
figure
plot(ynn,'r*:')
hold on
plot(output_test,'bo--')
title('预测交通流量','fontsize',12)
legend('预测交通流量','实际交通流量','fontsize',12)
xlabel('时间点')
ylabel('交通流量')



2. 小波子函数

2.1 mymorlet.m 函数


function y=mymorlet(t)

y = exp(-(t.^2)/2) * cos(1.75*t);

end


2.2 d_mymorlet.m 函数

function y=d_mymorlet(t)

y = -1.75*sin(1.75*t).*exp(-(t.^2)/2)-t* cos(1.75*t).*exp(-(t.^2)/2) ;

end

3. 代码运行结果

基于小波神经网络的交通流预测MATLAB代码_第2张图片

你可能感兴趣的:(优化算法与预测程序设计,神经网络,深度学习)