function [ V1r,V1i,I1r,I1i ] = IPMLoop(Vmeasurement,Imeasurement,BalI1r,BalI1i,busNum,Loadi,fsY1,Balance,Vref ) %把每个序的循环写在这个函数中。其实也就是内点法循环。 V1r=1*ones(busNum,1); V1i=0*ones(busNum,1); I1r=0.0*ones(length(Loadi),1);%注入电流,相当于放电机电流,与负荷电流负荷相反 I1i=0.0*ones(length(Loadi),1);%注入电流,相当于放电机电流,与负荷电流负荷相反 KK=0; plotGap=zeros(1,60); %初始化 %状态量为 SEPD SEQD SEVmf1 SEVaf1 RestraintCount=length(Loadi)*1; ContrlCount=busNum*2+length(Loadi)*2; CenterA=0.1; Init_Z=sparse(ones(RestraintCount,1)); Init_W=sparse(-1.0*ones(RestraintCount,1)); Init_L=1*sparse(ones(RestraintCount,1)); Init_U=1*sparse(ones(RestraintCount,1)); Init_Y=sparse(2*busNum,1);%等式约束乘子 Gap=(Init_L'*Init_Z-Init_U'*Init_W); kmax=60; while(abs(Gap)>0.000001) if KK>kmax break; end plotGap(KK+1)=Gap; Init_u=Gap/2/RestraintCount*CenterA; %% 开始计算OPF %% 形成等式约束的雅克比 deltH=func_deltH(busNum,fsY1,Loadi,Balance); %% 形成不等式约束的雅克比 deltG=func_deltG(busNum,Loadi,I1r,I1i); deltG=zeros(size(deltG)); %% L_1Z=diag(Init_Z./Init_L); U_1W=diag(Init_W./Init_U); %% 形成海森阵 deltdeltF=func_deltdeltF(busNum,fsY1,Loadi); % deltdeltF=0; %% 形成ddHy % ddh=func_ddh(busNum,Loadi,Init_Z,Init_W); ddh=0; %% 开始构建ddg ddg=func_ddg(busNum,Loadi,Init_Z,Init_W); ddg=zeros(size(ddg)); %% 开始构建deltF deltF=func_deltF(Vmeasurement,Imeasurement,busNum,fsY1,Loadi,V1r,V1i,I1r,I1i); % deltF=0; %% Luu=Init_U.*Init_W+Init_u*ones(RestraintCount,1); Lul=Init_L.*Init_Z-Init_u*ones(RestraintCount,1); Mat_G=FormG(I1r,I1i); Mat_G=zeros(size(Mat_G)); Mat_H=FormH(fsY1,Loadi,V1r,V1i,I1r,I1i,BalI1r,BalI1i,Balance); Ly=Mat_H; Lz=FormLz(Loadi,Mat_G,Init_L); Lw=FormLw(Loadi,Mat_G,Init_U); Lx=FormLx(deltF,deltH,Init_Y,deltG,Init_Z,Init_W); YY=FormYY(Lul,Lz,Ly,Luu,Lw,Lx); %% 开始解方程 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,busNum); %%取各分量 [deltZ,deltL,deltW,deltU,deltX,deltY]=AssignXX(XX,ContrlCount,RestraintCount,busNum,Balance); [Init_Z,Init_L,Init_W,Init_U,Init_Y,V1r,V1i,I1r,I1i]=Modification(Init_Z,Init_L,Init_W,Init_U,Init_Y,deltZ,deltL,deltW,deltU,deltX,deltY,V1r,V1i,I1r,I1i,ContrlCount,Balance,busNum,Loadi,Vref); Gap=(Init_L'*Init_Z-Init_U'*Init_W)+max(abs(deltX)); fprintf('Gap %f\n',full(Gap)); KK=KK+1; end f=sum(([real(Imeasurement);imag(Imeasurement)]-[-I1r;-I1i]).^2)+sum((real(Vmeasurement)-V1r(Loadi)).^2)+sum((imag(Vmeasurement)-V1i(Loadi)).^2); end