1主要内容
程序基本复现文章《Robust Restoration Method for Active Distribution Networks》,对主动配电网的故障恢复进行深入研究,采用两阶段鲁棒恢复模型(RROM)和确定性恢复优化模型(DROM)分别进行求解,两阶段鲁棒优化模型中第一阶段为恢复供电最佳策略,第二阶段则旨在寻找最坏的波动情景,并通过CCG算法进行求解。程序以69配电网节点系统为研究对象,采用二阶锥模型,考虑潮流约束、电压约束、支路功率约束、DG约束等,有对应的解释说明文档,方便学习参考!(程序采用matlab+gurobi求解)
之前发布过配电网两阶段优化程序,采用的是锥对偶的方式,过程推导的难度大一些,具体链接详见:【重磅】IEEE33配电网两阶段鲁棒优化调度CCG。本次发布的程序和上述程序处理方式不一样,采用的是matlab自带的kkt函数,并结合求解器直接求解,也是非常值得学习参考的!
2部分代码
%% 输入所需数据
S = 1; % 鲁棒强度
mpc = PGE69; % 读取配电网数据
SB = mpc.baseMVA; % 基准功率
VB = mpc.bus(1,10); % 基准电压
phi_L = mpc.branch(:,1:2); % 支路集合
Y_b = mpc.bus(:,1); % 节点集合
Y_dg = [19 25 32 54 68]; % 含DG的节点集合
nb = length(Y_b); % 节点总数
ns = 1; % 电源节点数
Y_s = 1; % 电源节点集合
ndg = length(Y_dg); % 含DG的节点数
nl = length(phi_L); % 支路数
S_ij_max = 6.5*ones(nl,1); % 支路视在功率上限
S_ij_max([26 34 45 49 51 64 66 68]) = 1.12;
S_ij_max([25 33 44 48 50 63 65 67]) = 2.24;
S_ij_max([69 13 71 72 73]) = 3.54;
S_ij_max([21:24 30:32 47 41:43 60:62]) = 4;
S_ij_max = S_ij_max/SB; % 转为标幺值
r_ij = mpc.branch(:,3); % 支路电阻/pu
x_ij = mpc.branch(:,4); % 支路电抗/pu
P_E = mpc.bus(:,3)/SB; % 期望有功负荷/pu
Q_E = mpc.bus(:,4)/SB; % 期望无功负荷/pu
P_E_dg = [0.15 0.07 0.040 0.0065 0.10]; % DG的期望有功功率
Q_E_dg = [0.07 0.04 0.025 0.0400 0.05]; % DG的期望无功功率
P_E_dg = P_E_dg/SB; % 转为标幺值
Q_E_dg = Q_E_dg/SB; % 转为标幺值
dP_dg = 0.3*P_E_dg; % DG有功功率波动上限
dQ_dg = 0.3*Q_E_dg; % DG无功功率波动上限
U_max = [1.05;1.1*1.1*ones(nb-1,1)]; % 节点电压平方的上限
U_min = [1.05;0.9*0.9*ones(nb-1,1)]; % 节点电压平方的下限
branch_to_node=zeros(nb,nl); % 流入节点的支路
branch_from_node=zeros(nb,nl); % 流出节点的支路
for k=1:nl
branch_to_node(mpc.branch(k,2),k)=1;
branch_from_node(mpc.branch(k,1),k)=1;
end
N = round(S*ndg); % 不确定预算
delta = 1e-10; % 很小的正数
M = 999999; % 很大的正数
P_E(P_E == 0) = delta; % 强制注入有功
Q_E(Q_E == 0) = delta; % 强制注入无功
%% 定义决策变量
p_ij = sdpvar(nl,1); % 支路有功功率
q_ij = sdpvar(nl,1); % 支路无功功率
P_load = sdpvar(nb,1); % 节点实际有功负荷
Q_load = sdpvar(nb,1); % 节点实际无功负荷
P_dg = sdpvar(ndg,1); % DG实际有功出力
Q_dg = sdpvar(ndg,1); % DG实际无功出力
P_g = sdpvar(ns,1); % 主电源输出有功
Q_g = sdpvar(ns,1); % 主电源输出无功
U_i = sdpvar(nb,1); % 节点电压的平方
alpha_n = binvar(ndg,1); % 节点的负向波动系数
%% 确定故障支路、失电节点、带电节点
[Y_con,Y_out] = fault_analysis(mpc,fault_branch,1);% 根据故障支路求出带电节点和失电节点
%% 目标函数
objective = sum(P_load(Y_out));
3程序结果
详尽的解释文档
运行结果总结和展示
3下载链接
扫码或阅读原文即可跳转程序页面:
想了解更多程序?按照下面教程查看程序目录!