如果用量测值确定不等式上下界容易出现不收敛的问题。
Signed-off-by: dmy@lab <dmy@lab.lab>
This commit is contained in:
parent
37bbf6fc86
commit
361909bcde
|
|
@ -8,18 +8,18 @@ pIi=find(Ii>0);
|
||||||
nIi=find(Ii<0);
|
nIi=find(Ii<0);
|
||||||
% lower=-0.2*sparse(ones(length(Loadi)*2,1));
|
% lower=-0.2*sparse(ones(length(Loadi)*2,1));
|
||||||
upper=ones(length(Loadi)*2,1);
|
upper=ones(length(Loadi)*2,1);
|
||||||
upper(pIr)=1.2*Ir(pIr);
|
upper(pIr)=1.4*Ir(pIr);
|
||||||
upper(nIr)=0.8*Ir(nIr);
|
upper(nIr)=0.6*Ir(nIr);
|
||||||
upper(pIi+length(Ir))=1.2*Ii(pIi);
|
upper(pIi+length(Ir))=1.4*Ii(pIi);
|
||||||
upper(nIi+length(Ir))=0.8*Ii(nIi);
|
upper(nIi+length(Ir))=0.6*Ii(nIi);
|
||||||
|
|
||||||
%太小的数都要放宽一些
|
%太小的数都要放宽一些
|
||||||
tooSmall=find(abs(Ir)<0.0005);
|
tooSmall=find(abs(Ir)<0.0005);
|
||||||
% upper(tooSmall)=0.99*abs(Ir(tooSmall));
|
% upper(tooSmall)=0.99*abs(Ir(tooSmall));
|
||||||
upper(tooSmall)=0.002;
|
upper(tooSmall)=0.2;
|
||||||
tooSmall=find(abs(Ii)<0.0005);
|
tooSmall=find(abs(Ii)<0.0005);
|
||||||
% upper(tooSmall+length(Ir))=0.99*abs(Ii(tooSmall));
|
% upper(tooSmall+length(Ir))=0.99*abs(Ii(tooSmall));
|
||||||
upper(tooSmall+length(Ir))=0.002;
|
upper(tooSmall+length(Ir))=0.2;
|
||||||
|
|
||||||
% upper([4,5,6])=[1;1;1];
|
% upper([4,5,6])=[1;1;1];
|
||||||
% upper([4,5,6])=0.2*Ii(nIi);
|
% upper([4,5,6])=0.2*Ii(nIi);
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,18 @@ pIi=find(Ii>0);
|
||||||
nIi=find(Ii<0);
|
nIi=find(Ii<0);
|
||||||
% lower=-0.2*sparse(ones(length(Loadi)*2,1));
|
% lower=-0.2*sparse(ones(length(Loadi)*2,1));
|
||||||
lower=ones(length(Loadi)*2,1);
|
lower=ones(length(Loadi)*2,1);
|
||||||
lower(pIr)=0.8*Ir(pIr);
|
lower(pIr)=0.6*Ir(pIr);
|
||||||
lower(nIr)=1.2*Ir(nIr);
|
lower(nIr)=1.4*Ir(nIr);
|
||||||
lower(pIi+length(Ir))=0.8*Ii(pIi);
|
lower(pIi+length(Ir))=0.6*Ii(pIi);
|
||||||
lower(nIi+length(Ir))=1.2*Ii(nIi);
|
lower(nIi+length(Ir))=1.4*Ii(nIi);
|
||||||
|
|
||||||
%太小的数都要放宽一些
|
%太小的数都要放宽一些
|
||||||
tooSmall=find(abs(Ir)<0.0005);
|
tooSmall=find(abs(Ir)<0.0005);
|
||||||
% lower(tooSmall)=-0.99*abs(Ir(tooSmall));
|
% lower(tooSmall)=-0.99*abs(Ir(tooSmall));
|
||||||
lower(tooSmall)=-0.002;
|
lower(tooSmall)=-0.2;
|
||||||
tooSmall=find(abs(Ii)<0.0005);
|
tooSmall=find(abs(Ii)<0.0005);
|
||||||
% lower(tooSmall+length(Ir))=-.99*abs(Ii(tooSmall));
|
% lower(tooSmall+length(Ir))=-.99*abs(Ii(tooSmall));
|
||||||
lower(tooSmall+length(Ir))=-0.002;
|
lower(tooSmall+length(Ir))=-0.2;
|
||||||
|
|
||||||
% lower=-ones(length(Ir)*2,1);
|
% lower=-ones(length(Ir)*2,1);
|
||||||
% lower([4,5,6])=[-1;-1;-1];
|
% lower([4,5,6])=[-1;-1;-1];
|
||||||
|
|
|
||||||
23
IPMLoop.m
23
IPMLoop.m
|
|
@ -1,6 +1,6 @@
|
||||||
function [ V1r,V1i,I1r,I1i,isConverged ] = IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref )
|
function [ V1r,V1i,I1r,I1i,isConverged ] = IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref )
|
||||||
%把每个序的循环写在这个函数中。其实也就是内点法循环。
|
%把每个序的循环写在这个函数中。其实也就是内点法循环。
|
||||||
V1r=1*ones(busNum,1);
|
V1r=Vref*ones(busNum,1);
|
||||||
V1i=0*ones(busNum,1);
|
V1i=0*ones(busNum,1);
|
||||||
I1r=0.1*ones(length(Loadi),1);%注入电流,相当于放电机电流,与负荷电流负荷相反
|
I1r=0.1*ones(length(Loadi),1);%注入电流,相当于放电机电流,与负荷电流负荷相反
|
||||||
I1i=0.1*ones(length(Loadi),1);%注入电流,相当于放电机电流,与负荷电流负荷相反
|
I1i=0.1*ones(length(Loadi),1);%注入电流,相当于放电机电流,与负荷电流负荷相反
|
||||||
|
|
@ -9,11 +9,7 @@ plotGap=zeros(1,60);
|
||||||
%初始化
|
%初始化
|
||||||
%状态量为 SEPD SEQD SEVmf1 SEVaf1
|
%状态量为 SEPD SEQD SEVmf1 SEVaf1
|
||||||
state=1;%state1表示用l<=I1r<=u 这样的约束形式
|
state=1;%state1表示用l<=I1r<=u 这样的约束形式
|
||||||
if state==1
|
|
||||||
RestraintCount=length(Loadi)*2;
|
RestraintCount=length(Loadi)*2;
|
||||||
else
|
|
||||||
RestraintCount=length(Loadi)*1;
|
|
||||||
end
|
|
||||||
ContrlCount=busNum*2+length(Loadi)*2;
|
ContrlCount=busNum*2+length(Loadi)*2;
|
||||||
CenterA=0.1;
|
CenterA=0.1;
|
||||||
Init_Z=sparse(ones(RestraintCount,1));
|
Init_Z=sparse(ones(RestraintCount,1));
|
||||||
|
|
@ -33,11 +29,7 @@ while(abs(Gap)>0.00001)
|
||||||
%% 形成等式约束的雅克比
|
%% 形成等式约束的雅克比
|
||||||
deltH=func_deltH(busNum,fsY1,Loadi,Balance);
|
deltH=func_deltH(busNum,fsY1,Loadi,Balance);
|
||||||
%% 形成不等式约束的雅克比
|
%% 形成不等式约束的雅克比
|
||||||
if state==1
|
|
||||||
deltG=func_deltGstate1(busNum,Loadi,I1r,I1i);
|
deltG=func_deltGstate1(busNum,Loadi,I1r,I1i);
|
||||||
else
|
|
||||||
deltG=func_deltG(busNum,Loadi,I1r,I1i);
|
|
||||||
end
|
|
||||||
%%
|
%%
|
||||||
% L_1Z=diag(Init_Z./Init_L);
|
% L_1Z=diag(Init_Z./Init_L);
|
||||||
% U_1W=diag(Init_W./Init_U);
|
% U_1W=diag(Init_W./Init_U);
|
||||||
|
|
@ -48,31 +40,18 @@ while(abs(Gap)>0.00001)
|
||||||
% ddh=func_ddh(busNum,Loadi,Init_Z,Init_W);
|
% ddh=func_ddh(busNum,Loadi,Init_Z,Init_W);
|
||||||
ddh=0;
|
ddh=0;
|
||||||
%% 开始构建ddg
|
%% 开始构建ddg
|
||||||
if state==1
|
|
||||||
ddg=0;
|
ddg=0;
|
||||||
else
|
|
||||||
ddg=func_ddg(busNum,Loadi,Init_Z,Init_W);
|
|
||||||
end
|
|
||||||
%% 开始构建deltF
|
%% 开始构建deltF
|
||||||
deltF=func_deltF(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,busNum,fsY1,Loadi,V1r,V1i,I1r,I1i);
|
deltF=func_deltF(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,busNum,fsY1,Loadi,V1r,V1i,I1r,I1i);
|
||||||
% deltF=0;
|
% deltF=0;
|
||||||
%%
|
%%
|
||||||
Luu=Init_U.*Init_W+Init_u*ones(RestraintCount,1);
|
Luu=Init_U.*Init_W+Init_u*ones(RestraintCount,1);
|
||||||
Lul=Init_L.*Init_Z-Init_u*ones(RestraintCount,1);
|
Lul=Init_L.*Init_Z-Init_u*ones(RestraintCount,1);
|
||||||
if state==1
|
|
||||||
Mat_G=FormGstate1(I1r,I1i);
|
Mat_G=FormGstate1(I1r,I1i);
|
||||||
else
|
|
||||||
Mat_G=FormG(I1r,I1i);
|
|
||||||
end
|
|
||||||
Mat_H=FormH(fsY1,Loadi,V1r,V1i,I1r,I1i,BalI1r,BalI1i,Balance);
|
Mat_H=FormH(fsY1,Loadi,V1r,V1i,I1r,I1i,BalI1r,BalI1i,Balance);
|
||||||
Ly=Mat_H;
|
Ly=Mat_H;
|
||||||
if state==1
|
|
||||||
Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement);
|
Lz=FormLzstate1(Loadi,Mat_G,Init_L,I1measurement);
|
||||||
Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement);
|
Lw=FormLwstate1(Loadi,Mat_G,Init_U,I1measurement);
|
||||||
else
|
|
||||||
Lz=FormLz(Loadi,Mat_G,Init_L,I1measurement);
|
|
||||||
Lw=FormLw(Loadi,Mat_G,Init_U,I1measurement);
|
|
||||||
end
|
|
||||||
Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W);
|
Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W);
|
||||||
YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx);
|
YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx);
|
||||||
%% 开始解方程
|
%% 开始解方程
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@
|
||||||
0
|
0
|
||||||
632 0 0 0
|
632 0 0 0
|
||||||
0
|
0
|
||||||
630 90 70 80 70 90 70
|
630 80 70 60 50 40 30
|
||||||
631 60 30 60 30 70 30
|
631 40 10 11 50 30 10
|
||||||
632 60 30 70 30 60 30
|
632 120 90 120 80 90 70
|
||||||
0
|
0
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
14
run.m
14
run.m
|
|
@ -131,7 +131,7 @@ fprintf('
|
||||||
rIf0=If0;
|
rIf0=If0;
|
||||||
rIf1=If1;
|
rIf1=If1;
|
||||||
rIf2=If2;
|
rIf2=If2;
|
||||||
sigma=0.03;
|
sigma=0.01;
|
||||||
iterPhaseASpotLoadP=phaseASpotLoadP;
|
iterPhaseASpotLoadP=phaseASpotLoadP;
|
||||||
iterPhaseBSpotLoadP=phaseBSpotLoadP;
|
iterPhaseBSpotLoadP=phaseBSpotLoadP;
|
||||||
iterPhaseCSpotLoadP=phaseCSpotLoadP;
|
iterPhaseCSpotLoadP=phaseCSpotLoadP;
|
||||||
|
|
@ -206,6 +206,10 @@ wV1i=abs(imag(V1measurement)).*sigma;
|
||||||
wV1i(abs(wV1i)<1e-5)=1e10;
|
wV1i(abs(wV1i)<1e-5)=1e10;
|
||||||
wI1r=abs(real(I1measurement)).*sigma;
|
wI1r=abs(real(I1measurement)).*sigma;
|
||||||
wI1i=abs(imag(I1measurement)).*sigma;
|
wI1i=abs(imag(I1measurement)).*sigma;
|
||||||
|
|
||||||
|
wV1i=ones(length(wV1i),1);
|
||||||
|
wV1r=ones(length(wV1i),1);
|
||||||
|
|
||||||
% [ V1r,V1i,I1r,I1i ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1 );
|
% [ V1r,V1i,I1r,I1i ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1 );
|
||||||
% f=sum(([real(I1measurement);imag(I1measurement)]-[I1r;I1i]).^2)+sum((real(rV1)-V1r).^2)+sum((imag(rV1)-V1i).^2);
|
% f=sum(([real(I1measurement);imag(I1measurement)]-[I1r;I1i]).^2)+sum((real(rV1)-V1r).^2)+sum((imag(rV1)-V1i).^2);
|
||||||
% fprintf('Ä¿±êÖµ %f\n',full(f));
|
% fprintf('Ä¿±êÖµ %f\n',full(f));
|
||||||
|
|
@ -234,6 +238,10 @@ wV2r=abs(real(V2measurement)).*sigma;
|
||||||
wV2i=abs(imag(V2measurement)).*sigma;
|
wV2i=abs(imag(V2measurement)).*sigma;
|
||||||
wI2r=abs(real(I2measurement)).*sigma;
|
wI2r=abs(real(I2measurement)).*sigma;
|
||||||
wI2i=abs(imag(I2measurement)).*sigma;
|
wI2i=abs(imag(I2measurement)).*sigma;
|
||||||
|
|
||||||
|
wV2i=ones(length(wV1i),1);
|
||||||
|
wV2r=ones(length(wV1i),1);
|
||||||
|
|
||||||
% [ V2r,V2i,I2r,I2i ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0 );
|
% [ V2r,V2i,I2r,I2i ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0 );
|
||||||
% f=sum(([real(I2measurement);imag(I2measurement)]-[I2r;I2i]).^2)+sum((real(rV2)-V2r).^2)+sum((imag(rV2)-V2i).^2);
|
% f=sum(([real(I2measurement);imag(I2measurement)]-[I2r;I2i]).^2)+sum((real(rV2)-V2r).^2)+sum((imag(rV2)-V2i).^2);
|
||||||
% fprintf('Ä¿±êÖµ %f\n',full(f));
|
% fprintf('Ä¿±êÖµ %f\n',full(f));
|
||||||
|
|
@ -263,6 +271,10 @@ wV0i=abs(imag(V0measurement)).*sigma;
|
||||||
wI0r=abs(real(I0measurement)).*sigma;
|
wI0r=abs(real(I0measurement)).*sigma;
|
||||||
wI0r(abs(wI0r)<1e-5)=1e10;
|
wI0r(abs(wI0r)<1e-5)=1e10;
|
||||||
wI0i=abs(imag(I0measurement)).*sigma;
|
wI0i=abs(imag(I0measurement)).*sigma;
|
||||||
|
|
||||||
|
wV0i=ones(length(wV1i),1);
|
||||||
|
wV0r=ones(length(wV1i),1);
|
||||||
|
|
||||||
% matlabpool local 3
|
% matlabpool local 3
|
||||||
tic
|
tic
|
||||||
for II=1:3
|
for II=1:3
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue