ncp_sigmoid/NCP函数法/OPF.m

128 lines
6.9 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

%*******************************************************
% 程序名称:电力系统无功优化程序
% 程序功能:主程序
% 程序算法现代内点法采用NCP函数处理离散变量
% 目标函数发电费用最小1、有功出力最小2、有功网损最小3、无功网损最小4
% 编者: 韦园清
% 编写时间2010年11月
%*******************************************************
function []=OPF(filename)
clc;
%% 读取数据
data=dlmread(filename);
if data(1,1)<1780
%读取1780节点系统格式类型的数据
[nodeNum,lineNum,capacity,kmax,centrPara,accuracy,opfGoal,balNum,balNode,mtrLine,mtrGround,mtrTrans,runPara,Pg,Qg,Pd,Qd,pvNum,pvNode,pvV,...
pvQmin,pvQmax,pgNumall,pgNodeall,pgNum,pgNode,a,b,c,Pmin,Pmax,capNum,capI,capGi,capBi,capK,capKmin,capKmax,Vmin,Vmax]=readData(data);
tic;
%形成节点导纳矩阵
[G,B,transY,transG,transB,transG1,transB1,transNum,lineNum,lineI,lineJ,lineB,transI,transJ,transK0,transKmin,transKmax]=formY(nodeNum,...
mtrLine,mtrGround,mtrTrans,capI,capK);
else
%读取IEEE标准格式数据
[nodeNum,lineNum,capacity,kmax,accuracy,balNum,balNode,mtrLine,mtrGround,mtrTrans,runPara,Pg,Qg,Pd,Qd,pvNum,pvNode,pvV,pvQmin,pvQmax,...
mtrCapacitor,pgNum,pgNode,a,b,c,Pmin,Pmax,Vmin,Vmax,centrPara]=readData_RPP(data) ;
tic;
%形成节点导纳矩阵
[G,B,lineI,lineJ,lineB,transI,transJ,transK0,transNum,transKmin,transKmax,capI,capGi,capBi,capK,capKmin,capKmax,capNum,transG,transB,...
transG1,transB1,lineNum]=formY_RPP(nodeNum,lineNum,mtrLine,mtrGround,mtrTrans,mtrCapacitor) ;
end
%% 初始化
[e,f,PG,QR,Pg,Qg,T,pgvNum,xNum,m,r,l,u,z,w,x,y,mu,dmaxOut1,dmaxOut2,xz1,xz2,dmaxOut3,dmaxOut4,xz3,xz4,xz5,colmut1,hx,k2,opfGoal,times,...
secondBegin,Tn,Tn1,capKn,capKn1,kt0,q0,mut,mub,oneTrans,oneCap,para1,para2,para3,mismatch,ifconverge]=seting(nodeNum,lineNum,transNum,transK0,...
capNum,capK,pvQmin,pvQmax,pvNum,pvNode,pvV,pgNum,pgNode,Pmin,Pmax,Pg,Qg,centrPara);
disp (['迭代次数 互补间隙 最大不平衡量 最优潮流目标'])
%% 进入循环体求解
for k=0:kmax
[mut,mub,dNCPT,dNCPT_dt,d2NCPT_dt2,dT_Zt,transGmut,transBmut,dNCPcap,dNCP_dcap,d2NCP_dcap2,capBi_dBci,H1,N1,diagE,diagF,hx,Gap,max_hx,fx,...
Pg,Qg,xz1,dmaxOut1,xz2,dmaxOut2,xz3,dmaxOut3,xz4,dmaxOut4,PGR,Tn,kt0,capKn,q0,Tn1,capKn1,T,G]=midResult(nodeNum,pgNode,opfGoal,z,l,u,w,Pg,...
Qg,e,f,G,B,a,b,c,PG,Pd,Qd,k,xz1,dmaxOut1,xz2,dmaxOut2,xz3,dmaxOut3,xz4,dmaxOut4,times,mut,mub,oneTrans,oneCap,para3,accuracy,T,capK,transKmin,...
transKmax,capKmin,capBi,mu,transNum,transG,transB,Tn,Tn1,capKn,capKn1,kt0,q0,mismatch);
if Gap<accuracy&&max_hx<mismatch %判断互补间隙和最大不平衡量是否达到精度
if times==1
times=2;
end
if times==2
if secondBegin==1
[secondBegin,m,r,l,u,z,w,y,Gama,Arlfa,meritF,firstT,firstcapK,firstfx,Gap,mu,Vfirst,Pgfirst,Qgfirst]=snd_setting(secondBegin,...
transNum,T,m,r,capNum,capK,para1,para2,fx,centrPara,e,f,Pg,Qg);
end
dicVar=[(T-Tn);(capK-capKn)]>accuracy; %判断靠近下界的离散量是否达到精度
dicVar1=[(Tn1-T);(capKn1-capK)]>accuracy; %判断靠近上界的离散量是否达到精度
ymut=dicVar.*dicVar1;
if (sum(ymut)==0) %判断离散变量是否达到精度
ifconverge=1;
break
end
end
end
mu=(centrPara*Gap)/(2*r); %计算扰动因子
if times==1 %预计算过程
%形成修正方程系数矩阵
[HSB,dhx,dgx,dgxT,N1,H1,diagE,diagF,GIJ,BIJ,L1,U1,LZ,UW]=formHSB(nodeNum,balNode,balNum,opfGoal,lineNum,transNum,lineI,lineJ,transI,...
transJ,T,transG,transB,pgNode,pvNode,G,B,e,f,pgNum,pvNum,pgvNum,xNum,capNum,capI,a,m,r,l,u,z,w,y,H1,N1,diagE,diagF);
%形成扰动KKT方程不平衡量矩阵
[const,Lz,Lw,L1,U1]=Constant(nodeNum,opfGoal,lineNum,transNum,transI,transJ,transG,transB,T,transKmin,transKmax,lineI,lineJ,balNode,...
mu,G,B,GIJ,BIJ,e,f,Pmin,Pmax,a,b,PG,QR,pvQmin,pvQmax,pgNum,pgvNum,xNum,capNum,capK,capKmin,capKmax,pgNode,pvNode,dhx,dgx,L1,U1,LZ,...
UW,l,u,y,r,capBi,Vmin,Vmax,hx);
%求解方程并更新变量
[z,l,u,w,x,y,PG,QR,Pg,Qg,e,f,T,capK,G,B]=solve(HSB,const,mu,r,nodeNum,balNode,pgNum,pvNum,xNum,transNum,capNum,capI,capBi,capK,pgNode,...
pvNode,m,x,y,z,l,u,w,Lz,Lw,LZ,UW,dgxT,L1,U1,G,B,transI,transJ,T,transG,transB,transG1,transB1,PG,QR,Pg,Qg);
else %光滑处理过程
k2=k2+1;
xz5=[xz5,k2]; %保留每次迭代光滑参数的值,用于作图
colmut1=[colmut1,mut(1)];
%形成修正方程系数矩阵
[HSB,dhx,dgx,dgxT,N1,H1,diagE,diagF,GIJ,BIJ,L1,U1,LZ,UW,transG,transB,mut,mub]=snd_formHSB(nodeNum,balNode,balNum,opfGoal,lineNum,...
transNum,lineI,lineJ,transI,transJ,T,transG,transB,pgNode,pvNode,G,B,e,f,pgNum,pvNum,pgvNum,xNum,a,m,r,l,u,z,w,y,capNum,capI,...
mut,mub,dNCPT_dt,d2NCPT_dt2,dT_Zt,transGmut,transBmut,dNCP_dcap,d2NCP_dcap2,H1,N1,diagE,diagF);
%形成扰动KKT方程不平衡量矩阵
[const,Lz,Lw,L1,U1,hx,origConst,gxx,gsx]=snd_Constant(nodeNum,opfGoal,lineNum,transNum,transI,transJ,transG,transB,lineI,lineJ,...
balNode,mu,G,B,GIJ,BIJ,e,f,Pmin,Pmax,a,b,PG,QR,pvQmin,pvQmax,pgNum,pgvNum,xNum,pgNode,pvNode,dhx,dgx,L1,U1,LZ,UW,l,u,y,r,...
dT_Zt,capNum,z,w,Vmin,Vmax,hx);
%求解方程并更新变量
[z,l,u,w,x,y,PG,QR,Pg,Qg,e,f,T,G,B,capK,meritF]=snd_solve(HSB,const,mu,r,nodeNum,balNode,pgNum,pvNum,pgvNum,xNum,transNum,pgNode,...
pvNode,m,Lz,Lw,LZ,UW,dgxT,L1,U1,transI,transJ,transG,transB,transG1,transB1,Tn,capKn,capNum,capI,Tn1,capKn1,x,y,z,l,u,w,...
G,B,PG,QR,Pg,Qg,opfGoal,Gama,Arlfa,meritF,k2,T,capK,lineNum,lineI,lineJ,Pd,Qd,gxx,gsx,mut,mub);
end
end
if k>=kmax
disp '最优潮流计算不收敛!'
disp(k)
else
disp '最优潮流计算收敛!'
disp(['迭代',num2str(k),'次!'])
end
toc;
%% 输出计算结果
OutResult(G,B,balNode,e,f,T,k,Gap,fx,transI,transJ,filename,nodeNum,PGR,pgNode,QR,pvNode,capI,capK,firstT,firstcapK,Tn,Tn1,capKn,capKn1,...
firstfx,toc,max_hx,ifconverge,Vfirst,Pgfirst,Qgfirst);
%% 作互补间隙和最大不平衡量收敛曲线图
% xz=0:1:k;
% plot(xz1,dmaxOut1,'-ks','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',3)
% hold on;
% plot(xz2,dmaxOut2,'-ks','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',3)
% hold on;
% xlabel('迭代次数')
% ylabel('互补间隙')
% plot(xz3,dmaxOut3,'-ks','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',3)
% hold on;
% plot(xz4,dmaxOut4,'-ks','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',3)
% xlabel('迭代次数')
% ylabel('最大不平衡量')
%% 作mut在迭代过程中的变化图
% plot(xz5,colmut1,'-ks','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',3)
% xlabel('第二阶段优化迭代次数')
% ylabel('μ')
% hold on;
%% 作二次优化互补间隙收敛曲线
% plot(xz5,dmaxOut2,'-ks','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',3)
% hold on;
% xlabel('迭代次数')
% ylabel('互补间隙')