当前位置:   article > 正文

【预测模型-ELAMN预测】基于蝙蝠算法优化ELMAN神经网络实现数据回归预测_已知某风电场的历史风速数据,试构造一个elman神经网络,以实现该风电场风速序列的

已知某风电场的历史风速数据,试构造一个elman神经网络,以实现该风电场风速序列的

1 简介

风能,作为一种重要,有潜力,无污染,可再生、可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐。近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世界各国纷纷大力发展风能资源。然而,在实际操作中,风能固有的波动性和间歇性通常会增加风能入网的难度,致使风电场输出功率不稳定,严重影响输出的电能质量,大大增加了电网安全性和稳定性运行风险,因此,风速预测在风电相关工作中至关重要,准确、可靠的预测结果不仅有利于调度人员事先掌握风电场的功率变化情况,及时制定调度运行计划,提高能量转换效率、降低风险,增加发电量等,同时也有利于风电并网稳定运行和有效消纳,对可能存在影响电网安全稳定运行的风险及时预警,从而避免风电功率随机波动造成电能损耗甚至电网崩溃。近年来,国内外学者进行了大量风速预测相关研究,风速预测水平得到一定程度的提升。单一预测模型虽简单容易实施,但其预测精度往往较低,难以满足风电场发电的需求。相比之下,基于优化算法和数据分解法的混合预测模型对风速预测性能有很大的提升。然而,现有的模型只是使用单目标优化算法,针对预测模型精度的提高,很少关注预测结果稳定性的增强,涉及多目标优化算法的混合预测模型更是少之又少。因此,这些模型往往会降低预测结果的稳定性,对风电场发电以及风电并网的安全性和稳定性带来巨大的挑战。针对如上问题,本文构建出一个基于蝙蝠算法和Elman神经网络的混合预测模型,本文所提出的混合预测模型不仅可以降低预测误差,提高风速预测精度,增强预测结果的稳定性,同时对风电场发电的完善,发展以及风电并网安全管理也大有裨益。

Elman 神经网络是一种局部反馈递归神经网络,包括输入层、隐藏层、承接层和输出层,由于其良好的动态记忆和时变能力,自1990年Elman首次提出以来,Elman神经网络在时间序列预测中得到了广泛的应用,但由于随机选择初始值和阈值,且采用梯度下降法寻优,其网络学习速度较慢且预测的精度比较低。本文利用BA优化 Elman神经网络的初始权值及阈值,提高了 Elman 神经网络的预测精度。

第一步 初始化 Elman 网络所需参数,并新建 Elman 网 络,net=newelm(minmax(input),[11,1],{'tansig','purelin'},'traingdx'),其中 input 是训练集数据,tansig 是隐藏层的激活函数,purelin是输出层激活函数,traingdx是梯度下降函数;

第二步 初始化BA各参数,包括蝙蝠的数量m 、最大迭代次数Maxiter,参数的上界ub及下界lb;

第三步 蝙蝠算法通过更新位置不断迭代优化网络,直到迭代结束形成最优个体,其中最优个体包括权值w1、w2及w3,阈值b1和b2;

第四步 Elman 神经网络解析最优个体,利用解析后的权值及阈值训练Elman神经网络并预测风速数据。

2 部分代码

%_________________________________________________________________________%

%  Whale Optimization Algorithm (WOA) source codes demo 1.0               %

% The Whale Optimization Algorithm

function [Leader_score,Leader_pos,Convergence_curve]=WOA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

% initialize position vector and score for the leader

Leader_pos=zeros(1,dim);

Leader_score=inf; %change this to -inf for maximization problems

%Initialize the positions of search agents

% Positions=initialization(SearchAgents_no,dim,ub,lb);

Positions=ceil(rand(SearchAgents_no,dim).*(ub-lb)+lb);

Convergence_curve=zeros(1,Max_iter);

t=0;% Loop counter

% Main loop

while t<Max_iter

    for i=1:size(Positions,1)

        

        % Return back the search agents that go beyond the boundaries of the search space

        Flag4ub=Positions(i,:)>ub;

        Flag4lb=Positions(i,:)<lb;

        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;

        

        % Calculate objective function for each search agent

        fitness=fobj(Positions(i,:));

        

        % Update the leader

        if fitness<Leader_score % Change this to > for maximization problem

            Leader_score=fitness; % Update alpha

            Leader_pos=Positions(i,:);

        end

        

    end

    

    a=2-t*((2)/Max_iter); % a decreases linearly fron 2 to 0 in Eq. (2.3)

    

    % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12)

    a2=-1+t*((-1)/Max_iter);

    

    % Update the Position of search agents 

    for i=1:size(Positions,1)

        r1=rand(); % r1 is a random number in [0,1]

        r2=rand(); % r2 is a random number in [0,1]

        

        A=2*a*r1-a;  % Eq. (2.3) in the paper

        C=2*r2;      % Eq. (2.4) in the paper

        

        

        b=1;               %  parameters in Eq. (2.5)

        l=(a2-1)*rand+1;   %  parameters in Eq. (2.5)

        

        p = rand();        % p in Eq. (2.6)

        

        for j=1:size(Positions,2)

            

            if p<0.5   

                if abs(A)>=1

                    rand_leader_index = floor(SearchAgents_no*rand()+1);

                    X_rand = Positions(rand_leader_index, :);

                    D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7)

                    Positions(i,j)=X_rand(j)-A*D_X_rand;      % Eq. (2.8)

                    

                elseif abs(A)<1

                    D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1)

                    Positions(i,j)=Leader_pos(j)-A*D_Leader;      % Eq. (2.2)

                end

                

            elseif p>=0.5

              

                distance2Leader=abs(Leader_pos(j)-Positions(i,j));

                % Eq. (2.5)

                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);

                

            end

            

        end

    end

    t=t+1;

    Convergence_curve(t)=Leader_score;

%     [t Leader_score]

end

3 仿真结果

4 参考文献

[1]朱昶胜, 康亮河, and 冯文芳. "基于自适应鲸鱼优化算法结合Elman神经网络的股市收盘价预测算法." 计算机应用 40.5(2020):9.

[2]姚珊. 基于蝙蝠算法的神经网络预测模型的研究及应用[D]. 辽宁科技大学, 2019.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/971870
推荐阅读
相关标签
  

闽ICP备14008679号