【lssvm预测模型】基于蝙蝠算法改进的最小二乘支持向量机lssvm预测

181 阅读3分钟

1 简介

为了提高短期电力负荷预测结果的准确性,该文提出了蝙蝠算法优化最小二乘支持向量机(BA-LSSVM)的方法.该方法利用蝙蝠算法对最小二乘支持向量机的核函数参数进行优化,并用优化后的参数建立短期电力负荷预测模型.最后,将搜集到的某地区历史负荷数据输入模型,通过仿真结果分析,表明该方法具有一定的可行性和有效性

1.1 蝙蝠算法

1.2 最小二乘支持向量机

2 部分代码

%=====================================================================%初始化clcclose allclearformat longtic%==============================================================%%导入数据data=xlsread('1.xlsx');[row,col]=size(data);x=data(:,1:col-1);y=data(:,col);set=1; %设置测量样本数row1=row-set;%train_x=x(1:row1,:);train_y=y(1:row1,:);test_x=x(row1+1:row,:);%预测输入test_y=y(row1+1:row,:);%预测输出train_x=train_x';train_y=train_y';test_x=test_x';test_y=test_y';​%%数据归一化[train_x,minx,maxx, train_yy,miny,maxy] =premnmx(train_x,train_y);test_x=tramnmx(test_x,minx,maxx);train_x=train_x';train_yy=train_yy';train_y=train_y';test_x=test_x';test_y=test_y';%% 参数初始化eps = 10^(-6);%%定义lssvm相关参数type='f';kernel = 'RBF_kernel';proprecess='proprecess';lb=[0.01 0.02];%参数c、g的变化的下限ub=[1000 100];%参数c、g的变化的上限dim=2;%维度,即一个优化参数SearchAgents_no=20; % Number of search agentsMax_iter=100; % Maximum numbef of iterationsn=10;      % Population size, typically 10 to 25A=0.25;      % Loudness  (constant or decreasing)r=0.5;      % Pulse rate (constant or decreasing)% This frequency range determines the scalingsQmin=0;         % Frequency minimumQmax=2;         % Frequency maximum% Iteration parameterstol=10^(-10);    % Stop toleranceLeader_pos=zeros(1,dim);Leader_score=inf; %change this to -inf for maximization problems%Initialize the positions of search agentsfor i=1:SearchAgents_no    Positions(i,1)=ceil(rand(1)*(ub(1)-lb(1))+lb(1));    Positions(i,2)=ceil(rand(1)*(ub(2)-lb(2))+lb(2));    Fitness(i)=Fun(Positions(i,:),train_x,train_yy,type,kernel,proprecess,miny,maxy,train_y,test_x,test_y);v(i,:)=rand(1,dim);end[fmin,I]=min(Fitness);best=Positions(I,:);Convergence_curve=zeros(1,Max_iter);t=0;% Loop counter% Start the iterations -- Bat Algorithmwhile t<Max_iter    % Loop over all bats/solutions    for i=1:n,        Q(i)=Qmin+(Qmin-Qmax)*rand;        v(i,:)=v(i,:)+(Positions(i,:)-best)*Q(i);        Positions(i,:)=Positions(i,:)+v(i,:);        Flag4ub=Positions(i,:)>ub;        Flag4lb=Positions(i,:)<lb;        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                % Pulse rate        if rand>r            Positions(i,:)=best+0.01*randn(1,dim);        end                % Evaluate new solutions        [Fnew,test_predict]=Fun(Positions(i,:),train_x,train_yy,type,kernel,proprecess,miny,maxy,train_y,test_x,test_y);        % If the solution improves or not too loudness        if (Fnew<=Fitness(i)) & (rand<A) ,            Positions(i,:)=Positions(i,:);            Fitness(i)=Fnew;        end                % Update the current best        if Fnew<=fmin,            best=Positions(i,:);            fmin=Fnew;            Leader_pos=Positions(i,:);%最佳参数            YPred_best=test_predict;        end    end        t=t+1    Convergence_curve(t)=fmin;end​%% 结果分析plot( Convergence_curve,'LineWidth',2);title(['蝙蝠优化算法适应度曲线','(参数c1=',num2str(Leader_pos(1)),',c2=',num2str(Leader_pos(2)),',终止代数=',num2str(Max_iter),')'],'FontSize',13);xlabel('进化代数');ylabel('误差适应度');​bestc = Leader_pos(1);bestg = Leader_pos(2);​gam=bestc;sig2=bestg;model=initlssvm(train_x,train_yy,type,gam,sig2,kernel,proprecess);%原来是显示model=trainlssvm(model);%原来是显示%求出训练集和测试集的预测值[train_predict_y,zt,model]=simlssvm(model,train_x);[test_predict_y,zt,model]=simlssvm(model,test_x);​%预测数据反归一化train_predict=postmnmx(train_predict_y,miny,maxy);%预测输出test_predict=postmnmx(test_predict_y,miny,maxy);%计算均方差trainmse=sum((train_predict-train_y).^2)/length(train_y);%testmse=sum((test_predict-test_y).^2)/length(test_y)​for i=1:set    RD(i)=(test_predict(i)-test_y(i))/test_y(i)*100;endfor i=1:set    D(i)=test_predict(i)-test_y(i);endRD=RD'disp(['蝙蝠优化算法优化svm预测误差=',num2str(D)])​% figure% plot(test_predict,':og')% hold on% plot(test_y,'- *')% legend('预测输出','期望输出')% title('网络预测输出','fontsize',12)% ylabel('函数输出','fontsize',12)% xlabel('样本','fontsize',12)figureplot(train_predict,':og')hold onplot(train_y,'- *')legend('预测输出','期望输出')title('蝙蝠优化svm网络预测输出','fontsize',12)ylabel('函数输出','fontsize',12)xlabel('样本','fontsize',12)​toc   %计算时间​​

3 仿真结果

4 参考文献

[1]公政, 姜文, 王来河,等. 基于BA-LSSVM的短期电力负荷预测研究[J]. 电子质量, 2017, 03(v.15;No.164):7-10+15.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。