【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)

时间:2021-06-09 01:18:49
???? ???? ???? ???? 欢迎来到本博客 ❤️ ❤️ ???? ????


???? 博主优势: ???? ???? ????博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


座右铭:行百里者,半于九十。

???? ???? ???? 本文目录如下: ???? ???? ????
目录
????1 概述
????2 运行结果
2.1 算例结果
2.2 仿真结果
2.3 结论
????3 参考文献
????4 Matlab代码、数据、文章讲解

????1 概述

摘要:配电网重构(DNR)的目的是确定配电网的最优拓扑结构,是降低电网功率损耗的有效措施。电力负荷需求和光伏(PV)输出是不确定的,并随时间变化,将影响最佳网络拓扑结构。单小时确定性DNR无法处理这种不确定性和可变性。为此,本文提出了求解多小时随机DNR (SDNR)的方法。现有的DNR求解方法要么不准确,要么过于耗时,因此无法求解大型配电网的多小时sdnr。为此,提出了一种开关开交换(SOE)方法。从所有开关关闭的环路网络开始,SOE由三个步骤组成。第一步是依次打开开关,直到打开所有循环。第二步和第三步修改第一步中获得的分支的状态,以获得更好的径向拓扑。通过5个试验系统验证了该方法的准确性和快速求解速度,以及多小时SDNR优于单小时确定性DNR的优越性。

????2 运行结果

2.1 算例结果

【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)

编辑

【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)

2.2 仿真结果

【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)

2.3 结论

提出了一个多小时的SDNR来处理可变和不确定的负载和PV输出。现有的SDNR方法要么不准确,要么太耗时。因此,提出了一种精确、快速的启发式方法SOE,同时求解SDNR和DDNR。SOE由三个步骤组成。第一步可以快速获得相对准确的初始解,第二步和第三步进一步提高精度。仿真结果表明,与其他启发式方法相比,SOE 1)精度更高,2)在单小时DDNRs中的精度几乎与MP相当(99.71% ~ 100%),3)在求解多小时DDNRs时明显优于MP(例如损失减少19.65%)。SOE的解决速度明显快于MP(例如,快72-2325倍)。因此,SOE在精度和/或求解速度方面优于MP和其他启发式方法,特别是在求解大规模多小时DDNRs时。仿真结果还表明:1)解决多小时DDNR/SDNR比解决单小时DDNR/SDNR能获得更好的结果,即具有更低的损耗和/或满足电压限制;2)阻塞DDNR/SDNR能在损耗和开关动作数之间实现良好的平衡,而小时DDNR/SDNR有很多开关动作,24小时DDNR/SDNR有很高的损耗;3) SDNR优于DDNR,当负载(PV输出)低于(高于)其预测值时,DDNR的结果可能会违反电压上限。

部分代码:

warning('off')

addpath(pathdef)

mpopt = mpoption;

mpopt.out.all = 0; % do not print anything

mpopt.verbose = 0;

version_LODF = 0 % 1: use decrease_reconfig_algo_LODF.m

% 0: use decrease_reconfig_algo.m

distancePara = 10

combine3 = 1

candi_brch_bus = []; % candidate branch i added to bus j

% mpc0 = case417;

casei=4

d417_v2

substation_node = 1; n_bus = 417;

n1 = 3

n2 = 2

n1_down_substation = n1+1; n2_up_ending = n2;

Branch0 = Branch;

brch_idx_in_loop0 = unique(brch_idx_in_loop(:));

show_biograph1 = 0;

show_biograph = 0;

%% original network's power flow (not radial)

% show_biograph(Branch, Bus)

from_to = show_biograph_not_sorted(Branch, substation_node, show_biograph1);

mpc = generate_mpc(Bus, Branch, n_bus);

res_orig = runpf(mpc, mpopt);

losses = get_losses(res_orig.baseMVA, res_orig.bus, res_orig.branch);

loss0 = sum(real(losses));

fprintf('case417_tabu: original loop network''s loss is %.5f \n\n', loss0)

% for each branch in a loop,

% if open that branch does not cause isolation, check the two ending buses

% of that branch for connectivity, realized by shortestpath or conncomp

% calculate the lowest loss increase, print out the sorted loss increase

% open the branch with lowest loss increase

% stop criterion: number of buses - number of branches = 1

%% ------------------------ Core algorithm ------------------------%%

ff0 = Branch(:, 1); ff = ff0;

tt0 = Branch(:, 2); tt = tt0;

t1 = toc;

if version_LODF

[Branch] = decrease_reconfig_algo_LODF(Bus, Branch, brch_idx_in_loop, ...

ff0, tt0, substation_node, n_bus, loss0, distancePara); %%% core algorithm

else

[Branch] = decrease_reconfig_algo(Bus, Branch, brch_idx_in_loop, ff0, tt0, ...

substation_node, n_bus, loss0); %%% core algorithm

end

t2 = toc;

time_consumption.core = t2 - t1

% output of core algorithm

from_to = show_biograph_not_sorted(Branch(:, [1 2]), substation_node, ...

show_biograph1);

from_to0 = from_to;

mpc = generate_mpc(Bus, Branch, n_bus);

res_pf_dec = runpf(mpc, mpopt);

losses = get_losses(res_pf_dec.baseMVA, res_pf_dec.bus, res_pf_dec.branch);

loss0_dec = sum(real(losses)); %

fprintf('case417_tabu: radial network obtained by my core algorithm''s loss is %.5f \n\n', loss0_dec)

Branch_loss_record = [];

% record Branch and loss

Branch_loss_record.core.Branch = Branch;

Branch_loss_record.core.loss = loss0_dec;

%% prepare force open branches for tabu: branch_idx_focused

if get_brch_tabu_v2 == 1

[branch_idx_focused] = get_branch_idx_focused_for_tabu_v2( ...

from_to, Branch0, Branch, substation_node, brch_idx_in_loop0, n_bus, ...

n1_down_substation, n2_up_ending); % to answer reviewer 5-5's question

else

[branch_idx_focused] = get_branch_idx_focused_for_tabu( ...

from_to, Branch0, Branch, substation_node, brch_idx_in_loop0, n_bus, ...

n1_down_substation, n2_up_ending);

end

%% ------------------------ Tabu algorithm ------------------------%%

% run the core program for each upstream branch connected to the idx_force_open

% idx_considered = [35 69]

% for iter = idx_considered

for iter = 1:length(branch_idx_focused)

fprintf('iter=%d/%d\n', iter, length(branch_idx_focused));

Branch = Branch0;

Branch(branch_idx_focused(iter), :) = [];

ff0 = Branch(:, 1); ff = ff0;

tt0 = Branch(:, 2); tt = tt0;

brch_idx_in_loop = brch_idx_in_loop0;

idx_tmp = find(brch_idx_in_loop == branch_idx_focused(iter));

if isempty(idx_tmp)

else

brch_idx_in_loop(idx_tmp) = [];

brch_idx_in_loop(idx_tmp:end) = brch_idx_in_loop(idx_tmp:end)-1;

end

t1 = toc;

%%------------------- core algorithm in Tabu loop--------------------%%

if version_LODF

[Branch] = decrease_reconfig_algo_LODF(Bus, Branch, brch_idx_in_loop, ...

ff0, tt0, substation_node, n_bus, loss0, distancePara); %%% core algorithm

else

[Branch] = decrease_reconfig_algo(Bus, Branch, brch_idx_in_loop, ff0, tt0, ...

substation_node, n_bus, loss0); %%% core algorithm

end

t2 = toc;

????3 参考文献

部分理论来源于网络,如有侵权请联系删除。
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)

????4 Matlab代码、数据、文章讲解