From 40c0a6706f6f7601b2280dbde223a6d2a319a14f Mon Sep 17 00:00:00 2001 From: "dugg@lab-desk" Date: Thu, 22 May 2014 10:24:34 +0800 Subject: [PATCH] Mat_G=[ sparse(PD(Loadi))-mPD(Loadi)-bigM*PDbi-0.1; sparse(PD(Loadi))-mPD(Loadi)+bigM*PDbi+0.1; sparse(QD(Loadi))-mQD(Loadi)-bigM*QDbi-0.1; sparse(QD(Loadi))-mQD(Loadi)+bigM*QDbi+0.1; Volt'-mVolt'-bigM*Vbi-0.03; Volt'-mVolt'+bigM*Vbi+0.03; Vbi; PDbi; QDbi; (1-Vbi).*Vbi; ]; --- FormG.m | 1 + FormLw.m | 3 +++ FormLz.m | 3 +++ OPF.m | 6 +++--- OPF_Init.m | 2 ++ SolveIt.m | 4 ++-- func_ddg.m | 10 +++++++--- func_deltG.m | 26 +++++++++++++++++++------- 8 files changed, 40 insertions(+), 15 deletions(-) diff --git a/FormG.m b/FormG.m index da763e5..49dba17 100644 --- a/FormG.m +++ b/FormG.m @@ -10,5 +10,6 @@ Mat_G=[ Vbi; PDbi; QDbi; + (1-Vbi).*Vbi; ]; end \ No newline at end of file diff --git a/FormLw.m b/FormLw.m index d24712a..69afbe1 100644 --- a/FormLw.m +++ b/FormLw.m @@ -25,6 +25,9 @@ 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=([0*PDU',100*ones(1,length(PDU)),0*QDU',100*ones(1,length(QDU)),0*VoltU,100*ones(1,length(VoltU)),1*ones(1,Busnum+length(Loadi)*2)])'; +t1=[t1; + sparse(ones(Busnum,1)); + ]; t2=Mat_G+Init_U'-t1; Lw=t2; diff --git a/FormLz.m b/FormLz.m index 5b0490f..1559ad5 100644 --- a/FormLz.m +++ b/FormLz.m @@ -22,6 +22,9 @@ 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=([-100*ones(1,length(PDL)),0*PDL',-100*ones(1,length(QDL)),0*QDL',-100*ones(1,length(VoltL)),0*VoltL,0*ones(1,Busnum+length(Loadi)*2)])'; +t1=[t1; + sparse(0*ones(Busnum,1)); +]; t2=Mat_G-Init_L'-t1; Lz=t2; diff --git a/OPF.m b/OPF.m index 3dc7aae..43044a4 100644 --- a/OPF.m +++ b/OPF.m @@ -70,7 +70,7 @@ while(abs(Gap)>Precision) %% 形成等式约束的雅克比 deltH=func_deltH(Busnum,Volt,PVi,Y,PGi,UAngel,r,c,Angle,Loadi); %% 形成不等式约束的雅克比 - deltG=func_deltG(Busnum,PVi,PGi,Loadi,PD,QD); + deltG=func_deltG(Busnum,PVi,PGi,Loadi,PD,QD,Vbi); %% L_1Z=diag(Init_Z./Init_L); U_1W=diag(Init_W./Init_U); @@ -79,7 +79,7 @@ while(abs(Gap)>Precision) %% 形成ddHy ddh=func_ddh(Volt,Init_Y,Busnum,PVi,PGi,Y,UAngel,r,c,Angle,Loadi,ContrlCount); %% 开始构建ddg - ddg=func_ddg(PGi,PVi,Busnum,RestraintCount,Loadi,PD,QD); + ddgzw=func_ddg(PGi,PVi,Busnum,ContrlCount,RestraintCount,Loadi,PD,QD,Init_Z,Init_W); %% 开始构建deltF deltF=func_deltF(PG,QG,PVi,PGi,wPG,wQG,wPD,wQD,PG0,QG0,PD0,PD,QD,QD0,Busnum,Loadi); %% 形成方程矩阵 @@ -94,7 +94,7 @@ while(abs(Gap)>Precision) 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); + XX=SolveIt(deltF,deltG,Init_L,Init_Z,Init_U,Init_W,deltdeltF,ddh,ddgzw,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,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); diff --git a/OPF_Init.m b/OPF_Init.m index ecdc338..c5ee40f 100644 --- a/OPF_Init.m +++ b/OPF_Init.m @@ -2,6 +2,8 @@ function [Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wP Loadi=find(QD~=0 | PD~=0); %Loadi=[1:Busnum]'; RestraintCount=size(Loadi,1)*4+Busnum*2+Busnum+length(Loadi)*2; %约束条件数,放开所有QD +%互补约束数量 +RestraintCount=RestraintCount+Busnum; t_Bal_volt=Volt(Balance); Volt=sparse(1*ones(1,Busnum)); Volt(Balance)=t_Bal_volt; diff --git a/SolveIt.m b/SolveIt.m index bda0ea0..ae59330 100644 --- a/SolveIt.m +++ b/SolveIt.m @@ -1,6 +1,6 @@ -function 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) +function XX=SolveIt(deltF,deltG,Init_L,Init_Z,Init_U,Init_W,deltdeltF,ddh,ddgzw,deltH,Init_Y,Ly,Lz,ContrlCount,Lw,Lul,Luu,RestraintCount,Lx,Balance,PVi,PGi,Busnum,Loadi) LxComa=FormLxComa(deltF,deltG,deltH,Init_L,Luu,Lul,Init_Z,Init_Y,Lz,Init_U,Init_W,Lw,Lx); -H=-deltdeltF+ddh; +H=-(deltdeltF-ddh-ddgzw); %t1=diag(Init_L.\Init_Z-Init_U.\Init_W); t1=diag(Init_Z./Init_L-Init_W./Init_U); t2=-deltG*( t1 )*deltG'; diff --git a/func_ddg.m b/func_ddg.m index 4f33610..5bbcba2 100644 --- a/func_ddg.m +++ b/func_ddg.m @@ -1,4 +1,8 @@ -function ddg=func_ddg(PGi,PVi,Busnum,RestraintCount,Loadi,PD,QD) - -ddg=0; +function ddgzw=func_ddg(PGi,PVi,Busnum,ContrlCount,RestraintCount,Loadi,PD,QD,Init_Z,Init_W) +CCVbiZW=Init_Z(length(Loadi)*4+Busnum*2+1:length(Loadi)*4+Busnum*2+Busnum)+Init_W(length(Loadi)*4+Busnum*2+1:length(Loadi)*4+Busnum*2+Busnum); +ddgzw=[ +sparse(length(Loadi)*2+Busnum*2,ContrlCount); +sparse(Busnum,length(Loadi)*2+Busnum*2),sparse(-2*eye(Busnum))*diag(CCVbiZW),sparse(Busnum,length(Loadi)*2); +sparse(length(Loadi)*2,ContrlCount); +]; end \ No newline at end of file diff --git a/func_deltG.m b/func_deltG.m index 0fee070..c0d6f4c 100644 --- a/func_deltG.m +++ b/func_deltG.m @@ -1,4 +1,4 @@ -function deltG=func_deltG(Busnum,PVi,PGi,Loadi,PD,QD) +function deltG=func_deltG(Busnum,PVi,PGi,Loadi,PD,QD,Vbi) sizeLoadi=size(Loadi,1); %dg3 PD-M*b-t-PD0 dg3_dPD=sparse(1:size(Loadi,1),1:size(Loadi,1),ones(size(Loadi,1),1),size(Loadi,1),size(Loadi,1)); @@ -11,6 +11,8 @@ dg6_dPD=dg5_dPD; dg7_dPD=sparse(sizeLoadi,Busnum); dgPDbi_dPD=sparse(sizeLoadi,sizeLoadi); dgQDbi_dPD=sparse(sizeLoadi,sizeLoadi); +%互补约束 +dgCCVbi_dPD=sparse(length(Loadi),Busnum); %% dg3_dQD=sparse(length(Loadi),length(Loadi)); dg32_dQD=dg3_dQD; @@ -21,6 +23,8 @@ dg6_dQD=dg5_dQD; dg7_dQD=sparse(sizeLoadi,Busnum); dgPDbi_dQD=sparse(sizeLoadi,sizeLoadi); dgQDbi_dQD=sparse(sizeLoadi,sizeLoadi); +%互补约束 +dgCCVbi_dQD=sparse(length(Loadi),Busnum); %% dg3_dx=sparse(2*Busnum,sizeLoadi); dg32_dx=dg3_dx; @@ -33,6 +37,8 @@ dg6_dx=dg5_dx; dg7_dx=sparse(2*Busnum,Busnum); dgPDbi_dx=sparse(2*Busnum,sizeLoadi); dgQDbi_dx=sparse(2*Busnum,sizeLoadi); +%互补约束 +dgCCVbi_dx=sparse(Busnum*2,Busnum); %% dg3_dvbi=sparse(Busnum,sizeLoadi); dg32_dvbi=dg3_dvbi; @@ -43,6 +49,8 @@ dg6_dvbi=sparse(eye(Busnum,Busnum)); dg7_dvbi=sparse(eye(Busnum,Busnum)); dgPDbi_dvbi=sparse(Busnum,sizeLoadi); dgQDbi_dvbi=sparse(Busnum,sizeLoadi); +%互补约束 +dgCCVbi_dvbi=sparse(diag(1-2*Vbi));%互补约束为(1-Vbi).*Vbi %% dg3_dPDbi=sparse(-eye(sizeLoadi)); dg32_dPDbi=sparse(eye(sizeLoadi)); @@ -53,6 +61,8 @@ dg6_dPDbi=sparse(length(Loadi),Busnum); dg7_dPDbi=sparse(length(Loadi),Busnum); dgPDbi_dPDbi=sparse(eye(length(Loadi))); dgQDbi_dPDbi=sparse(zeros(length(Loadi))); +%互补约束 +dgCCVbi_dPDbi=sparse(length(Loadi),Busnum); %% dg3_dQDbi=sparse(-eye(sizeLoadi)); dg32_dQDbi=sparse(eye(sizeLoadi)); @@ -63,13 +73,15 @@ dg6_dQDbi=sparse(length(Loadi),Busnum); dg7_dQDbi=sparse(length(Loadi),Busnum); dgPDbi_dQDbi=sparse(zeros(length(Loadi))); dgQDbi_dQDbi=sparse(eye(length(Loadi))); +%互补约束 +dgCCVbi_dQDbi=sparse(length(Loadi),Busnum); %% -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; +deltG=[dg3_dPD,dg32_dPD,dg4_dPD,dg42_dPD,dg5_dPD,dg6_dPD,dg7_dPD,dgPDbi_dPD,dgQDbi_dPD,dgCCVbi_dPD; + dg3_dQD,dg32_dQD,dg4_dQD,dg42_dQD,dg5_dQD,dg6_dQD,dg7_dQD,dgPDbi_dQD,dgQDbi_dQD,dgCCVbi_dQD; + dg3_dx,dg32_dx,dg4_dx,dg42_dx,dg5_dx,dg6_dx,dg7_dx,dgPDbi_dx,dgQDbi_dx,dgCCVbi_dx; + dg3_dvbi,dg32_dvbi,dg4_dvbi,dg42_dvbi,dg5_dvbi,dg6_dvbi,dg7_dvbi,dgPDbi_dvbi,dgQDbi_dvbi,dgCCVbi_dvbi; + dg3_dPDbi,dg32_dPDbi,dg4_dPDbi,dg42_dPDbi,dg5_dPDbi,dg6_dPDbi,dg7_dPDbi,dgPDbi_dPDbi,dgQDbi_dPDbi,dgCCVbi_dPDbi; + dg3_dQDbi,dg32_dQDbi,dg4_dQDbi,dg42_dQDbi,dg5_dQDbi,dg6_dQDbi,dg7_dQDbi,dgPDbi_dQDbi,dgQDbi_dQDbi,dgCCVbi_dQDbi; ]; end \ No newline at end of file