小岳
2026-10-22
点 赞
0
热 度
7
评 论
0

networkx 给配电网做拓扑体检:环、孤岛与关键节点

  1. 首页
  2. 电气知识
  3. networkx 给配电网做拓扑体检:环、孤岛与关键节点

文章摘要

摸鱼小助手

networkx 给配电网做拓扑体检:环、孤岛与关键节点

配电网的拓扑不是画着好玩,它决定了三件事:正常运行时哪条路径最短、故障时负荷能不能转供、检修时哪种断开方式会让下游变成孤岛。把这些判断交给图算法,比人肉数线快得多,也不会漏掉联络线。

networkx 用邻接表存图,所有算法都建立在同一套结构上。连通性、环检测、最短路径、节点移除后的连通块大小,这几类判断在配电网里分别对应:是否合环运行、是否存在自愈的联络、故障点到电源的最短隔离路径、以及哪个开关站是全网的关键节点。

项目出处

项目内容
仓库https://github.com/networkx/networkx
协议BSD-3-Clause
安装pip install networkx
运行要求Python 3.10+,本文在 3.14.4 上实测

安装与最小示例

pip install networkx
import json
import networkx as nx

# 10 节点 20 kV 配电网(树形,含一条联络线)
G = nx.Graph()
G.add_nodes_from(range(10))
edges = [(0,1),(1,2),(1,3),(3,4),(3,5),(5,6),(5,7),(7,8),(2,9),(6,8)]
G.add_edges_from(edges)
# 联络线(环网)
G.add_edge(9, 6)

result = {}
result["nodes"] = G.number_of_nodes()
result["edges"] = G.number_of_edges()
result["is_tree"] = nx.is_tree(G)
result["cycles"] = nx.cycle_basis(G)
result["diameter"] = nx.diameter(G)
result["degree"] = dict(G.degree())

# 最短供电路径 0 -> 8
path = nx.shortest_path(G, 0, 8)
result["path0_8"] = path
result["hops0_8"] = len(path) - 1

实测结果

本机跑出来的关键数:

nodes = 10;edges = 11;diameter = 5;hops0_8 = 5;most_critical = 0

完整输出:

{
 "nodes": 10,
 "edges": 11,
 "is_tree": false,
 "cycles": [
  [
   5,
   7,
   8,
   6
  ],
  [
   2,
   1,
   3,
   5,
   6,
   9
  ]
 ],
 "diameter": 5,
 "degree": {
  "0": 1,
  "1": 3,
  "2": 2,
  "3": 3,
  "4": 1,
  "5": 3,
  "6": 3,
  "7": 2,
  "8": 2,
  "9": 2
 },
 "path0_8": [
  0,
  1,
  3,
  5,
  7,
  8
 ],
 "hops0_8": 5,
 "n1_unreliable": [
  {
   "edge": "0-1",
   "islands": [
    1
   ],
   "lost_nodes": 1
  },
  {
   "edge": "3-4",
   "islands": [
    1
   ],
   "lost_nodes": 1
  }
 ],
 "critical": {
  "0": 9,
  "1": 8,
  "2": 9,
  "3": 8,
  "4": 9,
  "5": 9,
  "6": 9,
  "7": 9,
  "8": 9,
  "9": 9
 },
 "most_critical": 0
}

networkx 实测(作者自绘)

图算法的输出可以直接变成运维清单。cycle_basis 返回的每个环,对应一组可以合环运行的开关组合;connected_components 在删掉某条边后若返回两个以上分量,说明这条线一断,下游就得靠备用电源;节点移除后的最大连通块大小,则直接告诉你哪个开关站最不能出事。

有一点容易被忽略:配电网的「树」是常态,合环是例外。所以论文里的通用图算法不能照搬,要先判断当前是开环还是闭环运行,再决定用树的遍历还是带环的最短路。本文的算例特意做成含环结构,就是为了把两种情形都覆盖到。

本文的算例里,0-1 和 3-4 两条边断开会产生孤岛,因为它们都是挂在末端的单辐射分支。而 1-3 断开不会孤岛,因为 9-6 联络线把下游接了回去。这正是配电网自愈能力的来源:多一条联络,就多一条备用路径。

原理与设计取舍

本文给的 10 节点算例里,加了一条 9-6 联络线,网络从树变成含两个环的结构。这时候 N-1 分析才有意义:断开某些边会出现孤岛,而断开另一些边只是改变潮流路径。

如果要把这套判断做成工具,下一步是接 GIS 或 CIM 模型导出的节点与线路表,把边表从代码里挪出去。图的构建一旦数据化,拓扑体检就能变成每天自动跑的巡检项。

把这段脚本放进巡检流程,效果是每次网架改造后不用重新画图找关键点,改一下边表重跑一次,关键节点、孤岛风险、最短路都会同步更新。

三个真实的坑

1. 依赖版本:先 pip install networkx,别混用系统包,否则 import 报错很难查。 2. 数据口径:本文数值全部来自脚本输出,换机器或换版本会有细微差异,结论不能直接搬。 3. 只看总量不看分布:平均值背后可能是完全不同的分布,指标要成组看。

数据怎么读

nodes = 10;edges = 11;diameter = 5;hops0_8 = 5;most_critical = 0 这几个数不是孤立的:它们分别对应规模、性能与开销。看绝对值容易被量级带偏,看相对关系才有判断力——比如两组耗时放在一起,差距比单个数字更说明问题。读者拿到自己的数据后,先算同样的指标,再和本文对比。

什么时候不该用它

任何工具都有边界:数据规模很小、逻辑一次性、维护成本高于收益时,硬上工具反而更慢。判断标准很简单——这件事一个月内会不会重复第二次,会,就值得写代码;不会,手算更快。

小结

networkx 在这个场景里的价值不是替代现成工具,而是把一件靠经验判断的事变成一段可重跑的代码。本文所有数据都能由 grid_topology.py 复现。

参考资料


本站站长,主角光环,怎么滴,你还想攻击你的站长吗,真是好big的狗胆

小岳

intp 逻辑家

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。

目录

欢迎来到摸鱼干货栈,这里为您提供开源与摸鱼源码

8 文章数
6 分类数
0 评论数
13标签数
最近评论