188 lines
8.6 KiB
Matlab
188 lines
8.6 KiB
Matlab
function [mk,meritF,stepp,stepd]=linesearch(r,nodeNum,balNode,pgNum,pvNum,pgvNum,xNum,transNum,pgNode,pvNode,m,x,y,z,l,u,w,G,B,transI,transJ,transG,...
|
||
transB,transG1,transB1,Tn,capKn,capNum,capI,Tn1,capKn1,PG,QR,Pg,Qg,dx,dl,du,dy,dz,dw,opfGoal,Gama,Arlfa,meritF,k2,mu,T,capK,lineNum,lineI,...
|
||
lineJ,Pd,Qd,gxx,gsx,mut,mub,stepp,stepd)
|
||
%程序功能:光滑处理过程,求步长
|
||
%编写时间:2010年11月
|
||
|
||
mk=0;
|
||
kk=k2;
|
||
isOK=0;
|
||
while isOK==0&&mk<10
|
||
%更新临时变量
|
||
xk=x+Arlfa.^mk*dx;
|
||
lk=l+Arlfa.^mk*dl;
|
||
uk=u+Arlfa.^mk*du;
|
||
yk=y+Arlfa.^mk*dy;
|
||
zk=z+Arlfa.^mk*dz;
|
||
wk=w+Arlfa.^mk*dw;
|
||
%更新临时控制变量和状态变量的值
|
||
Tlastk=T;
|
||
capKlastk=capK;
|
||
T=xk(1:transNum,1);
|
||
capK=xk(transNum+pgvNum+1:transNum+pgvNum+capNum);
|
||
PG(pgNode,1)=xk(transNum+1:transNum+pgNum,1);
|
||
QR(pvNode,1)=xk(transNum+pgNum+1:transNum+pgNum+pvNum,1);
|
||
e=xk(transNum+pgNum+pvNum+capNum+1:transNum+pgNum+pvNum+capNum+nodeNum,1);
|
||
f=xk(transNum+pgNum+pvNum+capNum+nodeNum+1:xNum,1);
|
||
|
||
%变比变化后需修正节点导纳矩阵
|
||
G=G-sparse(transI,transI,(T.*T-Tlastk.*Tlastk).*transG1,nodeNum,nodeNum)...
|
||
+sparse(transI,transJ,transG1.*(T-Tlastk),nodeNum,nodeNum)...
|
||
+sparse(transJ,transI,transG1.*(T-Tlastk),nodeNum,nodeNum);
|
||
B=B-sparse(transI,transI,(T.*T-Tlastk.*Tlastk).*transB1,nodeNum,nodeNum)...
|
||
+sparse(transI,transJ,transB1.*(T-Tlastk),nodeNum,nodeNum)...
|
||
+sparse(transJ,transI,transB1.*(T-Tlastk),nodeNum,nodeNum)...
|
||
+sparse(capI,capI,capK-capKlastk,nodeNum,nodeNum);
|
||
%% 形成等式约束雅可比矩阵
|
||
Ezu=exp(-(T-Tn)./mut);
|
||
Ezu_1=exp(-(Tn1-T)./mut);
|
||
dT_Zt=1;
|
||
dNCPT=-mut.*log(Ezu+Ezu_1); %变比对应的凝聚函数常数项
|
||
dNCPT_dt=(Ezu-Ezu_1)./(Ezu+Ezu_1); %凝聚函数对T求一次偏导
|
||
transGmut=transG.*dT_Zt;
|
||
transBmut=transB.*dT_Zt;
|
||
|
||
Ezbu=exp((capKn-capK)./mub);
|
||
Ezbu_1=exp((capK-capKn1)./mub);
|
||
dNCPcap=-mub.*log(Ezbu+Ezbu_1); %电容电抗器对应的凝聚函数常数项
|
||
dNCP_dcap=(Ezbu-Ezbu_1)./(Ezbu+Ezbu_1); %凝聚函数对capK求一次偏导
|
||
|
||
ef1=e(transI).*e(transJ)+f(transI).*f(transJ);
|
||
ef2=e(transI).*f(transJ)-e(transJ).*f(transI);
|
||
ef3=e(transI).*e(transI)+f(transI).*f(transI);
|
||
ef1G=ef1.*transGmut;
|
||
ef1B=ef1.*transBmut;
|
||
ef2G=ef2.*transGmut;
|
||
ef2B=ef2.*transBmut;
|
||
dhPTi=-ef1G+ef2B+2*ef3.*transGmut.*T;
|
||
dhPTj=-ef1G-ef2B;
|
||
dhPT=sparse(1:transNum,transI,dhPTi,transNum,nodeNum)+sparse(1:transNum,transJ,dhPTj,transNum,nodeNum);%有功平衡方程P对变压器变比求偏导
|
||
dhQTi=ef1B+ef2G-2*ef3.*transBmut.*T;
|
||
dhQTj=ef1B-ef2G;
|
||
dhQT=sparse(1:transNum,transI,dhQTi,transNum,nodeNum)+sparse(1:transNum,transJ,dhQTj,transNum,nodeNum);%无功平衡方程Q对变压器变比求偏导
|
||
dhNCP_T=sparse(1:transNum,1:transNum,dNCPT_dt,transNum,transNum+capNum);
|
||
dhP=sparse(1:pgNum,pgNode,ones(pgNum,1),pgNum,m);
|
||
dhQ1=sparse(1:pvNum,pvNode,ones(pvNum,1),pvNum,m-nodeNum);
|
||
dhQ=[sparse(pvNum,nodeNum) dhQ1];
|
||
dhcapK1=sparse(1:capNum,capI,(e(capI).^2+f(capI).^2),capNum,nodeNum); %2011年10月5日修改,去掉.*capBi_dBci
|
||
dhNCP_capK=sparse(1:capNum,transNum+1:transNum+capNum,dNCP_dcap,capNum,transNum+capNum);
|
||
dhcapK=[sparse(capNum,nodeNum) dhcapK1 dhNCP_capK];
|
||
%形成功率方程雅可比矩阵
|
||
H1=G*e-B*f;
|
||
N1=G*f+B*e;
|
||
diagE=sparse(1:nodeNum,1:nodeNum,e,nodeNum,nodeNum);
|
||
diagF=sparse(1:nodeNum,1:nodeNum,f,nodeNum,nodeNum);
|
||
deG=diagE*G;
|
||
dfB=diagF*B;
|
||
deB=diagE*B;
|
||
dfG=diagF*G;
|
||
dH1=sparse(1:nodeNum,1:nodeNum,H1,nodeNum,nodeNum);
|
||
dN1=sparse(1:nodeNum,1:nodeNum,N1,nodeNum,nodeNum);
|
||
Hij=-dH1-deG-dfB;
|
||
Nij=-dN1+deB-dfG;
|
||
Jij=dN1-dfG+deB;
|
||
Lij=-dH1+dfB+deG;
|
||
dhJacb=[Hij Nij;Jij Lij]'; %合并形成功率方程的雅可比矩阵
|
||
dhT=[dhPT dhQT dhNCP_T]; %合并形成等式约束雅可比矩阵h(x)
|
||
dhx=[dhT;dhP;dhQ;dhcapK;dhJacb sparse(2*nodeNum,transNum+capNum)];
|
||
%% 形成不等式约束雅可比矩阵▽g(x)
|
||
gtransNum=0; %变比上下限约束维数,用NCP函数后,则不需要再约束其上下限
|
||
gcapNum=0;
|
||
dgT1=sparse(transNum,r-lineNum);
|
||
dglT=(e(transI).^2+f(transI).^2-e(transI).*e(transJ)-f(transI).*f(transJ)).*transGmut+(e(transI).*f(transJ)-e(transJ).*f(transI)).*transBmut;
|
||
dgT2=sparse(1:transNum,lineNum-transNum+1:lineNum,dglT,transNum,lineNum);
|
||
dgT=[dgT1 dgT2]; %所有不等式约束对T求导的模块
|
||
dgP=sparse(1:pgNum,gtransNum+1:gtransNum+pgNum,ones(pgNum,1),pgNum,r); %所有不等式约束对P求导的模块
|
||
dgQ=sparse(1:pvNum,gtransNum+pgNum+1:gtransNum+pgvNum,ones(pvNum,1),pvNum,r);%所有不等式约束对Q求导的模块
|
||
dgcapK=sparse(capNum,r); %所有不等式约束对capK求导的模块
|
||
dgve=2*diagE;
|
||
dgvf=2*diagF;
|
||
sizeG=size(G);
|
||
GIJ=G(sub2ind(sizeG,lineI,lineJ));
|
||
BIJ=B(sub2ind(sizeG,lineI,lineJ));
|
||
dgleI=(2*e(lineI)-e(lineJ)).*GIJ+f(lineJ).*BIJ;
|
||
dgleJ=-e(lineI).*GIJ-f(lineI).*BIJ;
|
||
dglfI=(2*f(lineI)-f(lineJ)).*GIJ-e(lineJ).*BIJ;
|
||
dglfJ=-f(lineI).*GIJ+e(lineI).*BIJ;
|
||
dgle=sparse(lineI,(1:lineNum),dgleI,nodeNum,lineNum)+sparse(lineJ,(1:lineNum),dgleJ,nodeNum,lineNum);
|
||
dglf=sparse(lineI,(1:lineNum),dglfI,nodeNum,lineNum)+sparse(lineJ,(1:lineNum),dglfJ,nodeNum,lineNum);
|
||
dg0=sparse(2*nodeNum,gtransNum+pgvNum+gcapNum);
|
||
dgvl=[dgve dgle;dgvf dglf];
|
||
dgef=[dg0 dgvl]; %所有不等式约束对电压实部、虚部求偏导的模块
|
||
dgx=[dgT;dgP;dgQ;dgcapK;dgef]; %不等式约束雅克比矩阵
|
||
%% 形成对角阵
|
||
Z=sparse(1:r,1:r,zk,r,r);
|
||
W=sparse(1:r,1:r,wk,r,r);
|
||
L1=sparse(1:r,1:r,1./lk,r,r);
|
||
U1=sparse(1:r,1:r,1./uk,r,r);
|
||
LZ=L1*Z;
|
||
UW=U1*W;
|
||
Ll=(lk.*zk-mu*ones(r,1));
|
||
Lu=(uk.*wk+mu*ones(r,1));
|
||
|
||
%% 形成目标函数一阶偏导矩阵▽f(.)
|
||
if(opfGoal==2)
|
||
dPG=ones(pgNum,1);
|
||
dfx=sparse(transNum+1:transNum+pgNum,ones(pgNum,1),dPG,xNum,1);
|
||
else if(opfGoal==1)
|
||
dPG=2*a(pgNode).*PG(pgNode)+b(pgNode);
|
||
dfx=sparse(transNum+1:transNum+pgNum,ones(pgNum,1),dPG,xNum,1);
|
||
else if(opfGoal==3)
|
||
dfT=-1*transG.*dT_Zt.*((f(transI)-f(transJ)).^2+(e(transI)-e(transJ)).^2);
|
||
dfPQ=zeros(pgvNum,1);
|
||
dfcapK=zeros(capNum,1);
|
||
EE=e*ones(1,nodeNum);
|
||
FF=f*ones(1,nodeNum);
|
||
dfe=2*sum(G.*(EE-EE'));
|
||
dff=2*sum(G.*(FF-FF'));
|
||
dfx=[dfT;dfPQ;dfcapK;dfe';dff'];
|
||
else if(opfGoal==4)
|
||
dfT=1*transB.*dT_Zt.*((f(transI)-f(transJ)).^2+(e(transI)-e(transJ)).^2);
|
||
dfPQ=zeros(pgvNum,1);
|
||
dfcapK=zeros(capNum,1);
|
||
EE=e*ones(1,nodeNum);
|
||
FF=f*ones(1,nodeNum);
|
||
dfe=-2*sum(B.*(EE-EE'));
|
||
dff=-2*sum(B.*(FF-FF'));
|
||
dfx=[dfT;dfPQ;dfcapK;dfe';dff'];
|
||
end
|
||
end
|
||
end
|
||
end
|
||
%% 不等式约束项
|
||
gxv=[PG(pgNode);QR(pvNode);e.^2+f.^2];
|
||
gxl=(e(lineI).*e(lineI)+f(lineI).*f(lineI)-e(lineI).*e(lineJ)-f(lineI).*f(lineJ)).*GIJ+(e(lineI).*f(lineJ)-e(lineJ).*f(lineI)).*BIJ;%线路功率当前值
|
||
gx=[gxv;gxl]; %约束条件当前值
|
||
Lz=gx-lk-gxx;
|
||
Lw=gx+uk-gsx;
|
||
muUL=mu*(U1-L1);
|
||
BB1=UW*Lw-LZ*Lz-muUL*ones(r,1);
|
||
BB=dhx*yk-dfx+dgx*BB1;
|
||
BB(transNum+pgvNum+capNum+nodeNum+balNode,1)=0; %保持平衡节点电压虚部不变,始终为0,则常数项平衡节点处置0
|
||
BB(transNum+pgvNum+capNum+balNode,1)=0;
|
||
%% 等式约束不平衡量
|
||
Pg(pgNode)=PG(pgNode);
|
||
Qg(pvNode)=QR(pvNode);
|
||
P=Pg-Pd;
|
||
Q=Qg-Qd;
|
||
dP=P-diagE*H1-diagF*N1;
|
||
dQ=Q-diagF*H1+diagE*N1;
|
||
|
||
hx=[dP;dQ;dNCPT;dNCPcap]; %修正方程常数项h(x)
|
||
const=[BB;hx]; %修正方程常数项向量
|
||
L3=-L1*(Z*Lz+Ll);
|
||
L4=U1*(W*Lw-Lu);
|
||
L5=Lz;
|
||
L6=Lw;
|
||
f_NCP=[const;L3;L4;L5;L6];
|
||
f_NCPsum=(f_NCP'*f_NCP)/2;
|
||
maxfk=max(meritF(kk-min(10,kk)+1:end));
|
||
f3=maxfk-Gama*(Arlfa.^mk)*meritF(kk);
|
||
if f_NCPsum<=f3
|
||
isOK=1; %满足条件,跳出
|
||
else
|
||
mk=mk+1; %不满足条件,继续搜索
|
||
end
|
||
end
|
||
stepp=stepp*Arlfa.^mk;
|
||
stepd=stepd*Arlfa.^mk; |