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仿真,有科研问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。