电力系统正常运行时,负荷预测是其运行和规划的重要依据之一.因此,针对粒子群算法(Particle Swarm Optimization,PSO)优化最小二乘支持向量机(Least Square Support Vector Machine,LSSVM)存在的速度变化梯度方向产生的非最优粒子问题,提出了一种基于自适应粒子群优化LSSVM参数的短期电力负荷预测方法.该预测模型在保持PSO优点的基础上,引入了自适应步长,使PSO在速度梯度上找到更优的粒子;引入遗传算法的变异操作保持粒子群的多样性,减小算法陷入局部极值的可能.随后将自适应PSO对LSSVM回归估计方法的参数进行优化,得到自适应PSO-LSSVM.最后将该方法应用于短期电力负荷预测.
%在测试函数图形上绘制初始化群的位置 %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(
[1]龙金莲, 张玉分, 卢家暄. 基于改进粒子群优化LSSVM的短期电力负荷预测[J]. 机电信息, 2016, 000(036):25,27.