完成了QD,并修复了完成PD时的一个求导错误。

Signed-off-by: dmy <dugg@21cn.com>
This commit is contained in:
dmy 2014-05-14 16:37:56 +08:00
parent 17f274f818
commit b071a58e33
10 changed files with 61 additions and 26 deletions

10
FormG.m
View File

@ -1,12 +1,14 @@
function Mat_G=FormG(Volt,PD,QD,Loadi,Vbi,mVolt,RealVolt,bigM,sigma,PDbi,RealPD,RealQD)
function Mat_G=FormG(Volt,PD,QD,Loadi,Vbi,mVolt,RealVolt,bigM,sigma,PDbi,QDbi,RealPD,RealQD)
Mat_G=[
sparse(PD(Loadi))-bigM*PDbi-PD(Loadi)*sigma;
sparse(PD(Loadi))+bigM*PDbi+PD(Loadi)*sigma;
sparse(QD(Loadi));
sparse(PD(Loadi))-bigM*PDbi-RealPD(Loadi)*sigma;
sparse(PD(Loadi))+bigM*PDbi+RealPD(Loadi)*sigma;
sparse(QD(Loadi))-bigM*QDbi-RealQD(Loadi)*sigma;
sparse(QD(Loadi))+bigM*QDbi+RealQD(Loadi)*sigma;
Volt'-bigM*Vbi-mVolt'-sigma*RealVolt';
Volt'+bigM*Vbi+mVolt'+sigma*RealVolt';
Vbi;
PDbi;
QDbi;
];
end

View File

@ -1,4 +1,4 @@
function Lw=FormLw(Mat_G,Init_U,Busnum,PD0,QD0,Loadi)
function [Lw,UpperLimit]=FormLw(Mat_G,Init_U,Busnum,PD0,QD0,Loadi,bigM)
KK=999;
VoltU=(1.1)*ones(1,Busnum);
PDU=PD0(Loadi);
@ -17,7 +17,8 @@ realQD=QD0(Loadi);
indQD=find(realQD>0);
QDU(indQD(3:12:end))=1.55*realQD(indQD(3:12:end));
QDU(indQD(9:12:end))=1.05*realQD(indQD(9:12:end));
t1=([0*PDU',1*ones(1,length(Loadi)),QDU',0*VoltU,5*ones(1,Busnum),1*ones(1,Busnum),1*ones(1,length(Loadi))])';
t1=([0*PDU',bigM*ones(1,length(Loadi)),0*QDU',bigM*ones(1,length(Loadi)),0*VoltU,bigM*ones(1,Busnum),1*ones(1,Busnum),1*ones(1,length(Loadi)*2)])';
UpperLimit=t1;
t2=Mat_G+Init_U'-t1;
Lw=t2;

View File

@ -1,4 +1,4 @@
function Lz=FormLz(Mat_G,Init_L,Busnum,PD0,QD0,Loadi)
function [Lz,LoweLimit]=FormLz(Mat_G,Init_L,Busnum,PD0,QD0,Loadi,bigM)
VoltL=(0.9)*ones(1,Busnum);
PDL=PD0(Loadi);
PDL(PDL>0)=0.800*PDL(PDL>0);
@ -16,7 +16,9 @@ realQD=QD0(Loadi);
indQD=find(realQD>0);
QDL(indQD(3:12:end))=0.95*realQD(indQD(3:12:end));
QDL(indQD(9:12:end))=0.95*realQD(indQD(9:12:end));
t1=([-1*ones(1,length(Loadi)),0*PDL',QDL',-5*ones(1,length(VoltL)),0*VoltL,0*ones(1,Busnum),0*ones(1,length(Loadi))])';
%t1=([-1*ones(1,length(Loadi)),0*PDL',-1*ones(1,length(Loadi)),0*QDL',-5*ones(1,length(VoltL)),0*VoltL,0*ones(1,Busnum),0*ones(1,length(Loadi)*2)])';
t1=([-bigM*ones(1,length(Loadi)),0*PDL',-bigM*ones(1,length(Loadi)),0*QDL',-bigM*ones(1,length(VoltL)),0*VoltL,0*ones(1,Busnum),0*ones(1,length(Loadi)*2)])';
LoweLimit=t1;
t2=Mat_G-Init_L'-t1;
Lz=t2;
end

