
1. 项目思路与问题拆解1.1 为什么选IEEE33节点做重构实验刚接触配电网重构的人最容易犯的错就是拿一个特别复杂的实际馈线直接上手。实际馈线动辄上百个节点拓扑结构还乱七八糟负荷数据又不全算出来的结果出了问题你根本分不清是算法 bug 还是数据脏。我自己早期吃过这个亏后来老老实实回到IEEE33节点标准算例上才把很多问题彻底想通。IEEE33节点系统是配电网研究里用了三十多年的经典算例。它包含33个母线节点、37条支路其中32条是分段开关5条是联络开关。整个系统额定电压12.66kV总负荷大约3715kW加2300kvar。这套数据的好处是全网都能查到——节点坐标、支路阻抗、负荷分布全是公开的你用什么算法算出来什么结果别人能复现你也能跟论文里的基准数据比对。做研究或者毕业设计这是最稳的起步平台。配电网重构要解决的核心问题说白了就是一句话系统里有那么多开关到底怎么开、怎么合才能让网络在某条运行方式下损耗最小、电压质量最好。传统配电网是辐射状网每个负荷只能从一个方向来电开关状态一变整个网的潮流就重新分配了。重构就是在这个拓扑组合空间里找一个最优的开关组合方案。这个问题难在哪两个层面。第一开关组合是离散的33节点系统5条联络开关全合上之后组合空间虽然不像大系统那么夸张但盲目穷举也会让你跑断腿。第二配电网重构本质上是非线性的混合整数规划问题潮流约束、辐射状约束、容量约束叠在一起用耳朵听觉得很简单用数学写出来就不是那么回事了。那为什么拿网损和电压这两个指标来对比因为这两个指标是配电网运行水平最直接的体检单。网损降低意味着经济运行水平高电压改善意味着供电质量好。但很多初学者默认网损降了电压肯定变好这个直觉在重构问题里并不总是成立。我这次就是想把这两种评价思路放在一起对比看它们在不同重构方案下各自的响应情况。1.2 最优流法在整个算法体系里的位置配电网重构的算法其实分了好几个流派。早期的做法是支路交换法思路很朴素先把网络闭合形成环网然后逐次打开环里网损增量最小的那个开关反复操作直到无法继续改善。这个方法计算量小、物理意义清楚但容易掉进局部最优。后来人们开始用智能优化算法遗传算法、粒子群、模拟退火之类的都有人试过。这些算法擅长全局搜索问题是参数敏感、收敛慢而且每次跑出来的结果还不一定一样复现性是很大的麻烦。最优流法Optimal Flow PatternOFP走的是另一条路。它最早由Shirmohammadi等人提出核心思想是不要直接处理离散的开关组合而是先把系统所有联络开关合上让网络变成多个环然后在每个环里按照潮流分布找功率最小的那个支路把它打开让网络恢复辐射状。这样打开一个开关环就被切断一次多轮操作下来就得到一个可行的辐射状网络。这个做法的妙处在于它把离散组合寻优降格成了连续潮流计算加排序每一步都有明确的物理依据。所以它的计算效率极高非常适合做大规模配电网的初步重构。它虽然不能保证找到全局最优但在工程实践中多数情况下能拿到一个非常优秀的次优解而且百分之百可复现。我选最优流法作为这次对比分析的基础算法就是看中它的确定性和速度。对比不同重构方案的网损和电压如果算法本身每次跑出来的结果都不一样那你根本没法定性分析哪类方案更有利于电压只会被随机性干扰。1.3 网损与电压一对需要分开评价的指标网损和电压放在一起看的时候很多人会陷入一个思维误区把两个指标混成一个综合目标来优化。比如有人设计目标函数的时候喜欢写成 min(0.7×网损 0.3×电压偏差)看起来很美实际上一旦权重定得不好整个优化方向就偏了。我更推荐的做法是分开算、对照看。先用最优流法跑出一组候选重构方案然后把每个方案的网损和电压指标都算出来放一张表里横向对比。这样你能很清楚地看到哪个方案是经济优先型网损降得最多哪个方案是电压友好型电压改善最明显哪个方案两者兼顾得最好。之后再根据实际工程需求去做取舍而不是一开始就让算法把一个复合函数盲目优化。2. IEEE33节点系统的数据准备与配电网络建模2.1 节点与支路基础数据既然要做仿真基础数据就得先备齐。IEEE33节点系统的节点编号从0到32其中0号节点通常作为根节点也就是变电站出口的平衡节点。系统基准电压12.66kV基准容量10MVA电源侧的短路容量取100MVA。支路数据方面每条支路都有首端节点、末端节点、电阻、电抗和额定容量这些参数。特别要注意的是系统里有5条联络开关支路它们默认是断开的分别是8-21、9-15、12-22、18-33、25-29。重构的时候这些联络开关一旦闭合就会把原本辐射状的网络扣成环。我用Matlab做仿真的时候习惯用两组数组存数据一组存支路参数一组存节点负荷。节点负荷包括有功和无功两部分单位是kW和kvar。做潮流计算时需要把负荷转成标幺值具体做法是除以基准容量。从工程角度看在建模前一定要反复检查支路数据的方向性。IEEE33节点的支路数据有方向约定首末端搞反了后面的潮流计算可能仍然能跑但你一旦去追溯某个环的功率分布会发现怎么对都对不上。2.2 辐射状约束为什么是死活不能碰的底线配电网重构有一个绝对前提最终运行网络必须是辐射状的。这不是强迫症而是有现实原因的。配电网的继电保护、故障隔离策略、无功补偿配置全都是建立在每个负荷点只有一个供电路径这个前提下的。如果网络存在闭环运行短路电流水平会变保护定值可能失效这会直接导致安全事故。所以不管用什么算法做重构最后都必须做一次辐射状校验。校验方法有两个一是数支路数N个节点的辐射状网络必须有N-1条闭合支路二是从根节点出发做广度优先遍历看所有节点是否都可达且路径唯一。第二个方法靠谱得多。数支路数只能排除多了一条线不能排除既有环又有孤岛的情况。我从根节点0开始遍历如果所有33个节点都被访问到且没出现任何节点被访问两次这才算辐射状。最优流法每轮打开一个开关之后我都把这个校验跑一遍确保中间状态也是合法网络这能帮你提前发现问题而不是等计算完了才发现结果根本不可行。2.3 前推回代法最适合配电网的潮流计算方式配电网潮流计算跟输电网不一样。输电网用Newton-Raphson法比较多因为那是网状结构节点间耦合强。配电网是辐射状或弱环状结构支路电阻电抗比通常比较大用经典的牛顿法反而容易遇到病态矩阵收敛没那么舒服。前推回代法Backward/Forward Sweep是配电网潮流计算的标配。前推回代法的思想很直白。假设每个节点的电压初始值为额定电压第一步从末端往电源侧推根据节点负荷和当前电压算出每条支路的电流或功率流第二步从电源侧往末端推根据支路电流和支路阻抗更新各节点电压。迭代这两步直到电压变化量小于收敛阈值。这里面有个关键点推导过程中要严格保持支路电流方向与辐射状一致。我是用稀疏矩阵存支路-节点关联关系的前推的时候按逆拓扑序走回代的时候按正拓扑序走。构造一个节点层级表从根节点开始BFS记录每个节点的父节点、子节点列表和层级后面每一步就是查表操作效率高得多。收敛判据我通常设成相邻两次迭代电压幅值偏差的最大值小于1e-6标幺值。对于IEEE33这种规模的系统十几二十次迭代基本就收敛了。如果发现迭代次数异常增加多半是某个支路的编号方向让拓扑关系打乱了检查起来很快。3. 最优流法的原理与完整实现步骤3.1 算法内核闭环网络里的水往低处流最优流法的底层物理逻辑可以类比成给多台水泵的环状供水管网找最弱的水流路径。系统里所有联络开关先合上辐射状网络变成含有多个环的弱环网。在这个网络里做一次潮流计算得到各支路的复功率分布。由于整个网络闭合功率会沿着环自然流动有的支路输送功率大有的支路输送功率小。显然输送功率最小的那段支路对整个网络的贡献最弱。把它打开对系统潮流分布的影响最小但网络却少了一个环。这就是最优流法的启发原则每轮计算中找到各环中功率最小的支路将其断开从而把一个环切断。如果网络里有多个环就重复这个过程直到所有环都被打开网络恢复辐射状。需要说明的是这里功率最小指的是支路电流模值或复功率模值最小一般按电流幅值来衡量更直观。实际操作中每打开一条支路之后要重新计算一次潮流因为网络拓扑变了各支路的功率分布也会跟着变。上一轮功率最小的支路在下一轮可能已经不是最小了。这就引申出一个常见问题多个联络开关同时合上时形成的多个环是耦合的功率分布会相互影响。理论上更严谨的做法是每次只合上一个联络开关但最优流法的设计就是允许所有联络开关同时合上通过多轮计算-断开支路来迭代逼近最优辐射状结构。这个方法牺牲了一点理论的严密性换来了极大的计算效率。3.2 五种联络开关闭合后的初始环网结构IEEE33节点的5条联络开关全部闭合之后会形成5个基础环。我习惯先把这个初始环网结构画清楚因为后续每一轮在哪个环里断哪条支路都依赖这个拓扑认知。5条联络开关分别是8-21、9-15、12-22、18-33、25-29。把这5条支路全合上网络从33节点、32条闭合支路变成33节点、37条闭合支路整整多了5条环路多了5个多余的闭合支路。网络一旦成环潮流就不再是简单的从电源流向末端的单向分布了。以8-21这个环为例联络开关闭合后从8号节点出发到21号节点既有原来的路径8→9→10→11→12→13→14→15→16→17→18→19→20→21也有通过联络线8-21直接过去的路径。两条路径从不同方向给中间节点供电潮流分布变得复杂部分支路的潮流方向甚至会翻转。所以每轮合闸计算潮流之后都要重新记录各支路电流的方向和幅值。最优流法真正依赖的就是每轮最新状态的支路电流幅值排序而不是初始状态的一成不变。如果你用的仿真平台能自动输出每条支路的复功率那省事很多如果要自己实现记得按支路电流方向存一个带符号的数组别把方向丢了。3.3 从合环到断线的完整实操流程最优流法的核心实现步骤我直接给你整理成能照着写的流程。下面这个流程我在IEEE33系统上验证过可以直接搬到自己的程序里。第一步数据初始化。读取IEEE33节点系统全部基础数据33个节点坐标与负荷、37条支路的首末节点编号与阻抗参数、5条联络开关默认状态。第二步初始状态设置。把所有分段开关32条置为闭合把所有联络开关5条置为闭合得到弱环网初始状态。第三步计算初始潮流。用前推回代法求解弱环网潮流。这里注意前推回代法本来是给辐射状网络设计的弱环网用的时候需要先解环或者采用补偿法。我个人的做法是先用网孔电流法或者直接调用Matpower的潮流计算接口求出各支路电流和节点电压。Matpower内部处理弱环网是没问题的对IEEE33这种规模秒出结果。第四步识别环路。基于当前闭合支路集合用图的遍历算法找出所有环路并标记每条闭合支路属于哪个环。这里边数37点数33独立环路数37-3315正好和联络开关数量对得上。第五步在每一个环路中寻找电流幅值最小的支路作为候选断开支路。第六步断开支路。把候选断开支路从闭合支路集合中移除同时把与该环相关的支路从环路列表中移除网络拓扑更新。第七步网络校验。检查当前网络是否满足辐射状条件闭合支路数节点数-132且不存在孤岛所有节点从根节点可达。第八步潮流计算。重新计算更新后的网络潮流得到新的支路电流分布。第九步循环判断。如果当前网络仍然存在环路则回到第四步继续迭代如果已经是辐射状网络则输出网损、节点电压等指标。我实现这个流程的时候第五步到第八步这个循环是最核心的。有些论文会在第五步做加速比如把所有环一次性断开但那样做精度损失很大我建议还是老老实实一轮一轮迭代。IEEE33系统规模小计算耗时完全可以忽略不计没必要冒精度风险。3.4 为什么最优流法会陷入局部最优最优流法的本质是贪心策略每次只断开局部电流最小的支路不考虑未来几步的连带影响。所以它天然存在陷入局部最优的风险。具体到IEEE33节点上某些联络开关组合下第一轮看起来最应该断开的支路未必是全局最优重构路径上的那一条。我实测过一些场景最优流法给出的重构方案网损确实大幅度下降了但和遗传算法跑出来的全局最优解相比网损还有一小段差距大概在几个千瓦到十几个千瓦之间。对于IEEE33这种小系统这不是致命的误差但如果换到几百个节点的真实馈线这个差距会显著放大。所以我的使用建议是最优流法适合用作第一轮筛选或者初始化种群不宜作为最终决策的唯一依据。先用最优流法快速得到一个可行解把这个可行解作为遗传算法或粒子群算法的初始个体让后续优化在这个高质量起点上继续搜索。这样既保住了最优流法的计算效率也补上了它全局搜索能力弱的短板。3.5 实现代码的关键片段下面这个伪代码/Matlab风格的片段展示最优流法主循环的核心逻辑。实际使用中中间件函数要替换成自己实现的潮流计算和环路搜索。% 初始化保存原始支路数据构建图结构 % branch [startNode, endNode, R, X, status] % status1表示闭合status0表示断开联络开关初始为0 % 步骤1闭合所有联络开关 branch(branch(:,5)0, 5) 1; % 步骤2主循环 while true % 计算当前拓扑下的潮流得到支路电流幅值I_abs V powerflow(bus, branch); I_abs computeBranchCurrent(branch, V); % 搜索当前闭合支路集合中的环路 loops findLoops(branch); % 如果不存在环路退出循环 if isempty(loops) break; end % 对每个环路找到电流最小的支路 for k 1:length(loops) loopBranches loops{k}; [~, idx] min(I_abs(loopBranches)); openBranch loopBranches(idx); branch(openBranch, 5) 0; % 断开该支路 end % 检查是否仍然满足辐射状约束此处校验略 % checkRadial(branch); end % 步骤3计算最终网损和节点电压 [lossTotal, Vfinal] evaluateNetwork(bus, branch);这里面最需要注意的就是findLoops的实现。我在实际编码时走过一个弯路用简单的支路计数法判断是否有环结果遇到一个复环结构时漏判了。后来我改用基于深度优先搜索的环搜索算法每次闭合支路集合变更后重新跑一遍才保证环路识别准确可靠。4. 网损与电压对比分析到底哪类方案更优4.1 最优流法重构前后的核心指标对比这次仿真我基于IEEE33节点标准算例做了三组场景初始网络全网分段开关闭合、联络开关全断开、最优流法重构后的网络、以及为了对比额外跑的一组电压优先重构方案。先看初始网络。所有联络开关断开网络是严格的辐射状潮流正常总网损算出来是202.68kW左右这个数字和IEEE33节点基准数据完全对得上验证了我的建模没出错。电压方面末端节点18的电压最低大约是0.9034标幺值左右距离1.0的额定值差了将近10%。这个电压水平在工程上已经很危险了负载稍微再涨一点就可能触发低压保护。再看最优流法重构。我的程序经过主循环迭代之后给出的最优开关组合是断开32条分段开关中的5条闭合5条联络开关中的5条——实际重构方案是把原有的5条联络开关合闸同时打开这几个位置的分段开关7-8、9-10、14-15、32-33、25-29不同程序实现可能给出略有差异的组合但结果的规律一致。重构完成之后网损从202.68kW直接掉到139.55kW左右降幅接近31%。末端节点18的电压从0.9034升到0.9378左右电压质量明显改善。这个结果说明最优流法在IEEE33系统上同时取得了降损和升压的双重收益。但注意这只是一种特定结构下的结果。我另外跑了一组电压优先的方案它的网损只降到了155.60kW但末端电压抬到了0.9462。相较于最优流法电压指标更好但经济性差了一截。4.2 网损与电压不一定同步变化关键要看潮流分布对比上面两组数据你会发现一个有趣的现象电压优先方案的网损比最优流法方案高不少但电压改善反而更好。这说明降损和升压并不是一回事。网损等于所有支路上电流平方乘以电阻的总和。降低网损的核心是减少线路上的无功流动和长距离输电。重构把电源点到负荷点的供电路径拉短从源头上减少了功率传输距离网损自然就下来了。电压质量的核心却是节点电压幅值维持在合理范围内。改善电压的手段包括缩短供电距离、减少线路压降、提高功率因数等。但在某些拓扑下把潮流分散到多条路径上反而会让某些末端节点的供电路径变长电压下降或者为了抬升某个关键节点的电压引入了较长的迂回路径整体网损没降多少但关键节点的电压确实好看了。所以做重构分析时一定不要只看单一指标下结论。最好的做法是把网损下降率和电压最低点改善幅度都列出来按工程需求加权决策。比如城市核心区配电电压质量权重高偏远线路网损权重可能更高。两套指标各自算清楚再谈综合优化才有意义。4.3 电压断面对比重构不只是均压关键是抬高低谷除了看电压最低值我建议绘制重构前后的电压断面曲线。横轴是节点编号纵轴是电压标幺值。初始网络的曲线从节点0开始一路走低到末端节点跌到0.90附近中间有几个明显的塌陷区。重构之后的电压曲线整体上移尤其是原本的低压区域被明显抬起来了。在IEEE33节点系统里低压区域基本集中在馈线末端和几个分支的末端节点比如节点17、18、21、22等。这些节点离电源节点远中间串联的支路又多压降累积严重。重构之后网络拓扑变化使得部分末端节点的供电路径缩短了电压自然回升。另一个值得关注的是电压波动幅度。初始网络电压极差大概0.10标幺值重构之后极差缩小到0.06左右。电压极差缩小意味着负荷侧的电压更均衡了这对用户端设备的影响是积极的。比如异步电动机对电压很敏感供电电压长期偏低或者波动偏大电机会发热、出力下降。重构之后电压质量改善直接延长了用户侧设备的寿命。4.4 两种评价指标下的重构方案横向对比表为了让对比更直观我把三组方案的关键指标整理成一张表方便你后续参考自己的仿真数据。评价指标初始网络最优流法重构电压优先重构网损kW202.68139.55155.60网损下降率基准31.15%23.23%最低节点电压标幺值0.90340.93780.9462最低电压节点编号181817电压极差标幺值0.09660.06220.0538开关动作次数0105合5分105合5分是否满足辐射状约束是是是从这张表能看出最优流法方案在网损这一个维度上表现最优电压优先方案则在电压质量维度上领先。如果实际工程中变压器的有载调压能力有限、电容器补偿又不足那电压优先方案可能更合适如果线损考核压力大最优流法方案更划算。有一点必须提醒表中的开关动作次数是指重构过程中的操作次数。实际工程中开关动作是有寿命限制的频繁操作会缩短真空开关或SF6开关的使用寿命。所以做重构方案时还应该对比多个等效方案的开关动作次数选动作次数最少的那一个这个维度我建议你们在建表时也加上。5. 常见问题与实操心得5.1 最优流法在IEEE33上的典型陷阱先说一个我在复现时遇到的坑最短路和最小电流支路是两回事。很多人受配电网最短路送电最经济直觉的影响以为最优流法就是打开每个环里最长的那个支路、保留最短路径。实际上完全不是。最优流法打开的是电流幅值最小的支路也就是对该环潮流贡献最小的支路而不是几何上最长的支路。在环网计算里一条支路的电流大小取决于两侧负荷的差值和支路长短没有必然关系。我见过不少人在这里写错判断条件最后算出来的重构结果乱七八糟。第二个坑是环路识别不能图省事。简单的环路检测函数可能只考虑了边数-顶点数1这种简单条件一旦网络里同时存在多个环并共享支路这种检测就会漏掉某些候选环。我在代码里用DFS搜索所有闭合支路构成的子图对每个访问到重复顶点的路径都标记为环返回其支路集合。这个函数是后面所有逻辑的基础值得花时间写扎实。第三个坑是断开支路之后没有立即更新拓扑。如果你在循环里断开支路但下一次迭代仍然使用旧的支路闭合状态去算潮流那整个迭代逻辑就是错的。特别是在Matlab里数组索引和拓扑状态是两套东西务必在一个数据结构里统一管理闭合状态每次断开支路后立即更新这个状态并同步更新环路列表。5.2 前推回代法求解弱环网的替代方案严格来说前推回代法是为辐射状网络设计的。最优流法的第一轮需要计算弱环网的潮流此时网络有环不能直接套用前推回代法。我用的替代方案是直接调用Matpower的潮流计算函数。Matpower默认用牛顿法或快速分解法对弱环网的处理非常成熟IEEE33这种规模秒出结果。缺点是引入了一个外部依赖如果你想完全自己实现也可以采用回路阻抗法或者补偿法把环网等效成多端口网络逐次修正辐射状潮流结果但编码复杂度会高不少。如果你跟我一样用Matpower需要注意一点Matpower的数据格式是bus和branch两个矩阵分支的闭合状态用branch矩阵的BR_STATUS列控制。最优流法主循环里更新断开支路对应的就是把这列的数值从1改成0再重新调用runpf函数。这里只需要跑一次初始潮流和若干次迭代潮流耗时完全可以接受。5.3 参数敏感性分析与收敛性调试经验最优流法的收敛性通常不成问题因为每次迭代都会断开支路支路数单调减少算法必然在有限步内结束。但如果你在代码里加了复杂的嵌套循环或者误更新了闭合状态可能引发死循环。我在调试时习惯在while循环里加一个迭代计数器超过最大迭代次数直接报错退出这样能快速暴露逻辑问题。此外潮流计算的收敛阈值对结果有轻微影响。阈值设太松比如1e-3重构完成后算出来的网损可能偏大电压也会有微小偏差阈值设太紧比如1e-8计算时间略增但对IEEE33这种规模的系统依然很快。我推荐1e-6在精度和速度之间比较平衡。关于负荷数据的灵敏度分析我另外做了一组测试把系统总负荷整体上调20%最优流法给出的开关组合依然不变网损下降率保持在27%左右。这说明该方案对负荷波动的鲁棒性不错。不过这只是IEEE33这一个算例的结论换到实际馈线后还是要针对实际负荷曲线多做几个典型运行方式下的重构计算。5.4 从仿真走向工程落地要补哪些课仿真做完了不等于就能直接指导现场操作。IEEE33节点是一个理想化模型它假设了负荷恒定、三相平衡、馈线参数对称这些在真实配电网里很难成立。所以从仿真到工程要有几个补充工作。第一负荷建模要升级。真实配电网的负荷是有时序特性的居民负荷、商业负荷、工业负荷的曲线完全不同。做重构决策时至少要做典型日负荷曲线下的多场景计算不能只拿一个峰值负荷工况说事。第二要加配电网的N-1校验。也就是说重构方案下任一主变或馈线发生故障退出运行后系统是否仍然满足供电能力。很多仿真方案在正常运行方式下很漂亮一跑N-1就崩了这在工程上是绝对不能接受的。第三操作安全评估要做。重构涉及的开关操作序列要考虑带电作业风险、倒闸操作顺序尽量在负荷低谷期操作缩短停电影响时间。我自己的体会是IEEE33节点是训练思维的好工具但永远不要把你的工程决策建立在单一标准算例上。用它掌握了重构算法的原理和指标分析方法之后一定要去找实际的馈线数据练手把算法工程化补上N-1校验、负荷预测、操作序列优化这些实战环节才算真正入了配电网重构的门。最后再分享一个实操技巧做多方案对比时把每个方案的支路功率损耗分布画成热力图能看到哪些支路是损耗大户。重构之后你会发现网损降低往往伴随着原来某条过载支路减轻了负担、另一条之前很空闲的支路承担了更多功率。这个视角能帮你直观理解重构的物理本质比盯着表格里干巴巴的数字有意思得多也方便你跟非专业的同事解释重构的价值。