%% 孤岛划分的程序
%% 步骤1:相关参数
mpc = IEEE33; % 配电网数据
Nb = 33; % 节点数
Nt = 24; % 时段数
Y_DG = [6, 8, 12, 23, 30]; % 光储系统接入位置
wf = 0.01*ones(1,Nb); % 负荷等级系数
wf([6, 12, 23, 30]) = 1; % 一级负荷
wf([1,5,8,14,18,21,22,27,29,32]) = 0.1; % 二级负荷
Ct = zeros(Nb, Nt); % 负荷时变需求系数
Ct([6, 12, 23, 30], :) = 10; % 一级负荷的需求度恒为10
Ct(setdiff(1:Nb, [6, 12, 23, 30]), :) = ones(Nb - 4 , 1)*10*[7.77960493860530,5.32481765803490,5.04294379929200,5.19839957470577,2.98814682221510,3.42926158320840,7.20423714015130,10.6852586809857,12.5476776005102,15.5211669393227,24.8696812348447,33.2302134035133,24.2862651332590,24.7988707426448,36.3317495052460,27.4948240683687,17.8808252142146,14.0969740403730,18.9045593211401,20.4888032159577,22.2151328923961,19.7627571226032,21.4368039620930,17.6810254063144]/36.3317;
Ft = Ct.*(wf'*ones(1, Nt)); % 优先恢复系数
% 光伏出力
P_PV = [425, 200, 480, 120, 600; 700, 500, 720, 620, 720];
PL = [3305 , 4870]; % 负荷总量
P_load = mpc.bus(:,3)/3.715*PL; % 各节点负荷
a_cut = zeros(1,Nb); % 削减系数
C_load1 = [3,13,20,24]; % 完全可控的负荷集合
a_cut(C_load1) = 1; % 完全可控
C_load2 = [2,7,10]; % 50%可控的负荷集合
a_cut(C_load2) = 0.5; % 50%可控
%% 步骤2:读取故障支路
fault_branch = [5, 25, 20]; % 故障支路
%% 步骤3:确定故障时刻
time0 = [7 , 15];
time = time0(index); % 当前时刻
if index ~= 1 && index ~= 2
error('输入有误请重新输入!!!')
end
%% 步骤4:确定优先恢复集合
F_Rload = {[6, 12, 15, 23, 28, 30], [6, 12, 23, 30, 32]};
%% 步骤5:采用BFS确定孤岛包含的负荷
island_node = cell(1, length(Y_DG)); % 各个孤岛包含的负荷节点
island_node_all = [];
for k = 1:length(Y_DG)
[island_node{k} , ~] = BFS(Y_DG(k) , P_PV(index,k));
island_node_all = [island_node_all, setdiff(island_node{k}, island_node_all)];
end
% 将交叉的孤岛融合
index_island = zeros(length(Y_DG)); % 孤岛是否交叉的标志,例如index_island(1,2)=1,表示孤岛1和2有交叉
for k = 1:length(Y_DG)
for kk = k + 1 : length(Y_DG)
if ~isempty(intersect(island_node{k} , island_node{kk}))
index_island(k , kk) = 1; % 如果孤岛出现交叉情况就把标志为置为1
end
end
end
island_node_cross = cell(1, length(Y_DG) - sum(index_island(:))); % 将交叉的孤岛融合后的孤岛划分方案
island_cross_DG = cell(1, length(Y_DG) - sum(index_island(:))); % 融合后孤岛中包含的光伏节点
island_node_cross{1} = island_node{1};
island_cross_DG{1} = 1;
kk = 2;
for k = 2:length(Y_DG)
if sum(index_island(k , :)) == 0 && sum(index_island(: , k)) == 0
island_node_cross{kk} = island_node{k};
island_cross_DG{kk} = k;
kk = kk + 1;
else
cross_num = [find(index_island(k , :)) , find(index_island(: , k))];
for kkk = 1:length(cross_num)
island_node_cross{min(cross_num)} = union(island_node_cross{min(cross_num)} , island_node{k});
island_cross_DG{min(cross_num)} = union(island_cross_DG{min(cross_num)} , k);
end
end
end
%% 步骤6:判断优先恢复集中的负荷是否被恢复,以未恢复的负荷所在节点作为根节点,利用 DFS 法将其接入最近的光伏电站
island_num = length(island_node_cross); % 融合后的孤岛数量
for k = 1:length(F_Rload{index})
if ~ismember(F_Rload{index}(k), island_node_all)
for kk = 1:length(Y_DG)
[island_node0{kk}, distance0(kk)] = dfs_shortest_paths(F_Rload{index}(k), Y_DG(kk));
end
[~, min_index] = min(distance0);
for kk = 1:island_num
if ismember(min_index , island_cross_DG{kk})
island_node_cross{kk} = union(island_node0{min_index}, island_node_cross{kk});
end
end
end
end
%% 步骤7:削减可控负荷
island_power = zeros(1, island_num); % 孤岛内光储系统总出力
island_load = zeros(1, island_num); % 孤岛内负荷总量
for k = 1:island_num
island_power(k) = sum(P_PV(index, island_cross_DG{k})); % 孤岛内光储系统总出力
island_load(k) = sum(P_load(island_node_cross{k} , index)); % 孤岛内负荷总量
if island_power(k) < island_load(k) % 如果光储系统无法满足负荷需求,需要削减负荷
for kk = 1:length(island_node_cross{k})
if ismember(island_node_cross{k}(kk), C_load1)
island_load(k) = island_load(k) - P_load(island_node_cross{k}(kk) , index);
island_node_cross{k} = setdiff(island_node_cross{k} , island_node_cross{k}(kk));
if island_power(k) >= island_load(k)
break
end
elseif ismember(island_node_cross{k}(kk), C_load2)
island_load(k) = island_load(k) - 0.5*P_load(island_node_cross{k}(kk) , index);
if island_power(k) >= island_load(k)
break
end
end
end
end
if island_power(k) < island_load(k) % 如果削减了可控负荷后还是无法满足需求,则按照重要度等级进行切负荷操作
[~ , Ft_index] = sort(Ft(:, time)); % 把负荷按重要度等级从大到小排列
for kk = 1:Nb
if ismember(kk, island_node_cross{k})
island_load(k) = island_load(k) - P_load(kk , index);
island_node_cross{k} = setdiff(island_node_cross{k} , kk);
if island_power(k) >= island_load(k)
break
end
end
end
end
end
%% 步骤8:输出孤岛划分方案
for k = 1:island_num
disp(['**********************************第', num2str(k), '个孤岛**********************************'])
disp(['包含光储系统' , num2str(island_cross_DG{k}) , ',光储系统总功率为:' , num2str(island_power(k)) , 'kW'])
disp(['包含节点:' , num2str(island_node_cross{k}) , ',孤岛内负荷总需求为:' , num2str(island_load(k)) , 'kW'])
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
参考文献: [1]徐岩,张荟,孙易洲.基于变异粒子群算法的主动配电网故障恢复策略[J].电力自动化设备,2021,41(12):45-53.DOI:10.16081/j.epae.202108030. 为提高主动配电网故障恢复的快速性和可靠性,提出一种基于变异粒子群算法的恢复策略。光储系统与负荷特性模型的构建是研究策略的基础,利用光储模型保证负荷可靠恢复,在构建负荷特性模型时考虑负荷时变性、需求时变性及负荷可控性的特点。在建立的光储系统与负荷特性模型基础上研究故障恢复策略,首先对配电网进行动态孤岛划分,利用光储系统对孤岛内负荷进行可靠恢复,保证用户侧需求度高的负荷优先恢复,然后以总失电负荷最少、网损最小及开关动作次数最少为综合目标函数,运用变异粒子群算法得到孤岛与主网配合的配电网综合恢复策略,提高了主动配电网可靠性。最后,采用IEEE 33节点系统进行算例分析,结果验证了模型与恢复策略的优越性。
资源推荐
资源详情
资源评论
收起资源包目录
完整matlab代码.rar (20个子文件)
完整matlab代码
creat_pso.m 524B
IEEE33_故障场景2.vsdx 47KB
dfs_shortest_paths.m 1KB
BPSO.m 3KB
BFS.m 2KB
main_island.m 6KB
main.m 2KB
MPSO.m 4KB
sigmoid.m 49B
fitnessfun.m 2KB
idx_brch.m 5KB
Copyright.p 458B
代码说明.pdf 1.28MB
IEEE33_故障场景1.vsdx 46KB
IEEE33.m 4KB
idx_bus.m 4KB
parameters.m 2KB
DFS.m 846B
main_service_recovery.m 5KB
IEEE33_故障后.vsdx 45KB
共 20 条
- 1
资源评论
配电网和matlab
- 粉丝: 4058
- 资源: 96
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功