【预测模型】基于改进粒子群优化最小二乘支持向量机lssvm求解短期电力负荷预测matlab源码

1 模型

电力系统正常运行时,负荷预测是其运行和规划的重要依据之一.因此,针对粒子群算法(Particle Swarm Optimization,PSO)优化最小二乘支持向量机(Least Square Support Vector Machine,LSSVM)存在的速度变化梯度方向产生的非最优粒子问题,提出了一种基于自适应粒子群优化LSSVM参数的短期电力负荷预测方法.该预测模型在保持PSO优点的基础上,引入了自适应步长,使PSO在速度梯度上找到更优的粒子;引入遗传算法的变异操作保持粒子群的多样性,减小算法陷入局部极值的可能.随后将自适应PSO对LSSVM回归估计方法的参数进行优化,得到自适应PSO-LSSVM.最后将该方法应用于短期电力负荷预测.

【预测模型】基于改进粒子群优化最小二乘支持向量机lssvm求解短期电力负荷预测matlab源码_第1张图片

【预测模型】基于改进粒子群优化最小二乘支持向量机lssvm求解短期电力负荷预测matlab源码_第2张图片

2 部分代码

%在测试函数图形上绘制初始化群的位置
%if 2==ParticleSize
% for ParSwarmRow=1:SwarmSize
 % stem3(ParSwarm(ParSwarmRow,1),ParSwarm(ParSwarmRow,2),ParSwarm(ParSwarmRow,5),'r.','markersize',8);
 %end
%end
%暂停让抓图
% disp('开始迭代,按任意键:')
%pause

%调用一步迭代的算法

[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,ParticleScope,0.9,0.4,LoopCount,k);

% if 2==ParticleSize
% for ParSwarmRow=1:SwarmSize
%   stem3(ParSwarm(ParSwarmRow,1),ParSwarm(ParSwarmRow,2),ParSwarm(ParSwarmRow,5),'r.','markersize',8);
% end
%end

t=OptSwarm(SwarmSize+1,1);
u=OptSwarm(SwarmSize+1,2);
YResult=AdaptFunc(t,u);
str=sprintf('%g步迭代的最优目标函数值%g',k,YResult);
disp(str);
%记录每一步的平均适应度
MeanAdapt(1,k)=mean(ParSwarm(:,2*ParticleSize+1));
end

%for循环结束标志

%记录最小与最大的平均适应度
MinMaxMeanAdapt=[min(MeanAdapt),max(MeanAdapt)];


%记录本次迭代得到的最优结果
XX=OptSwarm(SwarmSize+1,1);
YY=OptSwarm(SwarmSize+1,2);
%cc=AdaptFunc1(aa,bb);
%Result=[aa,bb,cc];
%disp(Result);

NumOfPre =1;%预测天数,在此预测本季度最后七天
Time = 24;
Data = xlsread('a23.xls');%此为从excel表格读数据的命令,表示将表格的数据读到Data数组中,省略表格中的第一行第一列文字部分 可输入你要预测的表格名称
[M N] = size(Data);%计算读入数据的行和列 M行N列
for i = 1:3
   maxData = max(Data(:,i));
   minData = min(Data(:,i));
   Data1(:,i) = (Data(:,i) - minData)/(maxData-minData);%对温度进行归一化处理
end
for i = 4:5
   Data1(:,i) = Data(:,i);
end
for i = 6:N
   Data1(:,i) = log10(Data(:,i)) ;%对负荷进行对数处理 温度和负荷的预处理 可采用不同的方法 可不必拘泥
end
Dim =  M - 2 - NumOfPre;%训练样本数%训练样本数
Input = zeros(M-2,12,Time);%预先分配处理后的输入向量空间
y = zeros(Dim,Time);
for i = 3:M 
   for j = 1:Time
       %%选取前一天温度、同一时刻的负荷,前两天的负荷,当天的温度作为输入特征
       x = [Data1(i-1,1:5), Data1(i-1,j+5), Data1(i-2,j+5),Data1(i,1:5)];
       Input(i-2,:,j) = x;
       y(i-2,j) = Data1(i,j+5);
   end
end
Dist = zeros(Dim,Dim,Time);%预先分配距离空间
for i=1:Time
   for j=1:Dim
       for k=1:Dim
           Dist(j,k,i) = (Input(j,:,i) - Input(k,:,i))*(Input(j,:,i) - Input(k,:,i))';
       end
   end
end
Dist1=exp(-Dist/(2*YY));%RBF
for i=1:Time
   H = Dist1(:,:,i) + eye(Dim)/XX;%最小二乘支持向量的H矩阵
   f = -y(1:Dim,i); 
   Aeq = ones(Dim,1)';
   beq = [0];
   option.MaxIter=1000;
  [a,fval]=quadprog(H,f,[],[],Aeq,beq);%,[],[],[],option);
   b = 0;
   for j = 1:Dim
       b(j) = y(j,i) - a(j)/XX - a'* Dist1(:,j,i);%求每个输入特征对应的b
   end
   b = sum(b)/Dim;%求平均b,消除误差
   for j = Dim + 1:M-2
       for k = 1:Dim
           K(k) = exp(-(Input(j,:,i) - Input(k,:,i))*(Input(j,:,i) - Input(k,:,i))'/(2*YY));%预测输入特征与训练特征的RBF距离
       end
       Pre(j-Dim,i) = sum(a'*K') + b;  %求解预测值   
   end
end
Len = M  - (Dim + 3) + 1;%预测的天数 取本季度最后Len天
Pre = 10.^Pre;
for i = 1:Len
   %figure 
   axes(handles.axes3);
   plot(1:Time,Data(i+Dim+2,6:N),'-or',1:Time,Pre(i,:),'-vk');%画出每一天的预测值和真实值
   hold on
   scatter(1:Time,Data(i+Dim+2,6:N),'o')
   scatter(1:Time,Pre(i,:),'v')
   legend('实际值','预测值','location','southeast')
   hold off
end
acu = (Pre - Data(Dim+3:M,6:N))./Data(Dim+3:M,6:N);%相对误差
s=0;
for i=1:Time
   s=abs(acu(1,i))+s;
end
Acu=s/Time;
save acu1.mat acu




% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
ParticleScope=[0.1,150;
              0.1,10];
ParticleSize = str2num(get(

3 仿真结果

【预测模型】基于改进粒子群优化最小二乘支持向量机lssvm求解短期电力负荷预测matlab源码_第3张图片

4 参考文献

[1]龙金莲, 张玉分, 卢家暄. 基于改进粒子群优化LSSVM的短期电力负荷预测[J]. 机电信息, 2016, 000(036):25,27.

 

你可能感兴趣的:(预测模型,matlab,算法)