View File

@ -1,4 +1,4 @@
function [Init_Z,Init_L,Init_W,Init_U,Init_Y,PG,QG,Volt,UAngel,PD,QD,Vbi,PDbi]=Modification(Init_Z,Init_L,Init_W,Init_U,Init_Y,deltZ,deltL,deltW,deltU,deltX,deltY,PG,QG,Volt,UAngel,PVi,ContrlCount,Balance,Busnum,PGi,PD,QD,Loadi,Vbi,PDbi)
function [Init_Z,Init_L,Init_W,Init_U,Init_Y,PG,QG,Volt,UAngel,PD,QD,Vbi,PDbi,QDbi]=Modification(Init_Z,Init_L,Init_W,Init_U,Init_Y,deltZ,deltL,deltW,deltU,deltX,deltY,PG,QG,Volt,UAngel,PVi,ContrlCount,Balance,Busnum,PGi,PD,QD,Loadi,Vbi,PDbi,QDbi)
AlphaP=FormAlphaP(Init_L,deltL,Init_U,deltU);
%fprintf('AlphaP %f\n',full(AlphaP));
AlphaD=FormAlphaD(Init_Z,deltZ,Init_W,deltW);
@ -25,5 +25,6 @@ Volt=Volt+AlphaP*t(1:Busnum);
Volt(Balance)=balVolt;
UAngel=UAngel+AlphaP*t(Busnum+1:2*Busnum);
Vbi=Vbi+AlphaP*t(2*Busnum+1:2*Busnum+Busnum)';
PDbi=PDbi+AlphaP*t(2*Busnum+Busnum+1:end)';
PDbi=PDbi+AlphaP*t(2*Busnum+Busnum+1:2*Busnum+Busnum+length(Loadi))';
QDbi=QDbi+AlphaP*t(2*Busnum+Busnum+length(Loadi)+1:end)';
end

18
OPF.m
View File

