目录
[1 主要内容](#1 主要内容)
[2 部分代码](#2 部分代码)
[3 程序结果](#3 程序结果)
[4 下载链接](#4 下载链接)
1 主要内容
该程序复现文章《计及需求侧响应日前---日内两阶段鲁棒备用优化》,以6节点系统为例,综合考虑风电出力不确定性与电力设备 N-k强迫停运,增强电力系统应对不确定性因素的鲁棒性。基于鲁棒模型对系统运行备用进行优化,最小化电网在最恶劣运行场景下的调整成本,保证电网的安全可靠运行,并采用列和约束生成算法对两阶段三层优化问题进行求解。这个程序算是个超级丐版,注释较少,运行结果也少,如果预算充足可以参考一文说清楚6节点电网两阶段鲁棒优化调度如何编程,同时附赠【KKTCCG】IEEE6节点系统两阶段鲁棒优化调度matlab,学起来更加便捷轻松!
日前计划模型
日内调整模型
不确定集建模
2 部分代码
%风电场接在母线5上,在风电场端口集成储能系统
%118系统风电场接在母线19、25、40、62
%% 数据及常数矩阵
mpc=loadcase('case6ww');
bus=mpc.bus;
branch=mpc.branch;
gen=mpc.gen;
gencost=mpc.gencost;
baseMVA=mpc.baseMVA;
load('data.mat');
CPw=Cw(:,1:24,3)*300;%修改风电场场景、时间间隔、数目与容量
CPw=permute(CPw,[3,2,1]);
LD=1.8*bus(:,3)*Load(:,1:24);%修改Load,以改变考虑的时间间隔
NB=size(bus,1);
NG=size(gen,1);
NL=size(branch,1);
NW=size(CPw,1);
NT=size(CPw,2);
NS=size(CPw,3);
dW=zeros(NW,NT,NS);
maxdW=zeros(NW,NT);
mindW=zeros(NW,NT);
for i=1:NS
dW(:,:,i)=CPw(:,:,i)-CPw(:,:,1);
end
for i=1:NW
for j=1:NT
maxdW(i,j)=1.2*max(dW(i,j,:));
mindW(i,j)=1.2*min(dW(i,j,:));
end
end
X=repmat(branch(:,4),1,NT);
Fmax=repmat(branch(:,6),1,NT);
PGmax=repmat(gen(:,9),1,NT);
PGmin=0.85*repmat(gen(:,10),1,NT);
LIDRmax=0.4;
% LIDRmax=0.1;
Pt=gen(:,10);%修改爬坡约束
ref=find(bus(:,2)==3);
G2B=zeros(NB,NG);
for i=1:NG
G2B(gen(i,1),i)=1;
end
W2B=zeros(NB,NW);
W2B(5,1)=1;
B2B=zeros(NB,NL);
for i=1:NL
B2B(branch(i,1),i)=1;
B2B(branch(i,2),i)=-1;
end
costa=gencost(:,5);
costb=gencost(:,6);
costc=gencost(:,7);
StartCost=gencost(:,2);
ShutCost=gencost(:,3);
% PG0=gen(:,2);
% IS0=ones(NG,1);
% for i=1:NG
% if PG0(i)==0
% IS0(i)=0;
% end
% end
PG0=zeros(NG,1);
IS0=zeros(NG,1);
Ton=3;%开关机时间可修改
Toff=2;
pela=zeros(NT,NT);
em=0.4;
et=2;
for i=1:NT
pela(i,i)=-em;
num_period=0;
for j=i-et:i+et
if j>0 && j<=NT && j~=i
num_period=num_period+1;
end
end
for j=i-et:i-1
if j>0
pela(j,i)=em/num_period;
end
end
for j=i+1:i+et
if j<=NT
pela(j,i)=em/num_period;
end
end
end
price0=[18 18 18 18 18 18 21 21 23 23 23 23 23 23 23 23 21 21 21 21 21 21 18 18]';
price0=price0(1:NT);
LPDRmax=0.2;
% LPDRmax=0;
CRGu=15;
CRGd=8;
CRL=30;
CWc=10;
CLs=1000;
M_l=Fmax(:,1)+2*pi./X(:,1);
M_rho=10000;
M=10000;
itermax=99;
e=0.001;
UB=zeros(1,itermax);
UB(1)=999999999;
LB=zeros(1,itermax);
LB(1)=-999999999;
gap_cal=zeros(1,itermax);
PWu_return=zeros(NW,NT,itermax);
zl_return=zeros(NL,1,itermax);
%% 子问题对偶问题左端系数矩阵
lambda_PG=zeros(NB*NT,NG*NT);
for i=1:NT
lambda_PG((i-1)*NB+1:i*NB,i*NG-NG+1:i*NG)=G2B;
end
lambda_PG=lambda_PG';
lambda_PW=zeros(NB*NT,NW*NT);
for i=1:NT
lambda_PW((i-1)*NB+1:i*NB,i*NW-NW+1:i*NW)=W2B;
end
lambda_PW=lambda_PW';
lambda_Flow=zeros(NB*NT,NL*NT);
for i=1:NT
lambda_Flow((i-1)*NB+1:i*NB,i*NL-NL+1:i*NL)=-B2B;
end
lambda_Flow=lambda_Flow';
lambda_LIDR=eye(NB*NT);
lambda_LS=eye(NB*NT);
mu_Flow=eye(NL*NT);
mu_Theta=zeros(NL*NT,NB*NT);
for i=1:NT
mu_Theta((i-1)*NL+1:i*NL,(i-1)*NB+1:i*NB)=-baseMVA*B2B';
for j=1:NL
mu_Theta((i-1)*NL+j,(i-1)*NB+1:i*NB)=mu_Theta((i-1)*NL+j,(i-1)*NB+1:i*NB)/X(j,1);
end
end
mu_Theta=mu_Theta';
nu_Flow=eye(NL*NT,NL*NT);
kappa_Theta=eye(NB*NT,NB*NT);
beta_PG=eye(NG*NT);
beta_dPu=-eye(NG*NT);
beta_dPd=eye(NG*NT);
delta_dPu=eye(NG*NT);
gamma_dPd=eye(NG*NT);
rho_PW=eye(NW*NT);