pes2014-debug2-laplace/OPF.m

398 lines
16 KiB
Matlab

clc
clear
close all
arrayA=zeros(21,10);
sumCaseA_SE=0;
sumCaseB_SE=0;
sumCaseC_SE=0;
VoltAAE=0;
VAngleAAE=0;
for badDataNode=1:1
loopN=1;
maxDVolt=0;
maxDVAngle=0;
while 1
close
[kmax,Precision,UAngel,Volt,Busnum,PVi,PVu,Balance,Y,Angle,P0,Q0,r,c,GB,Linei,Linej,Transfori,Transforj,GenU,GenL,GenC,PG,QG,PD,QD,CenterA,PGi,PVQU,PVQL,Liner,Linex,Lineb,Transforr,Transforx,Branchi,Branchg,Branchb,Transfork0]= ...
pf('E:\算例\feeder33\feeder33.txt');
sigma=0.01;
RealPD=PD;
RealQD=QD;
rVolt=Volt;
Loadi=find(PD~=0);
PD0=sparse(Busnum,1);
QD0=sparse(Busnum,1);
%先试一下均匀分布
PD0(Loadi)=RealPD(Loadi).*(1+unifrnd(-3*sigma,3*sigma,length(Loadi),1));
QD0(Loadi)=RealQD(Loadi).*(1+unifrnd(-3*sigma,3*sigma,length(Loadi),1));
mVolt=rVolt.*(1+unifrnd(-3*sigma,3*sigma,1,length(rVolt)));
%正态分布
% PD0(Loadi)=RealPD(Loadi).*(1+normrnd(0,sigma,length(Loadi),1));
% QD0(Loadi)=RealQD(Loadi).*(1+normrnd(0,sigma,length(Loadi),1));
% mVolt=rVolt.*(1+normrnd(0,sigma,length(rVolt),1))';
%加载保存的变量
% PD0=load('PD0');
% PD0=PD0.PD0;
% QD0=load('QD0');
% QD0=QD0.QD0;
% mVolt=load('mVolt');
% mVolt=mVolt.mVolt;
% mVolt(3)=rVolt(3)*(1-sigma*6);
%% 画Case A的图
% figure('Color',[1 1 1]);
[Busnum,Loadi,Volt,PD,QD,rVolt,UAngel,RealPD,RealQD,rUAngel,Vbi,PDbi,QDbi,plotGapA,isConverge]=subOPF([],PD0,QD0,mVolt,sigma);%全部有
if isConverge==0
continue;
end
VoltAAE=VoltAAE+sum(abs((Volt-rVolt)./rVolt));
VAngleAAE=VAngleAAE+sum(abs((UAngel(2:end)-rUAngel(2:end))./rUAngel(2:end)));
loopN=loopN+1;
if loopN>=500
break;
end
end
end
VoltAAE=VoltAAE/(loopN*length(Volt))*100;
VAngleAAE=VAngleAAE/(loopN*length(UAngel(2:end)))*100;
%% PLOTING
% % end
% subplot(4,1,1,'XTick',[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33]);
% CaseAREV=(Volt-rVolt);%Relative Error of Voltage in Case A
% % CaseAREV=CaseAREV(2:end)*100;
% %真实值的
% plot(1:length(CaseAREV),(CaseAREV),'k.:','Marker','diamond');
% %测量值的
% % plot(1:length(CaseAREV),abs((mVolt-rVolt)*100),'c.:','Marker','diamond');
% box off;
% set(gca,'XTick',[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33])
% xlabel('节点号');
% ylabel('误差%');
% subplot(4,1,2);
% % CaseAREA=(UAngel-rUAngel)*100;%Relative Error of Angle in Case A
% CaseAREA=(UAngel-rUAngel);%Relative Error of Angle in Case A
% CaseAREA(1)=0;
% %真实值的
% plot(1:length(CaseAREA),(CaseAREA),'k:','Marker','diamond');
% box off;
% set(gca,'XTick',[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33])
% xlabel('节点号');
% ylabel('误差%');
% subplot(4,1,3);
% % CaseAREP=(PD-RealPD)./(RealPD+0.00001)*100;%Relative Error of PD in Case A
% CaseAREP=(PD-RealPD)./RealPD*100;%Relative Error of PD in Case A
% CaseAREP(1)=0;
% %真实值的
% plot(1:length(CaseAREP),(CaseAREP),'k:','Marker','diamond');
% %测量值的
% % plot(1:length(CaseAREV),abs((PD0-RealPD)./(RealPD+0.00001)*100),'c.:','Marker','diamond');
% box off;
% set(gca,'XTick',[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33])
% xlabel('节点号');
% ylabel('误差%');
% subplot(4,1,4);
% % CaseAREQ=(QD-RealQD)./(RealQD+0.00001)*100;%Relative Error of QD in Case A
% CaseAREQ=(QD-RealQD)./RealQD*100;%Relative Error of QD in Case A
% CaseAREQ(1)=0;
% %真实值的
% plot(1:length(CaseAREQ),(CaseAREQ),'k:','Marker','diamond');
% %测量值的
% % plot(1:length(CaseAREV),abs((QD0-RealQD)./(RealQD+0.00001)*100),'c.:','Marker','diamond');
% box off;
% set(gca,'XTick',[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33])
% xlabel('节点号');
% ylabel('误差%');
% %计算Case A的误差
% CaseAE=sqrt((sum(CaseAREV.^2)+sum(CaseAREA.^2)+sum(CaseAREP.^2)+sum(CaseAREQ.^2))/132);
% objA=full(sum(Vbi)+sum(PDbi)+sum(QDbi));
% notZeros=find(PD0~=0);
% CaseA_SE=sum(((RealPD(notZeros)-PD(notZeros))./(RealPD(notZeros)*1)).^2)+sum(((RealQD(notZeros)-QD(notZeros))./(RealQD(notZeros)*1)).^2)+sum(((Volt-rVolt)./(rVolt*1)).^2);
% CaseA_SE=(CaseA_SE/(length(notZeros)*2+length(Volt)))^.5;
% sumCaseA_SE=sumCaseA_SE+CaseA_SE;
% % arrayA(1:19,I)=Vbi;
% % arrayA(21,I)=CaseAE*1000;
% %% Case B
% % [Busnum,Loadi,Volt,PD,QD,rVolt,UAngel,RealPD,RealQD,rUAngel,Vbi,PDbi,QDbi,plotGapB]=subOPF(setdiff(1:Busnum,[18,21,22,29]),PD0,QD0,mVolt,sigma);%
% [Busnum,Loadi,Volt,PD,QD,rVolt,UAngel,RealPD,RealQD,rUAngel,Vbi,PDbi,QDbi,plotGapB]=subOPF(setdiff(1:Busnum,[2,3,5,20,24,27,28,10,11,12,13]),PD0,QD0,mVolt,sigma);%
% subplot(4,1,1);
% hold on;
% % CaseBREV=(Volt-rVolt)*100;%Relative Error of Voltage in Case B
% CaseBREV=(Volt-rVolt);%Relative Error of Voltage in Case B
% plot(1:length(CaseBREV),(CaseBREV),'b.:','Marker','square');
% subplot(4,1,2);
% hold on;
% % CaseBREA=(UAngel-rUAngel)*100;%Relative Error of Angle in Case B
% CaseBREA=(UAngel-rUAngel);%Relative Error of Angle in Case B
% plot(1:length(CaseBREA),(CaseBREA),'b:','Marker','square');
% subplot(4,1,3);
% hold on;
% % CaseBREP=(PD-RealPD)./(RealPD+0.00001)*100;%Relative Error of PD in Case B
% CaseBREP=(PD-RealPD)./RealPD*100;%Relative Error of PD in Case B
% RealPD(1)=0;
% plot(1:length(CaseBREP),(CaseBREP),'b:','Marker','square');
% subplot(4,1,4);
% hold on;
% % CaseBREQ=(QD-RealQD)./(RealQD+0.00001)*100;%Relative Error of QD in Case B
% CaseBREQ=(QD-RealQD)./RealQD*100;%Relative Error of QD in Case B
% CaseBREQ(1)=0;
% plot(1:length(CaseBREQ),(CaseBREQ),'b:','Marker','square');
% CaseBE=sqrt((sum(CaseBREV.^2)+sum(CaseBREA.^2)+sum(CaseBREP.^2)+sum(CaseBREQ.^2))/132);
% objB=full(sum(Vbi)+sum(PDbi)+sum(QDbi));
% noMeasurei=[2,3,5,20,24,27,28,10,11,12,13];
% Measurei=setdiff(2:33,[2,3,5,20,24,27,28,10,11,12,13]);
% CaseB_SE=sum(((RealPD(Measurei)-PD(Measurei))./(RealPD(Measurei)*1)).^2)+sum(((RealQD(Measurei)-QD(Measurei))./(RealQD(Measurei)*1)).^2)+sum(((Volt(Measurei)-rVolt(Measurei))./(rVolt(Measurei)*1)).^2);
% CaseB_SE=CaseB_SE+sum(((RealPD(noMeasurei)-PD(noMeasurei))./(RealPD(noMeasurei)*1)).^2)+sum(((RealQD(noMeasurei)-QD(noMeasurei))./(RealQD(noMeasurei)*1)).^2)+sum(((Volt(noMeasurei)-rVolt(noMeasurei))./(rVolt(noMeasurei)*1)).^2);
% CaseB_SE=(CaseB_SE/(length(notZeros)+length(noMeasurei) +length(Volt)))^.5;
% sumCaseB_SE=sumCaseB_SE+CaseB_SE;
% %% Case C
% [Busnum,Loadi,Volt,PD,QD,rVolt,UAngel,RealPD,RealQD,rUAngel,Vbi,PDbi,QDbi,plotGapC]=subOPF([1:33],PD0,QD0,mVolt,sigma);%
% subplot(4,1,1);
% hold on;
% % CaseCREV=(Volt-rVolt)*100;%Relative Error of Voltage in Case C
% CaseCREV=(Volt-rVolt);
% plot(1:length(CaseCREV),(CaseCREV),'r.:','Marker','o');
% subplot(4,1,2);
% hold on;
% % CaseCREA=(UAngel-rUAngel)*100;%Relative Error of Angle in Case C
% CaseCREA=(UAngel-rUAngel);
% plot(1:length(CaseCREA),(CaseCREA),'r:','Marker','o');
% subplot(4,1,3);
% hold on;
% % CaseCREP=(PD-RealPD)./(RealPD+0.00001)*100;%Relative Error of PD in Case C
% CaseCREP=(PD-RealPD)./RealPD*100;%Relative Error of PD in Case C
% CaseCREP(1);
% plot(1:length(CaseCREP),(CaseCREP),'r:','Marker','o');
% subplot(4,1,4);
% hold on;
% % CaseCREQ=(QD-RealQD)./(RealQD+0.00001)*100;%Relative Error of QD in Case C
% CaseCREQ=(QD-RealQD)./RealQD*100;%Relative Error of QD in Case C
% CaseCREQ(1)=0;
% plot(1:length(CaseCREQ),(CaseCREQ),'r:','Marker','o');
% % 画legend
% subplot(4,1,1);
% % title('Voltage');
% ld=legend('算例A','算例B','算例C');
% set(ld,'Position',[0.847865087908145 0.786094477711244 0.0543595263724435 0.0605455755156354]);
% subplot(4,1,2);
% % title('Voltage Angle');
% ld=legend('算例A','算例B','算例C');
% set(ld,'Position',[0.847865087908145 0.586094477711244 0.0543595263724435 0.0605455755156354]);
% subplot(4,1,3);
% % title('Active load power');
% ld=legend('算例A','算例B','算例C');
% set(ld,'Position',[0.847865087908145 0.386094477711244 0.0543595263724435 0.0605455755156354]);
% subplot(4,1,4);
% % title('Reactive load power');
% ld=legend('算例A','算例B','算例C');
% set(ld,'Position',[0.847865087908145 0.186094477711244 0.0543595263724435 0.0605455755156354]);
% CaseCE=sqrt((sum(CaseCREV.^2)+sum(CaseCREA.^2)+sum(CaseCREP.^2)+sum(CaseCREQ.^2))/132);
% objC=full(sum(Vbi)+sum(PDbi)+sum(QDbi));
%
% CaseC_SE=sum(((RealPD(notZeros)-PD(notZeros))./(RealPD(notZeros)*1)).^2)+sum(((RealQD(notZeros)-QD(notZeros))./(RealQD(notZeros)*1)).^2)+sum(((Volt-rVolt)./(rVolt*1)).^2);
% CaseC_SE=(CaseC_SE/(length(notZeros)*2+length(Volt)))^.5;
% sumCaseC_SE=sumCaseC_SE+CaseC_SE;
%
% % fprintf('目标函数值 %.2f\n',full(obj));
% fprintf('Case A Case B Case C 的误差\n')
% fprintf('%f %f %f \n',CaseAE,CaseBE,CaseCE);
% fprintf('三个Case目标值\n')
% fprintf('%f\t%f\t%f \n',objA,objB,objC)
% %% 画测量值
% % subplot(4,1,1);
% % plot(1:Busnum,mVolt-rVolt,'k.:','Marker','pentagram')
% % subplot(4,1,3);
% % plot(1:Busnum,(PD0-RealPD)./(RealPD+0.00001),'k:','Marker','pentagram');
% % subplot(4,1,4);
% % plot(1:Busnum,(QD0-RealQD)./(RealQD+0.00001),'k:','Marker','pentagram');
% %% 直方图
% % 电压
% figure('Name','电压直方图')
% split_number=20;
% %Case A
% subplot(1,3,1)
% y=CaseAREV;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% voltBarCaseAX=x;
% voltBarCaseAY=yy;
% xlabel('Error');
% ylabel('Number of buses');
% title('算例A');
% % ylim([0 4])
% %Case B
% subplot(1,3,2)
% y=CaseBREV;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% voltBarCaseBX=x;
% voltBarCaseBY=yy;
% xlabel('Error');
% ylabel('Number of buses');
% title('算例B');
% % ylim([0 4])
% %Case C
% subplot(1,3,3)
% y=CaseCREV;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% voltBarCaseCX=x;
% voltBarCaseCY=yy;
% xlabel('Error');
% ylabel('Number of buses');
% title('算例C');
% % ylim([0 4])
% figure('Name','相角直方图')
% % 相角
% split_number=20;
% %Case A
% subplot(2,2,1)
% y=CaseAREA;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% angelBarCaseAX=x;
% angelBarCaseAY=yy;
% % ylim([0 4])
% %Case B
% subplot(2,2,2)
% y=CaseBREA;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% angelBarCaseBX=x;
% angelBarCaseBY=yy;
% % ylim([0 4])
% %Case C
% subplot(2,2,3)
% y=CaseCREA;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% angelBarCaseCX=x;
% angelBarCaseCY=yy;
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% %PD
% figure('Name','有功直方图')
% split_number=20;
% %Case A
% subplot(2,2,1)
% y=CaseAREP;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% PDBarCaseAX=x;
% PDBarCaseAY=yy;
% % ylim([0 4])
% %Case B
% subplot(2,2,2)
% y=CaseBREP;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% PDBarCaseBX=x;
% PDBarCaseBY=yy;
% % ylim([0 4])
% %Case C
% subplot(2,2,3)
% y=CaseCREP;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% PDBarCaseCX=x;
% PDBarCaseCY=yy;
% %QD
% figure('Name','无功直方图')
% split_number=20;
% %Case A
% subplot(2,2,1)
% y=CaseAREQ;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% QDBarCaseAX=x;
% QDBarCaseAY=yy;
% % ylim([0 4])
% %Case B
% subplot(2,2,2)
% y=CaseBREQ;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% QDBarCaseBX=x;
% QDBarCaseBY=yy;
% % ylim([0 4])
% %Case C
% subplot(2,2,3)
% y=CaseCREQ;
% ymin=min(y);
% ymax=max(y);
% x=linspace(ymin,ymax,split_number); %将最大最小区间分成split_number个等分点(19等分),然后分别计算各个区间的个数
% yy=hist(y,x); %计算各个区间的个数
% % yy=yy/(sum(yy)*(ymax-ymin)/split_number); %计算各个区间的个数,除以总面积,总面积计算的方式为:所有小分割的面积的和即:
% bar(x,yy) %画出概率密度分布图
% QDBarCaseCX=x;
% QDBarCaseCY=yy;
% %画收敛曲线
% fz=find(abs(plotGapA)==0);
% % fz=fz(1);
% figure('Name','互补曲线')
% plot(1:fz-1,plotGapA(1:fz-1));
% figure('Name','最大不平衡量');
% %% 最大不平衡量
% % maxDismatchPQ = [0.3123e-10 0.1497e-10 0.7351e-10; 0.6854e-10 0.1973e-10 0.5824e-10];
% % bar(maxDismatchPQ);
% %% 计算时间
% calTime=[70.16 29.68; 68.48 31.661; 65.156 30.08;];
% bar(calTime,'stacked');
% % figure();
% % DeviationFigure(2:33,[CaseAREV(2:end);CaseBREV(2:end);CaseCREV(2:end)],[CaseAREA(2:end);CaseBREA(2:end);CaseCREA(2:end)],[CaseAREP(2:end),CaseBREP(2:end),CaseCREP(2:end)],[CaseAREQ(2:end),CaseBREQ(2:end),CaseCREQ(2:end)]);%,[CaseAREA;CaseBREA;CaseCREA],[CaseAREV;CaseBREV;CaseCREV],[CaseAREV;CaseBREV;CaseCREV]);
% % VoltBar(voltBarCaseAX,voltBarCaseAY,voltBarCaseBX,voltBarCaseBY,voltBarCaseCX,voltBarCaseCY);
% % AngelBar(angelBarCaseAX,angelBarCaseBY,angelBarCaseCX,angelBarCaseAY,angelBarCaseBX,angelBarCaseCY);
% % PDBar(PDBarCaseAX,PDBarCaseAY,PDBarCaseBX,PDBarCaseBY,PDBarCaseCX,PDBarCaseCY);
% % QDBar(QDBarCaseAX,QDBarCaseAY,QDBarCaseBX,QDBarCaseBY,QDBarCaseCX,QDBarCaseCY);
% % MaxErrorFigure()
% % MaxBoundErrorFigure();
% % DrawLoadProfile();
%% PLOTING