@ -44,7 +44,7 @@ RealQD=QD0;
Gap=(Init_L*Init_Z'-Init_U*Init_W');
KK=0;
plotGap=zeros(1,60);
ContrlCount=size(Loadi,1)*2+Busnum*2+Busnum+length(Loadi);
ContrlCount=size(Loadi,1)*2+Busnum*2+Busnum+length(Loadi)*2;
kmax=600;
Precision=Precision/1;
sigma=0.03;
@ -57,7 +57,8 @@ RealVolt=Volt0;
mVolt=Volt0.*(1+normrnd(0,sigma,1,length(Volt0)));
Vbi=sparse(1*ones(Busnum,1));
PDbi=sparse(1*ones(length(Loadi),1));
bigM=1;
QDbi=sparse(1*ones(length(Loadi),1));
bigM=5;
while(abs(Gap)>Precision)
if KK>kmax
break;
@ -84,23 +85,26 @@ while(abs(Gap)>Precision)
%%
Luu=Init_U'.*Init_W'+Init_u*ones(RestraintCount,1);
Lul=Init_L'.*Init_Z'-Init_u*ones(RestraintCount,1);
Mat_G=FormG(Volt,PD,QD,Loadi,Vbi,mVolt,RealVolt,bigM,sigma,PDbi,RealPD,RealQD);
Mat_G=FormG(Volt,PD,QD,Loadi,Vbi,mVolt,RealVolt,bigM,sigma,PDbi,QDbi,RealPD,RealQD);
Mat_H=FormH(Busnum,Volt,PG,PD,QG,QD,Y,UAngel,r,c,Angle,Loadi);
Ly=Mat_H;
Lz=FormLz(Mat_G,Init_L,Busnum,PD0,QD0,Loadi);
Lw=FormLw(Mat_G,Init_U,Busnum,PD0,QD0,Loadi);
[Lz,LowerLimit]=FormLz(Mat_G,Init_L,Busnum,PD0,QD0,Loadi,bigM);%
[Lw,UpperLimit]=FormLw(Mat_G,Init_U,Busnum,PD0,QD0,Loadi,bigM);%
Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W);
if any(LowerLimit>UpperLimit)
warning('');
end
YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx);
%%
fprintf(' %d Gap %f\n',KK+1,plotGap(KK+1));
XX=SolveIt(deltF,deltG,Init_L,Init_Z,Init_U,Init_W,deltdeltF,ddh,ddg,deltH,Init_Y,Ly,Lz,ContrlCount,Lw,Lul,Luu,RestraintCount,Lx,Balance,PVi,PGi,Busnum,Loadi);
%%
[deltZ,deltL,deltW,deltU,deltX,deltY]=AssignXX(XX,ContrlCount,RestraintCount,Busnum);
[Init_Z,Init_L,Init_W,Init_U,Init_Y,PG,QG,Volt,UAngel,PD,QD,Vbi,PDbi]=Modification(Init_Z,Init_L,Init_W,Init_U,Init_Y,deltZ,deltL,deltW,deltU,deltX,deltY,PG,QG,Volt,UAngel,PVi,ContrlCount,Balance,Busnum,PGi,PD,QD,Loadi,Vbi,PDbi);
[Init_Z,Init_L,Init_W,Init_U,Init_Y,PG,QG,Volt,UAngel,PD,QD,Vbi,PDbi,QDbi]=Modification(Init_Z,Init_L,Init_W,Init_U,Init_Y,deltZ,deltL,deltW,deltU,deltX,deltY,PG,QG,Volt,UAngel,PVi,ContrlCount,Balance,Busnum,PGi,PD,QD,Loadi,Vbi,PDbi,QDbi);
Gap=(Init_L*Init_Z'-Init_U*Init_W');
KK=KK+1;
end
fprintf(': %f\n',sum(full(Vbi)));
fprintf('Ä¿±êº¯Êý: %f\n',sum(full(PDbi)));
fprintf(': %f\n',sum(full(QDbi)));
toc

View File

@ -1,7 +1,7 @@
function [Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wPG,wQG,wPD,wQD,PD,PD0,QD,randPDind,Loadi]=OPF_Init(Busnum,Balance,PG,QG,Volt,GenU,GenL,PVi,PGi,PVQU,PVQL,PD0,QD0,QD,PD)
Loadi=find(QD~=0 | PD~=0);
%Loadi=[1:Busnum]';
RestraintCount=size(Loadi,1)*2+size(Loadi,1)+Busnum*2+Busnum+length(Loadi); %,QD
RestraintCount=size(Loadi,1)*2+size(Loadi,1)*2+Busnum*2+Busnum+length(Loadi)*2; %,QD
t_Bal_volt=Volt(Balance);
Volt=sparse(1*ones(1,Busnum));
Volt(Balance)=t_Bal_volt;

View File

