改用Opti Toolbox

Signed-off-by: facat <dugg@21cn.com>
This commit is contained in:
facat 2013-04-16 21:46:49 +08:00
parent c79429065e
commit 19975b1f88
2 changed files with 66 additions and 64 deletions

View File

@ -5,7 +5,7 @@ tic
[kmax,Precision,UAngel,Volt,Busnum,PVi,PVu,Balance,Y,Angle,P0,Q0,r,c,GB, ... [kmax,Precision,UAngel,Volt,Busnum,PVi,PVu,Balance,Y,Angle,P0,Q0,r,c,GB, ...
Linei,Linej,Transfori,Transforj,GenU,GenL,GenC,PG,QG,PD,QD,CenterA,PGi,PVQU,PVQL, ... Linei,Linej,Transfori,Transforj,GenU,GenL,GenC,PG,QG,PD,QD,CenterA,PGi,PVQU,PVQL, ...
Liner,Linex,Lineb,Transforr,Transforx,Transfork0]= ... Liner,Linex,Lineb,Transforr,Transforx,Transfork0]= ...
pf('ieee30.dat'); pf('E:/ËãÀý/Áø½ð¢ñ926_21671693_2012-09-06/newFIle20.txt');
%% 潮流等式 %% 潮流等式
AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle',Busnum,Busnum); AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle',Busnum,Busnum);
@ -24,48 +24,51 @@ QG0(Balance)=QGBal(Balance);
QG0(PVi)=QGBal(PVi); QG0(PVi)=QGBal(PVi);
PG(Balance)=PGBal(Balance); PG(Balance)=PGBal(Balance);
QG(PVi)=QGBal(PVi); QG(PVi)=QGBal(PVi);
PF=1; Volt0=Volt;
AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle',Busnum,Busnum); % PF=1;
dP=PG-PD-diag(Volt)*Y.*cos(AngleIJ)*Volt'; % AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle',Busnum,Busnum);
dPD=abs(dP./PD); % dP=PG-PD-diag(Volt)*Y.*cos(AngleIJ)*Volt';
dQ=QG-QD-diag(Volt)*Y.*sin(AngleIJ)*Volt'; % dPD=abs(dP./PD);
dQD=abs(dQ./QD); % dQ=QG-QD-diag(Volt)*Y.*sin(AngleIJ)*Volt';
maxdPQ=max([dPD(dPD<10);dQD(dQD<10)]); % dQD=abs(dQ./QD);
% maxdPQ=max([dPD(dPD<10);dQD(dQD<10)]);
[Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wPG,wQG,wPD,wQD,PD,PD0,QD,randPDind,Loadi,notLoadi]=OPF_Init(Busnum,Balance,PG,QG,Volt,GenU,GenL,PVi,PGi,PVQU,PVQL,PD0,QD0,QD,PD); [Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wPG,wQG,wPD,wQD,wVolt,PD,PD0,QD,randPDind,Loadi,notLoadi]=OPF_Init(Busnum,Balance,PG,QG,Volt,GenU,GenL,PVi,PGi,PVQU,PVQL,PD0,QD0,QD,PD);
%% 定义变量 %% 定义变量
Volt=sdpvar(Busnum,1); BalVolt=Volt(Balance);
UAngel=sdpvar(Busnum,1); % Volt=sdpvar(Busnum,1);
% UAngel=sdpvar(Busnum,1);
% PG=sdpvar(Busnum,1); % PG=sdpvar(Busnum,1);
% QG=sdpvar(Busnum,1); % QG=sdpvar(Busnum,1);
PD=sdpvar(Busnum,1); PD=sdpvar(Busnum,1);
QD=sdpvar(Busnum,1); QD=sdpvar(Busnum,1);
AngleIJ=sdpvar(Busnum,Busnum,'full'); AngleIJ=sdpvar(Busnum,Busnum,'full');
%% ¼ÓÔëÒô
PD0=(1+normrnd(0,0.05,length(PD0),1)).*PD0;
QD0=(1+normrnd(0,0.05,length(QD0),1)).*QD0;
%% 目标函数 %% 目标函数
Objective=ObjectiveFun(PG,PG0,PGi,QG,QG0,PVi,PD,PD0,QD,QD0,wPG,wQG,wPD,wQD,Loadi); Objective=ObjectiveFun(PG,PG0,PGi,QG,QG0,PVi,PD,PD0,QD,QD0,Volt,Volt0,wPG,wQG,wPD,wQD,wVolt,Loadi);
%AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum); %AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum);
%% 赋初值,可以加快求解速度。 %% 赋初值,可以加快求解速度。
assign(Volt(:),1); assign(Volt(:),1);
assign(UAngel(:),0); assign(UAngel(:),0);
assign(PD(:),PD0(:)); assign(PD(:),PD0(:));
assign(QD(:),QD0(:)); assign(QD(:),QD0(:));
% assign(PG(:),PG0(:));
% assign(QG(:),QG0(:));
%% YALMIP部分 %% YALMIP部分
dP=PG0-PD-diag(Volt)*Y.*cos( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt; dP=PG0-PD-diag(Volt)*Y.*cos( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt;
dQ=QG0-QD-diag(Volt)*Y.*sin( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt; dQ=QG0-QD-diag(Volt)*Y.*sin( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt;
Loadi=PD0~=0 | QD0~=0; Loadi=PD0~=0 | QD0~=0 |PG0~=0|QG0~=0;
Constraints = [%AngleIJ-sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum)==0, ... Constraints = [%AngleIJ-sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum)==0, ...
dP==0, ... dP(setdiff(1:Busnum,Loadi))==0, ...
dQ==0, ... dQ(setdiff(1:Busnum,Loadi))==0, ...
PG(setxor(1:Busnum, PGi) )==0, ... % dP==0, ...
QG(setxor(1:Busnum, PVi) )==0, ... % dQ==0, ...
PD(PD0==0)==0, ... PD(PD0==0)==0, ...
QD(QD0==0)==0, ... QD(QD0==0)==0, ...
0.9*ones(Busnum,1)<=Volt<=1.1*ones(Busnum,1), ... 0.9*ones(Busnum,1)<=Volt<=1.1*ones(Busnum,1), ...
-60*ones(Busnum,1)<=PG<=60*ones(Busnum,1), ... Volt(Balance)==BalVolt, ...
-60*ones(Busnum,1)<=QG<=60*ones(Busnum,1) UAngel(Balance)==0, ...
0.8*PD0<=PD<=1.2*PD0;
0.8*QD0<=QD<=1.2*QD0;
]; ];
options = sdpsettings('verbose',2,'showprogress',1,'debug',0,'solver','ipopt','usex0','1'); options = sdpsettings('verbose',2,'showprogress',1,'debug',0,'solver','ipopt','usex0','1');
sol = solvesdp(Constraints,Objective,options); sol = solvesdp(Constraints,Objective,options);
@ -76,7 +79,6 @@ if sol.problem == 0
dVangle=double(UAngel) dVangle=double(UAngel)
fprintf('ojb\n'); fprintf('ojb\n');
optimalObj=double(Objective) optimalObj=double(Objective)
double(PG)-PG0;
sol sol
else else
display('Hmm, something went wrong!'); display('Hmm, something went wrong!');

View File

@ -35,8 +35,8 @@ Volt0=Volt;
[Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wPG,wQG,wPD,wQD,wVolt,PD,PD0,QD,randPDind,Loadi,notLoadi]=OPF_Init(Busnum,Balance,PG,QG,Volt,GenU,GenL,PVi,PGi,PVQU,PVQL,PD0,QD0,QD,PD); [Volt,UAngel,Init_Z,Init_W,Init_L,Init_U,Init_Y,PG,QG,RestraintCount,wPG,wQG,wPD,wQD,wVolt,PD,PD0,QD,randPDind,Loadi,notLoadi]=OPF_Init(Busnum,Balance,PG,QG,Volt,GenU,GenL,PVi,PGi,PVQU,PVQL,PD0,QD0,QD,PD);
%% %%
BalVolt=Volt(Balance); BalVolt=Volt(Balance);
Volt=sdpvar(Busnum,1); % Volt=sdpvar(Busnum,1);
UAngel=sdpvar(Busnum,1); % UAngel=sdpvar(Busnum,1);
% PG=sdpvar(Busnum,1); % PG=sdpvar(Busnum,1);
% QG=sdpvar(Busnum,1); % QG=sdpvar(Busnum,1);
PD=sdpvar(Busnum,1); PD=sdpvar(Busnum,1);
@ -46,45 +46,45 @@ AngleIJ=sdpvar(Busnum,Busnum,'full');
PD0=(1+normrnd(0,0.05,length(PD0),1)).*PD0; PD0=(1+normrnd(0,0.05,length(PD0),1)).*PD0;
QD0=(1+normrnd(0,0.05,length(QD0),1)).*QD0; QD0=(1+normrnd(0,0.05,length(QD0),1)).*QD0;
%% %%
Objective=ObjectiveFun(PG,PG0,PGi,QG,QG0,PVi,PD,PD0,QD,QD0,Volt,Volt0,wPG,wQG,wPD,wQD,wVolt,Loadi); % Objective=ObjectiveFun(PG,PG0,PGi,QG,QG0,PVi,PD,PD0,QD,QD0,Volt,Volt0,wPG,wQG,wPD,wQD,wVolt,Loadi);
%AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum); %AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum);
%% %%
assign(Volt(:),1); % assign(Volt(:),1);
assign(UAngel(:),0); % assign(UAngel(:),0);
assign(PD(:),PD0(:)); % assign(PD(:),PD0(:));
assign(QD(:),QD0(:)); % assign(QD(:),QD0(:));
%% YALMIP²¿·Ö % %% YALMIP²¿·Ö
dP=PG0-PD-diag(Volt)*Y.*cos( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt; % dP=PG0-PD-diag(Volt)*Y.*cos( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt;
dQ=QG0-QD-diag(Volt)*Y.*sin( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt; % dQ=QG0-QD-diag(Volt)*Y.*sin( sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum) )*Volt;
Loadi=PD0~=0 | QD0~=0 |PG0~=0|QG0~=0; % Loadi=PD0~=0 | QD0~=0 |PG0~=0|QG0~=0;
Constraints = [%AngleIJ-sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum)==0, ... % Constraints = [%AngleIJ-sparse(r,c,UAngel(r)-UAngel(c)-Angle,Busnum,Busnum)==0, ...
dP(setdiff(1:Busnum,Loadi))==0, ... % dP(setdiff(1:Busnum,Loadi))==0, ...
dQ(setdiff(1:Busnum,Loadi))==0, ... % dQ(setdiff(1:Busnum,Loadi))==0, ...
% dP==0, ... % % dP==0, ...
% dQ==0, ... % % dQ==0, ...
PD(PD0==0)==0, ... % PD(PD0==0)==0, ...
QD(QD0==0)==0, ... % QD(QD0==0)==0, ...
0.9*ones(Busnum,1)<=Volt<=1.1*ones(Busnum,1), ... % 0.9*ones(Busnum,1)<=Volt<=1.1*ones(Busnum,1), ...
Volt(Balance)==BalVolt, ... % Volt(Balance)==BalVolt, ...
UAngel(Balance)==0, ... % UAngel(Balance)==0, ...
0.8*PD0<=PD<=1.2*PD0; % 0.8*PD0<=PD<=1.2*PD0;
0.8*QD0<=QD<=1.2*QD0; % 0.8*QD0<=QD<=1.2*QD0;
]; % ];
options = sdpsettings('verbose',2,'showprogress',1,'debug',0,'solver','ipopt','usex0','1'); % options = sdpsettings('verbose',2,'showprogress',1,'debug',0,'solver','ipopt','usex0','1');
sol = solvesdp(Constraints,Objective,options); % sol = solvesdp(Constraints,Objective,options);
if sol.problem == 0 % if sol.problem == 0
fprintf('Volt\n'); % fprintf('Volt\n');
dvolt=double(Volt) % dvolt=double(Volt)
fprintf('VoltAngle\n'); % fprintf('VoltAngle\n');
dVangle=double(UAngel) % dVangle=double(UAngel)
fprintf('ojb\n'); % fprintf('ojb\n');
optimalObj=double(Objective) % optimalObj=double(Objective)
sol % sol
else % else
display('Hmm, something went wrong!'); % display('Hmm, something went wrong!');
sol.info % sol.info
sol.solveroutput % sol.solveroutput
yalmiperror(sol.problem) % yalmiperror(sol.problem)
end % end
toc toc