2026/8/31 18:13:08

电气距离与谱聚类模糊分区:电力系统无功电压控制的关键技术

电气距离与谱聚类模糊分区:电力系统无功电压控制的关键技术 简介本资源面向电力系统分析方向的研究生、科研人员及高年级本科生聚焦于利用谱聚类算法实现电网分区这一核心工程问题。针对传统分区方法难以刻画节点间非线性电气耦合关系的痛点资源提供基于电气距离构建相似度矩阵、拉普拉斯矩阵分解与特征向量聚类的完整MATLAB实现方案适用于IEEE标准测试系统建模与算法验证。压缩包共含2个MATLAB源文件.m总大小仅1KB轻量紧凑分别实现数据预处理、谱聚类核心流程及分区结果生成代码结构清晰、注释充分便于理解算法原理与调试修改。已有501人学习下载读者可直接运行复现IEEE 30节点系统的分区效果掌握电气距离计算、图谱理论建模、特征向量降维聚类等关键技术环节为拓展至大规模电网分区研究提供可复用的算法框架与实践基础。1. 为什么电力系统需要“分区”这个操作干电力系统规划或者运行分析的人基本都绕不开“分区”这件事。电网规模一上来全网统一分析的计算量会大到没法接受而且不同区域之间的电气耦合程度差异很大把联系紧密的节点归到一起、把联系松散的区域切开既能降低分析维度又能让调度和规划更直观。我最早接触电力系统分区是在做无功电压优化的时候。全网几百个节点一起做优化计算慢不说结果还经常因为局部数据波动导致全局振荡。后来把电网按电气距离分成几个区每个区独立做无功平衡再在区与区之间协调边界变量问题一下子清爽了很多。这就是分区最朴素的价值把复杂网络拆成若干个内部强耦合、外部弱耦合的子网络。分区这个事核心要解决两个问题一是“用什么尺度衡量两个节点之间的关系”二是“用什么算法把节点聚成合理的几组”。前者对应电气距离后者对应聚类算法。这些年我做下来觉得电气距离的定义直接决定分区结果是否贴近物理实际而聚类算法的选择则决定了分区是否稳定、是否可解释。标题里出现的“谱聚类算法”是目前处理这类图分割问题最常用的方法之一。和传统的K-means或者层次聚类比谱聚类对非凸形状的簇有天然优势而且它天然基于图的结构和电网这种拓扑网络非常契合。再说“模糊聚类”它解决的是谱聚类硬划分的一个痛点边界节点到底归哪个区很多时候并不是非此即彼的。把模糊隶属度引入分区可以让分区结果更平滑也更贴合实际运行中联络线功率可调的特点。另外多说一句搜索热词里“电气间隙和爬电距离”是另一个完全不同的概念那是电气设备绝缘设计里的物理间距要求和电力系统分区里的“电气距离”不是一回事。做分区时我们说的电气距离是节点之间在电气特性上的远近程度一般用阻抗、灵敏度或者潮流分布来量化。这两个概念千万别混。这篇文章我会从电气距离的构造开始把谱聚类分区的完整流程拆开讲一遍再结合模糊聚类的改进思路最后给出我实际跑项目时的参数设置和踩坑记录。适合正在做电网分区、无功优化、电压控制分区或者刚接触谱聚类算法想拿电力系统练手的朋友。2. 电气距离分区的“尺子”到底怎么造2.1 电气距离的定义与两种主流构造方式分区的前提是给每个节点对打一个“距离分”。电网里两个节点之间的物理线路长度近不代表电气上就近——一条500kV线路和一台低阻抗变压器可能让人感觉很近但实际电压支撑能力完全不同。所以电气距离必须从电气特性出发而不是地理距离。目前工程上常用的电气距离构造方式有两类第一类是基于阻抗矩阵的电气距离。通过潮流计算或者状态估计求出系统的节点阻抗矩阵然后定义节点i和节点j之间的电气距离为D(i,j) Zii Zjj - 2Zij这个式子其实是在衡量两个节点之间的互阻抗和自阻抗差异。如果两个节点之间电气上紧耦合Zij会比较大D(i,j)就小反之就大。这种方式直观计算简单而且阻抗矩阵在电力系统分析里本来就是现成的所以很多文献和工具都采用这种方式。第二类是基于灵敏度信息的电气距离。比如无功电压分区里常用电压-无功灵敏度来定义节点之间的电气距离。先求潮流雅可比矩阵的逆得到电压对无功注入的灵敏度矩阵S。然后节点i和j之间的距离可以是D(i,j) -log( |Sij| / sqrt(Sii * Sjj) )这玩意儿的逻辑是如果节点j的无功变化能显著影响节点i的电压说明它们电气上近反之则远。负对数的变换是为了把高灵敏度映射为小距离方便后面聚类的距离计算。我在实际项目中如果是做电压控制分区优先用灵敏度法因为它直接反映无功电压调控效果如果是做网络结构分析或者黑启动分区用阻抗法更稳。你也可以把两者融合构造综合电气距离但要注意量纲和权重的标定否则容易引入人为偏差。2.2 电气距离矩阵的标准化与相似度转换拿到节点间的电气距离后不能直接喂给谱聚类。谱聚类处理的是“相似度”而不是“距离”所以需要把距离矩阵转换成相似度矩阵。最常用的转换方式是高斯核函数A(i,j) exp(-D(i,j)^2 / (2 * sigma^2))其中sigma是带宽参数决定了相似度随距离衰减的速度。sigma如果取太大所有节点之间的相似度都接近1聚类就没有区分度如果太小只有电气上极近的节点才能有非零相似度容易产生很多碎片簇。sigma怎么选一个经验做法是取所有电气距离的标准差作为参考值然后在这个值附近扫几个候选用分区结果的轮廓系数来评估。也可以按距离矩阵的某个分位数来定比如取所有距离值从小到大排序后的第20个百分位数作为sigma的基数总之要根据实际距离分布来调不要拍脑袋定死。另外相似度矩阵必须要对称、非负。理论上电气距离矩阵是对称的但数值计算中可能出现微小不对称需要做一次对称化处理A (A A^T) / 2。这个细节虽然小但如果不做后面求拉普拉斯矩阵的特征向量时会出现虚部残留特征向量就不是实向量了很烦。2.3 模糊聚类视角下的电气距离改进经典的电气距离是一个确定值但实际运行中系统运行方式会变节点之间的电气关系也不是一成不变的。这时候可以引入模糊数学的思想把电气距离定义为一种“模糊相似关系”。具体做法是先计算多个典型运行方式下的电气距离矩阵然后对每个距离矩阵做归一化再用模糊合成算子比如最大最小合成得到一个综合相似度矩阵。这个综合矩阵既保留了各个场景下的耦合特征又不会因为某个极端场景而扭曲整体分区。我试过用这种方法处理含新能源波动的分区问题。风电出力从100MW涨到800MW某些输电断面潮流翻转如果只用单一断面计算电气距离分区结果会不稳定。而把几个典型出力场景下的电气距离做模糊聚合后边界节点会自然地表现出“既像A区又像B区”的模糊特性后续再用模糊聚类去处理分区结果就稳很多。3. 谱聚类算法从图分割到特征向量3.1 谱聚类为什么适合电力系统分区谱聚类的思想可以追溯到图分割问题。想象电网是一个无向加权图节点是母线边是输电线路边的权重就是刚才算的相似度。我们想把图切成几个子图让子图内部的边权重尽量大子图之间的边权重尽量小。这就是一个最优化问题。直接求解这个最优化问题是NP难的但谱聚类找到了一条巧妙的路径把图分割问题转化成拉普拉斯矩阵的特征分解问题通过对特征向量的聚类来近似最优分割。这个方法不要求簇的形状是凸的也不要求数据分布在特征空间里是线性可分的所以特别适合电网这种拓扑结构复杂、社区结构不规则的网络。实际用下来谱聚类在以下几类电力系统场景里表现很好无功电压分区把电压控制强相关的节点归到一个区每个区配置一个主导节点做二级电压控制。主动配电网分区分布式电源接入后配电网从单电源辐射状变成多源网络分区可以缩小故障隔离范围。黑启动恢复分区把电网划分为若干独立恢复子网每个子网内有黑启动电源可以并行恢复。相比之下K-means直接在原始节点坐标上聚类只能识别球形簇对电气距离矩阵这种高维相似度结构无能为力。层次聚类虽然能构建树状图但节点多时计算量太大而且划分不稳定。谱聚类是目前综合效果最好的选择。3.2 拉普拉斯矩阵与特征分解谱聚类的核心是图拉普拉斯矩阵。给定相似度矩阵A定义度矩阵D为对角阵D(i,i) sum_j A(i,j)。然后可以构造两种常见的拉普拉斯矩阵非归一化拉普拉斯L D - A归一化拉普拉斯Lsym D^(-1/2) * L * D^(-1/2)大多数情况下推荐用归一化拉普拉斯因为它能消除节点度数差异带来的偏差。电网里的枢纽节点和末端节点度数差异极大如果不用归一化度数高的节点会主导特征向量的方向分区结果会偏向把枢纽节点单独切出来。接下来对拉普拉斯矩阵做特征分解取最小的k个特征值对应的特征向量。这里有个细节拉普拉斯矩阵最小的特征值通常是0对应的特征向量是全1向量意义不大。我们要的是第2小到第k1小的特征值对应的特征向量。把这些特征向量按列拼成一个n行k列的矩阵每一行就对应一个节点的k维“谱嵌入”坐标。然后用K-means对这个n*k矩阵的行向量做聚类得到每个节点的分区标签。有人会问为什么特征向量能代表节点在图中的位置你可以这么理解拉普拉斯矩阵的特征向量相当于把图中每个节点映射到一个低维空间在这个空间里电气上联系紧密的节点会被拉近联系松散的节点会被推远。这比直接用原始的电气距离矩阵做聚类要稳得多因为它已经隐式地考虑了全网的连接结构而不是只看两两距离。3.3 谱聚类中的参数分区数k怎么定分区数k是谱聚类最重要的超参数。k选少了一个区里可能包含多个电压控制弱相关的子区域k选多了原本耦合紧密的区域被硬拆开会给边界协调增加负担。常用的定k方法有两个第一个是特征值间隙法。对拉普拉斯矩阵做特征分解后把特征值从小到大排列观察相邻特征值的差值找到最大间隙所在的位置。比如特征值序列是0.00, 0.12, 0.35, 0.38, 0.55, 0.89那么0.35和0.38之间的间隙很小说明从第4个开始特征值变化趋缓而0.12到0.35之间有个大间隙通常就取k2或k3。这个方法的直觉是如果图里天然存在清晰的社区结构那么前面的特征值会明显小于后面的形成一个跳跃。第二个是轮廓系数法。对不同的k分别做一次谱聚类计算每个分区结果的轮廓系数轮廓系数越接近1说明簇内紧密、簇间分离选轮廓系数最大的k。这个方法更稳妥但计算量稍大。实际工程中我会两者结合先用特征值间隙缩小候选范围再对几个候选k做轮廓系数评估。另外还要考虑业务约束。比如无功分区通常希望每个区的规模不要太大以便于电压控制也不要太小否则失去分区意义。一些文献建议每个区不少于10到15个节点具体根据电网规模来定。这些工程约束有时候比统计指标更重要。4. 模糊聚类与谱聚类的结合从硬分区到软边界4.1 硬分区的痛点谱聚类K-means最后输出的是每个节点唯一的标签这属于硬分区。硬分区的优点是结果清晰、易于调度执行但缺点是忽视了边界节点的“两栖性”。我举个例子。有一条联络线连接A区和B区线路两端的节点如果分属两个区那么这条联络线就是区间联络线。实际调度中区间联络线的功率控制往往需要两个区共同协调。如果把联络线两端的节点硬性地一个归A、一个归B那么联络线功率就变成一个“外部变量”每个区在做内部优化时都不会主动考虑它的调节能力。但如果能识别出边界节点对两个区都有较强的隶属度那么可以专门处理这些节点比如设置成边界协调节点或者把它们的无功调节量作为两个区共同优化的变量。这就是模糊聚类的用武之地。模糊聚类不要求一个节点必须属于某个区而是给出它对每个区的隶属度。比如节点i对A区的隶属度是0.7对B区是0.3就说明它更像A区成员但和B区也有关联。这种软划分方式更符合电力系统的连续物理特性。4.2 模糊C均值聚类FCM与谱嵌入的结合最简单的做法是在谱聚类得到n*k维特征向量矩阵后把最后一步的K-means换成模糊C均值聚类FCM。FCM的目标函数是J sum_i sum_c u_ic^m * ||x_i - v_c||^2其中u_ic是节点i对簇c的隶属度m是模糊指数通常取2x_i是节点i的谱嵌入向量v_c是簇中心。算法迭代更新隶属度和簇中心直到收敛。把FCM用在谱嵌入空间里比直接对原始特征聚类效果更好因为谱嵌入空间已经包含了图的全局结构信息FCM只需要处理低维空间里的簇形划分二者的优势可以叠加。我的经验是模糊指数m对结果的影响比较大。m太小接近1隶属度就接近硬划分边界模糊性体现不出来m太大超过3所有隶属度都趋向于均匀分区结果会变得很模糊无法给出明确的分区方案。一般取m2比较合适如果希望分区边界更清晰可以调到1.5如果希望保留更多模糊信息就取2.5。得到隶属度矩阵后怎么确定最终分区常见做法是“最大隶属度原则”每个节点归到隶属度最大的那个区。这样得到的分区主体和硬聚类基本一致但额外保留了隶属度信息可以用它识别边界节点。比如一个节点对两个区的隶属度都超过0.4就标记为强耦合边界节点后续在做时序仿真或优化时需要重点关注。4.3 模糊谱聚类的实用变体除了FCM还有几种结合模糊理论和谱聚类的方式我在不同项目里试过各有适用场景模糊相似矩阵直接特征分解先用模糊等价关系构造相似度矩阵再求特征向量。这种方法适用于需要保持传递闭包性质的场景但计算量较大适合中小规模电网。区间模糊聚类把每个节点的电气距离设定为一个区间值而不是点值然后基于区间模糊理论聚类。适合处理不确定性较强的场景比如考虑N-1故障后电气距离会变化的动态分区。基于隶属度修正的分区后处理先用谱聚类得到一个初始硬分区然后计算每个节点对相邻簇中心的贴近度把贴近度低于阈值的节点重新标记为边界节点。这种方式不需要改聚类算法工程上最容易落地。我在实际工程中优先推荐最后一种原因很现实调度系统要求分区结果明确不能每个节点都带一个模糊隶属度矩阵。直接用模糊聚类最后还要转成硬分区或者单独维护边界节点集合不如先做硬分区再从结果中提取边界节点。但这不代表模糊聚类没有价值——它的价值在于提供“边界节点识别”的量化工具而不是取代硬分区本身。5. 完整实操从电气距离到模糊谱聚类分区5.1 数据准备与电气距离计算我这里用一个IEEE 39节点系统的算例来说明流程。这个系统是经典的10机39母线测试系统拓扑结构复杂程度适中非常适合用来验证分区算法。第一步从潮流计算程序比如Matpower、PSASP或者BPA中获取系统的节点阻抗矩阵Z。Matpower里可以直接用makeBdc或makeYbus等函数生成导纳矩阵再求逆得到阻抗矩阵。注意要用极坐标潮流计算后的雅可比矩阵求灵敏度不要直接用直流潮流近似否则会丢失无功电压信息。以阻抗法为例计算所有节点对之间的电气距离% 假设Z为39x39的节点阻抗矩阵 n size(Z, 1); D zeros(n, n); for i 1:n for j 1:n D(i, j) Z(i,i) Z(j,j) - 2*Z(i,j); end end % 对称化处理 D (D D) / 2;这段代码跑完之后D矩阵的对角元为0因为到自身的距离为0整体非负。第二步将距离矩阵转换成相似度矩阵。我用高斯核函数sigma取所有非对角元素标准差的两倍。之所以取两倍是因为电气距离分布通常右偏直接用标准差会导致sigma偏小相似度矩阵过度稀疏。你也可以先画一下距离的直方图再决定sigma取值。sigma 2 * std(D(~eye(n))); A exp(-D.^2 / (2 * sigma^2)); A (A A) / 2;这里得到的A矩阵每行的和不等于1所以后面构造拉普拉斯矩阵时要考虑归一化。5.2 谱聚类主体流程第三步构造归一化拉普拉斯矩阵并做特征分解。这里我直接写关键代码后面解释每一行在干嘛。deg sum(A, 2); D_inv_sqrt diag(1 ./ sqrt(deg)); L_sym eye(n) - D_inv_sqrt * A * D_inv_sqrt; [eig_vec, eig_val] eig(L_sym); eig_val diag(eig_val); [eig_val_sorted, idx] sort(eig_val); eig_vec_sorted eig_vec(:, idx);特征值排序后前几个特征值基本是0到0.1区间内。这里我建议先观察特征值序列画出特征值从第1到第10的变化曲线找明显的“拐点”。第四步确定分区数k。我把前10个特征值列出来实际算例中会有具体数值然后用最大间隙法。假设第2和第3个特征值之间的间隙最大那么k就选2但如果不考虑业务约束单纯聚类效果可能选3更合适。这时候就要参考工程需求。第五步从特征向量矩阵里取前k列一般取第2到第k1列因为第1列对应特征值0不携带分区信息构成n*k矩阵。然后做K-means或者FCM。5.3 FCM替换K-means的改动如果要用模糊聚类Matlab自带fcm函数位于Fuzzy Logic Toolbox里。没有这个工具箱也可以用开源代码或者自己写迭代逻辑不复杂。k 3; X eig_vec_sorted(:, 2:k1); [center, U] fcm(X, k, [2.0, 100, 1e-5, 0]); [~, label] max(U, [], 1); label label;这里面关键参数是模糊指数2.0、最大迭代次数100、终止阈值1e-5。运行完后U是一个k*n的矩阵U(j,i)表示节点i对簇j的隶属度。label就是每个节点的最终分区标签。为了识别边界节点我通常会设置一个阈值比如0.6。如果一个节点的最大隶属度小于0.6说明它没有明确的归属标记为边界节点。阈值设多少取决于你对分区清晰度的要求。我一般用0.5到0.7之间越大边界节点越少越小边界节点越多。5.4 分区结果的可视化与校验算完分区标签后不能直接拿来用必须做校验。至少要做三件事一是地理接线图着色。把分区结果画在电网单线图上不同区用不同颜色直观检查分区是否合理有没有某个区被另一个区完全包围有没有跨区域的长线路连接如果出现一个孤立的节点单独成区很可能k选大了或者相似度参数有问题。二是区内耦合度校验。计算每个区内节点的平均电气距离以及区间平均电气距离确保区内平均距离显著小于区间平均距离。可以用一个指标分区模块度QQ越大说明社区结构越明显。三是潮流仿真校验。把分区边界线路设置成联络线在两个区之间施加一个无功扰动观察区内电压是否保持稳定区间功率是否在合理范围。这个仿真可以用电力系统分析程序做如果分区合理扰动会被限制在区内不会大范围传播。我在实际项目里最常遇到的情况是分区结果看起来漂亮但一到动态仿真就露馅某个区的无功储备不足或者边界节点电压越限。所以分区最终不是算法自嗨一定要回到物理仿真里验证。6. 常见问题与排查技巧实录6.1 特征向量符号翻转导致聚类不稳定谱聚类用K-means对特征向量矩阵聚类时有个经典问题特征向量的符号并不唯一E和-E都可能是同一个特征值的特征向量。这导致每次跑K-means初始点的选择加上符号不确定性聚类结果可能来回变。解决办法是对每个特征向量做符号规范比如强制每列的最大绝对值元素为正数。这样虽然不能从数学上完全消除符号不确定性但能明显降低聚类结果的随机性。在Matlab里可以加一行for i 1:size(eig_vec_sorted, 2) [~, mx] max(abs(eig_vec_sorted(:, i))); if eig_vec_sorted(mx, i) 0 eig_vec_sorted(:, i) -eig_vec_sorted(:, i); end end6.2 分区数k的“多解”问题特征值间隙法给出的最佳k可能是一个区间而不是一个绝对数。比如特征值序列中1.2到1.3之间的间隙和2.8到3.1之间的间隙都很大这时k2和k3都说得通。这种多解情况要结合工程需求来定不能死盯统计指标。如果你做的是无功电压二级控制分区数通常和电压控制的有效性相关。分区太少导致每个区范围太大、区内电压差太大控制效果差分区太多又导致控制设备分散、投资增加。一般IEEE 39节点分3到4个区比较合适你可以从k3和k4分别做一次仿真比较哪种方案下分区效果更好。6.3 相似度矩阵参数sigma的敏感性sigma对分区结果的影响很大特别在电网节点分布不均匀的时候。如果某些区域节点密集、电气距离小sigma偏大可能导致它们被合并成一个区而偏远地区的节点因为距离大可能单独成簇。我调试过的一个案例里sigma从0.5变成1.0分区轮廓系数从0.32掉到0.21结果完全不同。所以sigma一定要和实际距离分布的尺度匹配。一个更稳妥的方法是用自适应sigma即对每个节点对采用不同的带宽参数比如取两个节点和周围邻居平均距离的某种组合。自适应的计算量稍大但能显著提升分区稳定性。6.4 孤立节点和孤岛分区在做谱聚类时偶尔会出现某个节点单独成一簇的情况。这通常是电气距离矩阵中有极端值导致的。例如某个节点经过一台高阻抗变压器接入主网它和其他节点的电气距离都很大相似度接近0谱嵌入空间中就会离群得很远。遇到这种情况先别急着改算法检查一下是不是数据问题比如变压器阻抗单位不一致、并联支路参数没填、或者某个节点在潮流计算中被当成PV节点但实际电压控制能力不足。排除数据问题后如果节点确实相对孤立可以把它强制划分到电气距离最近的区域并在该区域的边界节点列表中将其标记。在分区控制中这种弱耦合节点往往需要特殊处理不能按照普通区内节点来对待。6.5 电气距离和“电气间隙爬电距离”不要混淆再强调一次电力系统分区的电气距离是衡量节点间电气耦合强度的抽象距离而热搜词里的“电气间隙和爬电距离”是电工学中绝缘设计的概念指两导电部件之间通过空气或绝缘表面应当保持的最短物理距离。前者用于分区分析后者用于设备设计名称里都有“距离”但完全是两个维度。在搜索资料或和别人讨论时先分清楚语境不然容易鸡同鸭讲。7. 实操中的几点体会做了这么多分区项目我的一个核心体会是算法再好也要先理解你要解决什么问题。如果是为了做无功控制分区电气距离的定义就必须围绕无功电压灵敏度展开如果是为了做网络拓扑分析用阻抗距离就足够了。换一个应用场景整个算法流程里最关键的“尺子”就要换一把。另一个体会是谱聚类并不是越复杂越好。有些人一上来就上深度学习、图神经网络结果数据量不够效果还不如传统谱聚类稳定。电网分区本质上是一个带物理约束的图分割问题谱聚类模糊隶属度处理边界已经是性价比极高的方案。最后建议所有做分区的人务必把分区结果放到实际运行场景中验证。我见过太多论文里分区结果很漂亮但实际上控制不了电压或者潮流越限。分区不是终点能够服务于后面的稳定分析和优化控制才是有价值的分区。如果你刚开始接触这个方向可以从IEEE 39节点系统入手把电气距离计算、谱聚类、边界节点识别这一套流程跑通然后替换成自己手头的电网数据。跑通一次之后你会发现电力系统分区这件事没有想象中那么玄乎。本文还有配套的精品资源点击获取