diff --git a/FormG.m b/FormG.m index 755f22e..7dd6163 100644 --- a/FormG.m +++ b/FormG.m @@ -1,4 +1,4 @@ -function Mat_G=FormG(Volt,PD,QD,Loadi,bigM,mVolt,rVolt,sigma,Vbi,PDbi) +function Mat_G=FormG(Volt,PD,QD,Loadi,bigM,mVolt,rVolt,sigma,Vbi,PDbi,QDbi) Mat_G=[ sparse(PD(Loadi)); @@ -9,5 +9,6 @@ Mat_G=[ Volt'-mVolt'+bigM*Vbi+0.03; Vbi; PDbi; + QDbi; ]; end \ No newline at end of file diff --git a/FormLw.m b/FormLw.m index 3ed0ca2..c91cad8 100644 --- a/FormLw.m +++ b/FormLw.m @@ -24,7 +24,7 @@ QDU(indQD(3:12:end))=1.55*realQD(indQD(3:12:end)); QDU(indQD(9:12:end))=1.05*realQD(indQD(9:12:end)); % PF=0.85; % QDU=1.0*PD(Loadi).*sqrt(1 -PF.^2)./PF; -t1=([PDU',PDU',QDU',QDU',0*VoltU,100*ones(1,length(VoltU)),1*ones(1,Busnum+length(Loadi))])'; +t1=([PDU',PDU',QDU',QDU',0*VoltU,100*ones(1,length(VoltU)),1*ones(1,Busnum+length(Loadi)*2)])'; t2=Mat_G+Init_U'-t1; Lw=t2; diff --git a/FormLz.m b/FormLz.m index 8de54ba..a87dcde 100644 --- a/FormLz.m +++ b/FormLz.m @@ -21,7 +21,7 @@ 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)); % QDL=0*PD(Loadi).*sqrt((1-PF.^2))./PF; -t1=([PDL',PDL',QDL',QDL',-100*ones(1,length(VoltL)),0*VoltL,0*ones(1,Busnum+length(Loadi))])'; +t1=([PDL',PDL',QDL',QDL',-100*ones(1,length(VoltL)),0*VoltL,0*ones(1,Busnum+length(Loadi)*2)])'; t2=Mat_G-Init_L'-t1; Lz=t2; diff --git a/Modification.m b/Modification.m index 3c3daf2..1ed5d45 100644 --- a/Modification.m +++ b/Modification.m @@ -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(3*Busnum+1:end)'; +PDbi=PDbi+AlphaP*t(3*Busnum+1:3*Busnum+length(Loadi))'; +QDbi=QDbi+AlphaP*t(3*Busnum+length(Loadi)+1:end)'; end \ No newline at end of file diff --git a/OPF.m b/OPF.m index ce1795c..8ee5c33 100644 --- a/OPF.m +++ b/OPF.m @@ -45,7 +45,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=60; Precision=Precision/1; %% 加误差 @@ -56,6 +56,7 @@ mVolt=rVolt.*(1+normrnd(0,sigma,length(rVolt),1))'; bigM=10; Vbi=sparse(ones(Busnum,1)); PDbi=sparse(ones(length(Loadi),1)); +QDbi=sparse(ones(length(Loadi),1)); while(abs(Gap)>Precision) if KK>kmax break; @@ -82,7 +83,7 @@ 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,bigM,mVolt,rVolt,sigma,Vbi,PDbi); + Mat_G=FormG(Volt,PD,QD,Loadi,bigM,mVolt,rVolt,sigma,Vbi,PDbi,QDbi); Mat_H=FormH(Busnum,Volt,PG,PD,QG,QD,Y,UAngel,r,c,Angle,Loadi); Ly=Mat_H; Lz=FormLz(Mat_G,Init_L,GenL,Busnum,PVQL,PD,RealPD,RealQD,Loadi,KK,PF); @@ -94,7 +95,7 @@ while(abs(Gap)>Precision) 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 diff --git a/OPF_Init.m b/OPF_Init.m index 29f9c3e..ecdc338 100644 --- a/OPF_Init.m +++ b/OPF_Init.m @@ -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)*4+Busnum*2+Busnum+length(Loadi)*1; %约束条件数,放开所有QD +RestraintCount=size(Loadi,1)*4+Busnum*2+Busnum+length(Loadi)*2; %约束条件数,放开所有QD t_Bal_volt=Volt(Balance); Volt=sparse(1*ones(1,Busnum)); Volt(Balance)=t_Bal_volt; diff --git a/func_ddh.m b/func_ddh.m index a4390b5..97823d0 100644 --- a/func_ddh.m +++ b/func_ddh.m @@ -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 \ No newline at end of file diff --git a/func_deltF.m b/func_deltF.m index 409b262..32b8117 100644 --- a/func_deltF.m +++ b/func_deltF.m @@ -4,6 +4,7 @@ deltF=[sparse(length(Loadi),1); sparse(2*Busnum,1); sparse(ones(Busnum,1)); sparse(ones(length(Loadi),1)); + sparse(ones(length(Loadi),1)) ]; end \ No newline at end of file diff --git a/func_deltG.m b/func_deltG.m index baaaa16..fd8dac2 100644 --- a/func_deltG.m +++ b/func_deltG.m @@ -10,6 +10,7 @@ dg5_dPD=sparse(size(Loadi,1),Busnum); dg6_dPD=dg5_dPD; dg7_dPD=sparse(sizeLoadi,Busnum); dgPDbi_dPD=sparse(sizeLoadi,sizeLoadi); +dgQDbi_dPD=sparse(sizeLoadi,sizeLoadi); %% dg3_dQD=sparse(length(Loadi),length(Loadi)); dg32_dQD=dg3_dQD; @@ -19,6 +20,7 @@ dg5_dQD=sparse(size(Loadi,1),Busnum); dg6_dQD=dg5_dQD; dg7_dQD=sparse(sizeLoadi,Busnum); dgPDbi_dQD=sparse(sizeLoadi,sizeLoadi); +dgQDbi_dQD=sparse(sizeLoadi,sizeLoadi); %% dg3_dx=sparse(2*Busnum,sizeLoadi); dg32_dx=dg3_dx; @@ -30,6 +32,7 @@ dg5_dx=[sparse(1:Busnum,1:Busnum,ones(Busnum,1),Busnum,Busnum); dg6_dx=dg5_dx; dg7_dx=sparse(2*Busnum,Busnum); dgPDbi_dx=sparse(2*Busnum,sizeLoadi); +dgQDbi_dx=sparse(2*Busnum,sizeLoadi); %% dg3_dvbi=sparse(Busnum,sizeLoadi); dg32_dvbi=dg3_dvbi; @@ -39,6 +42,7 @@ dg5_dvbi=sparse(-eye(Busnum,Busnum)); dg6_dvbi=sparse(eye(Busnum,Busnum)); dg7_dvbi=sparse(eye(Busnum,Busnum)); dgPDbi_dvbi=sparse(Busnum,sizeLoadi); +dgQDbi_dvbi=sparse(Busnum,sizeLoadi); %% dg3_dPDbi=sparse(-zeros(sizeLoadi)); dg32_dPDbi=sparse(zeros(sizeLoadi)); @@ -48,12 +52,24 @@ dg5_dPDbi=sparse(length(Loadi),Busnum); dg6_dPDbi=sparse(length(Loadi),Busnum); dg7_dPDbi=sparse(length(Loadi),Busnum); dgPDbi_dPDbi=sparse(eye(length(Loadi))); +dgQDbi_dPDbi=sparse(zeros(length(Loadi))); %% -deltG=[dg3_dPD,dg32_dPD,dg4_dPD,dg42_dPD,dg5_dPD,dg6_dPD,dg7_dPD,dgPDbi_dPD; - dg3_dQD,dg32_dQD,dg4_dQD,dg42_dQD,dg5_dQD,dg6_dQD,dg7_dQD,dgPDbi_dQD; - dg3_dx,dg32_dx,dg4_dx,dg42_dx,dg5_dx,dg6_dx,dg7_dx,dgPDbi_dx; - dg3_dvbi,dg32_dvbi,dg4_dvbi,dg42_dvbi,dg5_dvbi,dg6_dvbi,dg7_dvbi,dgPDbi_dvbi; - dg3_dPDbi,dg32_dPDbi,dg4_dPDbi,dg42_dPDbi,dg5_dPDbi,dg6_dPDbi,dg7_dPDbi,dgPDbi_dPDbi; +dg3_dQDbi=sparse(-zeros(sizeLoadi)); +dg32_dQDbi=sparse(zeros(sizeLoadi)); +dg4_dQDbi=sparse(length(Loadi),length(Loadi)); +dg42_dQDbi=dg4_dPDbi; +dg5_dQDbi=sparse(length(Loadi),Busnum); +dg6_dQDbi=sparse(length(Loadi),Busnum); +dg7_dQDbi=sparse(length(Loadi),Busnum); +dgPDbi_dQDbi=sparse(zeros(length(Loadi))); +dgQDbi_dQDbi=sparse(eye(length(Loadi))); +%% +deltG=[dg3_dPD,dg32_dPD,dg4_dPD,dg42_dPD,dg5_dPD,dg6_dPD,dg7_dPD,dgPDbi_dPD,dgQDbi_dPD; + dg3_dQD,dg32_dQD,dg4_dQD,dg42_dQD,dg5_dQD,dg6_dQD,dg7_dQD,dgPDbi_dQD,dgQDbi_dQD; + dg3_dx,dg32_dx,dg4_dx,dg42_dx,dg5_dx,dg6_dx,dg7_dx,dgPDbi_dx,dgQDbi_dx; + dg3_dvbi,dg32_dvbi,dg4_dvbi,dg42_dvbi,dg5_dvbi,dg6_dvbi,dg7_dvbi,dgPDbi_dvbi,dgQDbi_dvbi; + dg3_dPDbi,dg32_dPDbi,dg4_dPDbi,dg42_dPDbi,dg5_dPDbi,dg6_dPDbi,dg7_dPDbi,dgPDbi_dPDbi,dgQDbi_dPDbi; + dg3_dQDbi,dg32_dQDbi,dg4_dQDbi,dg42_dQDbi,dg5_dQDbi,dg6_dQDbi,dg7_dQDbi,dgPDbi_dQDbi,dgQDbi_dQDbi; ]; end \ No newline at end of file diff --git a/func_deltH.m b/func_deltH.m index 4eef687..6d1d8e0 100644 --- a/func_deltH.m +++ b/func_deltH.m @@ -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 \ No newline at end of file