💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥
🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳ 座右铭:行百里者,半于九十。
📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥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 算例结果
2.2 仿真结果
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 参考文献
部分理论来源于网络,如有侵权请联系删除。
编辑