加均匀分布

Signed-off-by: dmy@lab <dmy@lab.lab>
This commit is contained in:
dmy@lab 2015-03-29 11:15:21 +08:00
parent 537b5e4699
commit d3146da2b9
1 changed files with 396 additions and 369 deletions

271
run.m
View File

@ -2,121 +2,139 @@ clear
clc
% yalmip('clear')
addpath('.\Powerflow')
[~, ~, ~, ~,Volt,Vangle,Y,Yangle,r,c,newwordParameter,PG,QG,PD,QD,Balance]=pf('ieee4-DN.dat', '0');
[~, ~, ~, ~,Volt,Vangle,Y,Yangle,r,c,newwordParameter,PG,QG,PD,QD,Balance]=pf('E:\\feeder33\feeder33ieee.txt', '0');
% 'E:\\feeder33\feeder33ieee.txt'
%%
sigma=0.03;%
%%
%
rVolt=Volt; %
BalanceVolt=Volt(Balance);
mVolt=rVolt.*(normrnd(0,sigma,length(Volt),1)+1);%
rVAngel=Vangle;
%%
%
cmpY=Y.*exp(1j*sparse(r,c,Yangle,length(Y),length(Y)));%
cmpV=Volt.*exp(1j*Vangle); %
cmpI=cmpY*cmpV;%
rI=abs(cmpI); %
mI=rI.*(normrnd(0,sigma,length(rI),1)+1);%
%%
%
lineI=newwordParameter.line.lineI;
lineJ=newwordParameter.line.lineJ;
lineR=newwordParameter.line.lineR;
lineX=newwordParameter.line.lineX;
lineB2=newwordParameter.line.lineB2;
lineG=real(1./(lineR+1j*lineX));
lineB=imag(1./(lineR+1j*lineX));
cmpBranchI=BranchI( cmpV,lineI,lineJ,lineR,lineX );%
rBranchI=abs(cmpBranchI);%
mBranchI=rBranchI.*(normrnd(0,sigma,length(rBranchI),1)+1);%
%%
rBranchP= BranchP( cmpV,cmpBranchI,lineI,lineB2 );
mBranchP=rBranchP.*(normrnd(0,sigma,length(rBranchP),1)+1);%
rBranchQ=BranchQ( cmpV,cmpBranchI,lineI,lineB2 );
mBranchQ=rBranchQ.*(normrnd(0,sigma,length(rBranchQ),1)+1);%
%%
transI=newwordParameter.trans.transI;
transJ=newwordParameter.trans.transJ;
transK=newwordParameter.trans.transK;
transR=newwordParameter.trans.transR;
transX=newwordParameter.trans.transX;
transG=real(1./(transR+1j*transX));
transB=imag(1./(transR+1j*transX));
rTransP=TransPower( newwordParameter,rVolt,rVAngel );
rTransQ=TransReactivePower( newwordParameter,rVolt,rVAngel );
mTransP=rTransP.*(normrnd(0,sigma,length(rTransP),1)+1);
mTransQ=rTransQ.*(normrnd(0,sigma,length(rTransQ),1)+1);
%%
rPD=PD;
PDi=find(PD~=0);
rQD=QD;
QDi=find(QD~=0);
rPG=PG;
PGi=find(PG~=0);
rQG=QG;
QGi=find(QG~=0);
mPD=rPD.*(normrnd(0,sigma,length(rPD),1)+1);
mQD=rQD.*(normrnd(0,sigma,length(rQD),1)+1);
mPG=rPG.*(normrnd(0,sigma,length(rPG),1)+1);
mQG=rQG.*(normrnd(0,sigma,length(rQG),1)+1);
%% 0
zerosInjectionIndex=1:length(Volt);
zerosInjectionIndex=zerosInjectionIndex( ~(PD~=0|QD~=0|PG~=0|QG~=0) );
% zerosInjectionIndex=zeros(0,0);
%%
%
PDQDi=union(PDi,QDi);
onlyPG=setdiff(PGi,PDQDi);
onlyQG=setdiff(QGi,PDQDi);
%%
% measureSigma=abs(([rVolt;rBranchP;rBranchQ;rTransP;rTransQ].*sigma));
measureSigma=abs(([rVolt;rPD(PDi);rQD(QDi);].*sigma));
measureSigma(measureSigma<1e-6)=mean(measureSigma(measureSigma>1e-6));
W=sparse(diag(1./measureSigma.^2)) ;
% W=eye(length(W));
% W=sparse(1:length(W),1:length(W),400,length(W),length(W));
%%
stateVarCount=2*length(Volt);
measurements=length(mVolt)+length(mBranchI)+length(mBranchP)+length(mBranchQ)+length(mPG)+length(mQG)+length(mTransP)+length(mTransQ);
fprintf(' %f\n',measurements/stateVarCount);
%% save
% save('mVolt','mVolt');
% save('mPG','mPG');
% save('mQG','mQG');
% save('mBranchI','mBranchI');
% save('mBranchP','mBranchP');
% save('mBranchQ','mBranchQ');
% save('mTransP','mTransP');
% save('mTransQ','mTransQ');
%% load
% load('mVolt');
% load('mPG');
% load('mQG');
% load('mBranchI');
% load('mBranchP');
% load('mBranchQ');
% load('mTransP');
% load('mTransQ');
%%
%
SEVolt=sparse(ones(length(mVolt),1));
SEVolt(Balance)=rVolt(Balance);
SEVAngle=sparse(-0.00*ones(length(mVolt),1));
% SEVolt=rVolt;
% SEVAngle=rVAngel;
maxD=1000;
Iteration=0;
optimalCondition=100;
eps=1e-5;
mu=0;
v=2;
ojbFunDecrease=1000;%
% Jacobi
% while max(abs(g))>1e-5;
% while maxD>1e-5
while max(abs(optimalCondition))>eps
sigma=0.01;%
loop=1;
VoltAAE=0;
VAngleAAE=0;
while 1
%%
%
rVolt=Volt; %
BalanceVolt=Volt(Balance);
% mVolt=rVolt.*(normrnd(0,sigma,length(Volt),1)+1);%
%
mVolt=rVolt.*(unifrnd(-3*sigma,3*sigma,length(rVolt),1)+1);
rVAngel=Vangle;
%%
%
cmpY=Y.*exp(1j*sparse(r,c,Yangle,length(Y),length(Y)));%
cmpV=Volt.*exp(1j*Vangle); %
cmpI=cmpY*cmpV;%
rI=abs(cmpI); %
mI=rI.*(normrnd(0,sigma,length(rI),1)+1);%
%%
%
lineI=newwordParameter.line.lineI;
lineJ=newwordParameter.line.lineJ;
lineR=newwordParameter.line.lineR;
lineX=newwordParameter.line.lineX;
lineB2=newwordParameter.line.lineB2;
lineG=real(1./(lineR+1j*lineX));
lineB=imag(1./(lineR+1j*lineX));
cmpBranchI=BranchI( cmpV,lineI,lineJ,lineR,lineX );%
rBranchI=abs(cmpBranchI);%
mBranchI=rBranchI.*(normrnd(0,sigma,length(rBranchI),1)+1);%
%%
rBranchP= BranchP( cmpV,cmpBranchI,lineI,lineB2 );
mBranchP=rBranchP.*(normrnd(0,sigma,length(rBranchP),1)+1);%
rBranchQ=BranchQ( cmpV,cmpBranchI,lineI,lineB2 );
mBranchQ=rBranchQ.*(normrnd(0,sigma,length(rBranchQ),1)+1);%
%%
transI=newwordParameter.trans.transI;
transJ=newwordParameter.trans.transJ;
transK=newwordParameter.trans.transK;
transR=newwordParameter.trans.transR;
transX=newwordParameter.trans.transX;
transG=real(1./(transR+1j*transX));
transB=imag(1./(transR+1j*transX));
rTransP=TransPower( newwordParameter,rVolt,rVAngel );
rTransQ=TransReactivePower( newwordParameter,rVolt,rVAngel );
mTransP=rTransP.*(normrnd(0,sigma,length(rTransP),1)+1);
mTransQ=rTransQ.*(normrnd(0,sigma,length(rTransQ),1)+1);
%%
rPD=PD;
PDi=find(PD~=0);
rQD=QD;
QDi=find(QD~=0);
rPG=PG;
PGi=find(PG~=0);
rQG=QG;
QGi=find(QG~=0);
%
% mPD=rPD.*(normrnd(0,sigma,length(rPD),1)+1);
% mQD=rQD.*(normrnd(0,sigma,length(rQD),1)+1);
% mPG=rPG.*(normrnd(0,sigma,length(rPG),1)+1);
% mQG=rQG.*(normrnd(0,sigma,length(rQG),1)+1);
%
mPD=rPD.*(unifrnd(-3*sigma,3*sigma,length(rPD),1)+1);
mQD=rQD.*(unifrnd(-3*sigma,3*sigma,length(rQD),1)+1);
mPG=rPG.*(unifrnd(-3*sigma,3*sigma,length(rPG),1)+1);
mQG=rQG.*(unifrnd(-3*sigma,3*sigma,length(rQD),1)+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)));
%% 0
zerosInjectionIndex=1:length(Volt);
zerosInjectionIndex=zerosInjectionIndex( ~(PD~=0|QD~=0|PG~=0|QG~=0) );
% zerosInjectionIndex=zeros(0,0);
%%
%
PDQDi=union(PDi,QDi);
onlyPG=setdiff(PGi,PDQDi);
onlyQG=setdiff(QGi,PDQDi);
%%
% measureSigma=abs(([rVolt;rBranchP;rBranchQ;rTransP;rTransQ].*sigma));
measureSigma=abs(([rVolt;rPD(PDi);rQD(QDi);].*sigma));
% measureSigma(measureSigma<1e-6)=mean(measureSigma(measureSigma>1e-6));
W=sparse(diag(1./measureSigma.^2)) ;
% W=eye(length(W));
% W=sparse(1:length(W),1:length(W),400,length(W),length(W));
%%
stateVarCount=2*length(Volt);
measurements=length(mVolt)+length(mBranchI)+length(mBranchP)+length(mBranchQ)+length(mPG)+length(mQG)+length(mTransP)+length(mTransQ);
fprintf(' %f\n',measurements/stateVarCount);
%% save
% save('mVolt','mVolt');
% save('mPG','mPG');
% save('mQG','mQG');
% save('mBranchI','mBranchI');
% save('mBranchP','mBranchP');
% save('mBranchQ','mBranchQ');
% save('mTransP','mTransP');
% save('mTransQ','mTransQ');
%% load
% load('mVolt');
% load('mPG');
% load('mQG');
% load('mBranchI');
% load('mBranchP');
% load('mBranchQ');
% load('mTransP');
% load('mTransQ');
%%
%
SEVolt=sparse(ones(length(mVolt),1));
SEVolt(Balance)=rVolt(Balance);
SEVAngle=sparse(-0.00*ones(length(mVolt),1));
% SEVolt=rVolt;
% SEVAngle=rVAngel;
maxD=1000;
Iteration=0;
optimalCondition=100;
eps=1e-5;
mu=0;
v=2;
ojbFunDecrease=1000;%
% Jacobi
% while max(abs(g))>1e-5;
% while maxD>1e-5
while max(abs(maxD))>eps
%
dV_dV=sparse(1:length(mVolt),1:length(mVolt),1,length(mVolt),length(mVolt));%
dV_dTyta=sparse(length(mVolt),length(mVolt));
@ -284,11 +302,11 @@ while max(abs(optimalCondition))>eps
% nodePQ=[nodeP;nodeQ];
% c=nodePQ(zerosInjectionIndex);
%%
% H=[dV_dV,dV_dTyta;
% dLPij_dVi+dLPij_dVj,dLPij_dThetai+dLPij_dThetaj ;
% dLQij_dVi+dLQij_dVj,dLQij_dThetai+dLQij_dThetaj ;
% dTPij_dVi+dTPij_dVj,dTPij_dThetai+dTPij_dThetaj;
% dTQij_dVi+dTQij_dVj,dTQij_dThetai+dTQij_dThetaj];%jacobi
% H=[dV_dV,dV_dTyta;
% dLPij_dVi+dLPij_dVj,dLPij_dThetai+dLPij_dThetaj ;
% dLQij_dVi+dLQij_dVj,dLQij_dThetai+dLQij_dThetaj ;
% dTPij_dVi+dTPij_dVj,dTPij_dThetai+dTPij_dThetaj;
% dTQij_dVi+dTQij_dVj,dTQij_dThetai+dTQij_dThetaj];%jacobi
H=[dV_dV,dV_dTyta;
dPdV(PDi,:),dPdTyta(PDi,:);
dQdV(QDi,:),dQdTyta(QDi,:)];%jacobi
@ -298,15 +316,15 @@ while max(abs(optimalCondition))>eps
SEBranchQ=BranchQ( SEVolt.*exp(1j*SEVAngle),SEBranchI,lineI,lineB2 );
SETransP=TransPower( newwordParameter,SEVolt,SEVAngle );
SETransQ=TransReactivePower( newwordParameter,SEVolt,SEVAngle );
% rAngleIJ=sparse(r,c,rVAngel(r)-rVAngel(c) -Yangle,length(mVolt),length(mVolt)) ;
% diag(rVolt)*Y.* ( spfun (@cos, rAngleIJ ) )*rVolt;
% rAngleIJ=sparse(r,c,rVAngel(r)-rVAngel(c) -Yangle,length(mVolt),length(mVolt)) ;
% diag(rVolt)*Y.* ( spfun (@cos, rAngleIJ ) )*rVolt;
SEPD=diag(SEVolt)*Y.* ( spfun (@cos, VAngleIJ ) )*SEVolt;
SEQD=diag(SEVolt)*Y.* ( spfun(@sin,VAngleIJ) )*SEVolt;
h=[SEVolt;SEPD(PDi);SEQD(QDi);];
% h=[SEVolt;SEBranchP;SEBranchQ;SETransP;SETransQ];
% z=[mVolt;mBranchP;mBranchQ;mTransP;mTransQ];
% h=[SEVolt;SEBranchP;SEBranchQ;SETransP;SETransQ];
% z=[mVolt;mBranchP;mBranchQ;mTransP;mTransQ];
z=[mVolt;-mPD(PDi);-mQD(QDi)];
@ -376,7 +394,16 @@ while max(abs(optimalCondition))>eps
optimalCondition=-g;
optimalCondition(Balance)=0;
optimalCondition(Balance+length(mVolt))=0;
end
VoltAAE=VoltAAE+sum(abs((SEVolt-rVolt)./rVolt));
VAngleAAE=VAngleAAE+sum(abs((SEVAngle(2:end)-rVAngel(2:end))./rVAngel(2:end)));
if loop>=500
break
end
loop=loop+1;
end
VoltAAE=VoltAAE/(loop*length(SEVolt))*100;
VAngleAAE=VAngleAAE/(loop*length(SEVAngle(2:end)))*100;
%%
fprintf('%d\n',Iteration);
fval=full((z-h)'*W*(z-h));