diff --git a/@Opti/obj.m b/@Opti/obj.m index 4811ef5..67d97e0 100644 --- a/@Opti/obj.m +++ b/@Opti/obj.m @@ -13,5 +13,6 @@ QD0=this.QD0; t4=(wPD(PDi).*(PD-PD0(PDi))).^2; t5=(wQD(QDi).*(QD-QD0(QDi))).^2; output_args=sum(t4)+sum(t5); +output_args=full(output_args); end diff --git a/OPF_Init.m b/OPF_Init.m index 91efd95..805f491 100644 --- a/OPF_Init.m +++ b/OPF_Init.m @@ -26,8 +26,8 @@ tPU=sparse(GenU(:,2));% tQU=sparse(PVQU(:,1));% 无功上限 tPL=sparse(GenL(:,2));% 发电机有功下限 tQL=sparse(PVQL(:,1));% 无功下限 -PG(PGi)=(tPU+tPL)/2; -QG(PVi)=(tQU+tQL)/2; +% PG(PGi)=(tPU+tPL)/2; +% QG(PVi)=(tQU+tQL)/2; wPG=1*ones(size(PGi,1),1); wQG=1*ones(size(PVi,1),1); %randInt=randperm(size(Loadi,1)); diff --git a/PD0.mat b/PD0.mat new file mode 100644 index 0000000..9d99aa7 Binary files /dev/null and b/PD0.mat differ diff --git a/QD0.mat b/QD0.mat new file mode 100644 index 0000000..f3e9de3 Binary files /dev/null and b/QD0.mat differ diff --git a/Run_YALMIP.asv b/Run_YALMIP.asv index 0096424..2c903fd 100644 --- a/Run_YALMIP.asv +++ b/Run_YALMIP.asv @@ -5,7 +5,7 @@ tic [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, ... Liner,Linex,Lineb,Transforr,Transforx,Transfork0]= ... - pf('E:/算例/柳金Ⅰ926_21671693_2012-09-06/newFIle20.txt'); + pf('E:/算例/东际911_2751267_2012-09-05/newFIle20.txt'); %% 潮流等式 AngleIJ=sparse(r,c,UAngel(r)-UAngel(c)-Angle',Busnum,Busnum); @@ -32,6 +32,10 @@ Volt0=Volt; % dQ=QG-QD-diag(Volt)*Y.*sin(AngleIJ)*Volt'; % dQD=abs(dQ./QD); % maxdPQ=max([dPD(dPD<10);dQD(dQD<10)]); +xVolt=Volt; +xUAngel=UAngel; +% VMatrix=sparse(r,c,UAngel(r)-UAngel(c)-Angle',Busnum,Busnum); +% dP=PG-PD-diag(xVolt)*(Y.*cos(VMatrix))*xVolt'; [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); @@ -44,6 +48,7 @@ BalVolt=Volt(Balance); AngleIJ=sdpvar(Busnum,Busnum,'full'); %% 加噪音 PD0=(1+normrnd(0,0.05,length(PD0),1)).*PD0; +save('PD0','PD0') 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); @@ -93,7 +98,7 @@ QDi=find(QD~=0); % PD0=PD0(PDi); % QD0=QD0(QDi); seOpti=Opti(); -seOpti=seOpti.init(PDi,QDi,wPD,wQD,PD0,QD0,Y,Angle); +seOpti=seOpti.init(Volt0,PDi,QDi,wPD,wQD,PD0,QD0,Y,Angle,r,c,PG,QG,Balance); opts = optiset('solver','filtersd'); opts.maxiter=85500; opts.maxtime=3000; @@ -102,13 +107,16 @@ opts.maxnodes=85000; opts.tolrfun=1e-4; opts.tolafun=1e-4; opts.warnings='all'; -opts.display='off'; -x0=zeros(length(PDi)+length(QDi),1); -% [~,seOpti]=seOpti.equ(x0); -% nlrhs=seOpti.nlrhs(); -% nle=seOpti.nle(); -% Opt = opti('fun',@seOpti.fun,'ndec',length(Volt)*2,'nlmix',@seOpti.equ,nlrhs,nle,'options',opts) -Opt = opti('fun',@seOpti.obj,'ndec',length(PDi)+length(QDi),'options',opts) +opts.display='iter'; +% x0=[zeros(length(PDi)+length(QDi),1); ... +% ones(length(Volt),1); ... +% zeros(length(Volt),1)]; +x0=[PD(PDi);QD(QDi);xVolt';xUAngel']; +[~,seOpti]=seOpti.equ(x0); +nlrhs=seOpti.Geteb(); +nle=seOpti.Getgle(); +Opt = opti('fun',@seOpti.obj,'ndec',length(Volt)*2+length(PDi)+length(QDi),'nlmix',@seOpti.equ,nlrhs,nle,'options',opts) +% Opt = opti('fun',@seOpti.obj,'ndec',length(PDi)+length(QDi),'options',opts) [x,fval,exitflag,info] = solve(Opt,x0); info fprintf('目标函数: %f\n',fval); diff --git a/Run_YALMIP.m b/Run_YALMIP.m index 00f4fae..7e6f210 100644 --- a/Run_YALMIP.m +++ b/Run_YALMIP.m @@ -47,8 +47,12 @@ BalVolt=Volt(Balance); % QD=sdpvar(Busnum,1); 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; +load('PD0'); +load('QD0'); +% PD0=(1+normrnd(0,0.05,length(PD0),1)).*PD0; +% save('PD0','PD0'); +% QD0=(1+normrnd(0,0.05,length(QD0),1)).*QD0; +% save('QD0','QD0'); %% 目标函数 % 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); @@ -98,7 +102,7 @@ QDi=find(QD~=0); % QD0=QD0(QDi); seOpti=Opti(); seOpti=seOpti.init(Volt0,PDi,QDi,wPD,wQD,PD0,QD0,Y,Angle,r,c,PG,QG,Balance); -opts = optiset('solver','filtersd'); +opts = optiset('solver','ipopt'); opts.maxiter=85500; opts.maxtime=3000; opts.maxfeval=85000; @@ -118,5 +122,7 @@ Opt = opti('fun',@seOpti.obj,'ndec',length(Volt)*2+length(PDi)+length(QDi),'nlmi % Opt = opti('fun',@seOpti.obj,'ndec',length(PDi)+length(QDi),'options',opts) [x,fval,exitflag,info] = solve(Opt,x0); info +fval=seOpti.obj(x); fprintf('目标函数: %f\n',fval); + toc