@ -51,7 +51,7 @@ t=[ddPdVdV+ddQdVdV,ddPdVdT+ddQdVdT;
sizeLoadi=size(Loadi,1)*2;
ddh=[
sparse(sizeLoadi,ContrlCount);
sparse(2*Busnum,sizeLoadi),-t,sparse(2*Busnum,Busnum+length(Loadi));
sparse(Busnum+length(Loadi),ContrlCount);
sparse(2*Busnum,sizeLoadi),-t,sparse(2*Busnum,Busnum+length(Loadi)*2);
sparse(Busnum+length(Loadi)*2,ContrlCount);
];
end

View File

@ -6,5 +6,6 @@ deltF=[sparse(length(Loadi),1);
sparse(2*Busnum,1);
sparse(ones(Busnum,1));
sparse(ones(length(Loadi),1));
sparse(ones(length(Loadi),1));
];
end

View File

@ -4,52 +4,75 @@ sizeLoadi=size(Loadi,1);
dg3_dPD=sparse(1:size(Loadi,1),1:size(Loadi,1),ones(size(Loadi,1),1),size(Loadi,1),size(Loadi,1));
%dg32 PD+M*B+t+PD0
dg32_dPD=dg3_dPD;
%dg4 QD-M*B-t-QD0
dg4_dPD=sparse(size(Loadi,1),length(Loadi));
%dg42 QD+M*B+t+QD0
dg42_dPD=sparse(size(Loadi,1),length(Loadi));
dg5_dPD=sparse(size(Loadi,1),Busnum);
dg6_dPD=dg5_dPD;
%dg7 ÊÇ VbiµÄÔ¼Êø
dg7_dPD=sparse(sizeLoadi,Busnum);
dpdbi_dPD=sparse(sizeLoadi,sizeLoadi);
dqdbi_dPD=sparse(sizeLoadi,sizeLoadi);
%%
dg3_dQD=sparse(length(Loadi),length(Loadi));
dg32_dQD=sparse(sizeLoadi,sizeLoadi);
dg4_dQD=sparse(1:size(Loadi,1),1:size(Loadi,1),ones(size(Loadi,1),1),size(Loadi,1),size(Loadi,1));
dg42_dQD=sparse(1:size(Loadi,1),1:size(Loadi,1),ones(size(Loadi,1),1),size(Loadi,1),size(Loadi,1));
dg5_dQD=sparse(size(Loadi,1),Busnum);
dg6_dQD=dg5_dQD;
dg7_dQD=sparse(sizeLoadi,Busnum);
dpdbi_dQD=sparse(sizeLoadi,sizeLoadi);
dqdbi_dQD=sparse(sizeLoadi,sizeLoadi);
%%
dg3_dx=sparse(2*Busnum,sizeLoadi);
dg32_dx=sparse(2*Busnum,sizeLoadi);
dg4_dx=sparse(2*Busnum,length(Loadi));
dg42_dx=sparse(2*Busnum,sizeLoadi);
dg5_dx=[sparse(1:Busnum,1:Busnum,ones(Busnum,1),Busnum,Busnum);
sparse(Busnum,Busnum);
];
dg6_dx=dg5_dx;
dg7_dx=sparse(2*Busnum,Busnum);
dpdbi_dx=sparse(2*Busnum,sizeLoadi);
dqdbi_dx=sparse(2*Busnum,sizeLoadi);
%%
dg3_dvbi=sparse(Busnum,sizeLoadi);
dg32_dvbi=sparse(Busnum,sizeLoadi);
dg4_dvbi=sparse(Busnum,length(Loadi));
dg42_dvbi=sparse(Busnum,sizeLoadi);
dg5_dvbi=sparse(-eye(Busnum,Busnum));
dg6_dvbi=sparse(eye(Busnum,Busnum));
dg7_dvbi=sparse(eye(Busnum,Busnum));
dpdbi_dvbi=sparse(Busnum,sizeLoadi);
dqdbi_dvbi=sparse(Busnum,sizeLoadi);
%%
dg3_dpdbi=sparse(-eye(sizeLoadi,sizeLoadi));
dg32_dpdbi=sparse(eye(sizeLoadi,sizeLoadi));
dg4_dpdbi=sparse(sizeLoadi,sizeLoadi);
dg42_dpdbi=sparse(sizeLoadi,sizeLoadi);
dg5_dpdbi=sparse(sizeLoadi,Busnum);
dg6_dpdbi=sparse(sizeLoadi,Busnum);
dg7_dpdbi=sparse(sizeLoadi,Busnum);
dpdbi_dpdbi=sparse(eye(sizeLoadi,sizeLoadi));
dqdbi_dpdbi=sparse(sizeLoadi,sizeLoadi);
%%
deltG=[dg3_dPD,dg32_dPD,dg4_dPD,dg5_dPD,dg6_dPD,dg7_dPD,dpdbi_dPD;
dg3_dQD,dg32_dQD,dg4_dQD,dg5_dQD,dg6_dQD,dg7_dQD,dpdbi_dQD;
dg3_dx,dg32_dx,dg4_dx,dg5_dx,dg6_dx,dg7_dx,dpdbi_dx;
dg3_dvbi,dg32_dvbi,dg4_dvbi,dg5_dvbi,dg6_dvbi,dg7_dvbi,dpdbi_dvbi;
dg3_dpdbi,dg32_dpdbi,dg4_dpdbi,dg5_dpdbi,dg6_dpdbi,dg7_dpdbi,dpdbi_dpdbi;
dg3_dqdbi=sparse(sizeLoadi,sizeLoadi);
dg32_dqdbi=sparse(sizeLoadi,sizeLoadi);
dg4_dqdbi=sparse(-eye(sizeLoadi,sizeLoadi));
dg42_dqdbi=sparse(eye(sizeLoadi,sizeLoadi));
dg5_dqdbi=sparse(sizeLoadi,Busnum);
dg6_dqdbi=sparse(sizeLoadi,Busnum);
dg7_dqdbi=sparse(sizeLoadi,Busnum);
dpdbi_dqdbi=sparse(sizeLoadi,sizeLoadi);
dqdbi_dqdbi=sparse(eye(sizeLoadi,sizeLoadi));
%%
deltG=[dg3_dPD,dg32_dPD,dg4_dPD,dg42_dPD,dg5_dPD,dg6_dPD,dg7_dPD,dpdbi_dPD,dqdbi_dPD;
dg3_dQD,dg32_dQD,dg4_dQD,dg42_dQD,dg5_dQD,dg6_dQD,dg7_dQD,dpdbi_dQD,dqdbi_dQD;
dg3_dx,dg32_dx,dg4_dx,dg42_dx,dg5_dx,dg6_dx,dg7_dx,dpdbi_dx,dqdbi_dx;
dg3_dvbi,dg32_dvbi,dg4_dvbi,dg42_dvbi,dg5_dvbi,dg6_dvbi,dg7_dvbi,dpdbi_dvbi,dqdbi_dvbi;
dg3_dpdbi,dg32_dpdbi,dg4_dpdbi,dg42_dpdbi,dg5_dpdbi,dg6_dpdbi,dg7_dpdbi,dpdbi_dpdbi,dqdbi_dpdbi;
dg3_dqdbi,dg32_dqdbi,dg4_dqdbi,dg42_dqdbi,dg5_dqdbi,dg6_dqdbi,dg7_dqdbi,dpdbi_dqdbi,dqdbi_dqdbi;
];
% deltG=[dg3_dPD,dg32_dPD,dg4_dPD,dg5_dPD,dg6_dPD,dg7_dPD;
% dg3_dQD,dg32_dQD,dg4_dQD,dg5_dQD,dg6_dQD,dg7_dQD;

View File

@ -4,6 +4,7 @@ dH_dQD=[sparse(size(Loadi,1),Busnum) sparse(1:size(Loadi,1),Loadi,-ones(size(Loa
dH_dx = jacobian_M(Busnum,Volt,Y,Angle,UAngel,r,c); %
dH_dvbi=sparse(Busnum,2*Busnum);
dH_dpdbi=sparse(length(Loadi),2*Busnum);
deltH=[dH_dPD;dH_dQD;dH_dx';dH_dvbi;dH_dpdbi];
dH_dqdbi=sparse(length(Loadi),2*Busnum);
deltH=[dH_dPD;dH_dQD;dH_dx';dH_dvbi;dH_dpdbi;dH_dqdbi];
end