Physics-informed GNN · 第 6 模块
Physics-informed GNN · 微电网 N-1 安全预测
平衡潮流告诉我们电压必须满足哪些方程,GNN 入门介绍了怎样让节点交换信息。本章将两者连接起来:GNN 预测复电压,AC 方程检查这些电压是否解释了给定的负荷与网络,再把失配加入训练 loss。 训练后逐条退出线路,用预测电压计算电流,筛查微电网 N-1 工况。
1. 从电压回归走向物理约束
上一章用线性电压近似说明消息传递;本章参考标签改为完整的平衡 AC 潮流。继续使用五节点微电网:节点 1 是唯一外部电压源,节点 2 为带负荷的连接节点,节点 3、5 接负荷,节点 4 接负荷与固定 PQ 光伏。为观察有备用供电路径时的故障,增加 1–3 线路;默认 3–5 联络线也闭合。两条路径都接向同一个节点 1,并没有新增第二个电压源。
先明确假设、单位与符号
- 平衡三相稳态;线路只含串联阻抗,无变压器、并联电纳、调压器。负荷与逆变器均为指定的恒定 PQ,没有 PV 电压控制。
- 三相功率基值 1 MVA,线电压基值 0.4 kV,因此 Zbase = 0.16 Ω、Ibase = 1443.376 A。下文 V、P、Q、r、x 及潮流方程均用 pu;kW/kvar 在输入时换算。
- Pnet、Qnet 以消耗为正:净负荷 = 负荷 − 发电。AC 方程的 Sinj 以注入网络为正,所以 PQ 节点指定 Sinj = −Pnet − jQnet。
- 节点 1 固定 V₁ = 1 + j0。其输入 P = Q = 0 是占位值,实际供电由 AC 解决定,不能强迫参考节点满足“零注入”。光伏 Q = 0,不会在断网后自动形成电压。
| 节点 | 倍率为 1 时的负荷 | 发电 / 输入约定 |
|---|---|---|
| 1 | 外部参考源 | V = 1∠0;P/Q 输入占位为 0 |
| 2 | 80 kW / 30 kvar | 无发电 |
| 3 | 100 kW / 40 kvar | 无发电 |
| 4 | 60 kW / 25 kvar | 默认光伏 50 kW,Q = 0 |
| 5 | 默认 100 kW / 40 kvar | 可改基准 kW,Q/P = 0.4 |
负荷倍率作用于所有负荷,光伏独立设置。默认负荷倍率 1.2,所以节点 4 净功率为 22 kW / 30 kvar。
| 线路 | r pu | x pu | 电流额定值 pu(A) |
|---|---|---|---|
| 1–2 | 0.040 | 0.025 | 0.50(721.69) |
| 2–3 | 0.060 | 0.035 | 0.22(317.54) |
| 2–4 | 0.050 | 0.030 | 0.22(317.54) |
| 4–5 | 0.055 | 0.035 | 0.18(259.81) |
| 3–5 | 0.080 | 0.050 | 0.18(259.81) |
| 1–3 | 0.070 | 0.045 | 0.45(649.52) |
这些是教学算例的假定参数与额定值。阻抗倍率缩放 r/x,额定值倍率单独缩放电流上限。
2. 从复电压推导 AC 物理残差
用 c 表示基准工况或某个单线路退出工况。每个 c 都要同时重建计算弧和导纳矩阵 Yᶜ。线路 i–j 退出时,去掉两个方向的消息弧,也去掉该线路对 Yii、Yjj 的 +yij 和对 Yij、Yji 的 −yij 贡献。其中小写 yij = 1/(rij + jxij) 是线路导纳,大写 Yij 是节点导纳矩阵元素。
Ii = Bu + Gw
Qcalc = w Ir − u Ii
rQ = Qcalc + Qnet
因此对于 PQ 节点集合 ℒ = {2,3,4,5}:
准确潮流解应使上述失配接近零;GNN 输出通常不完全满足。参考源节点的 P、Q 不加入残差,因为其供电并非预先指定。模型直接令 V̂₁ = 1 + j0,是硬边界;对 PQ 节点功率平衡使用有限权重的 loss,是软约束。
例题:残差里的正负号
默认倍率 1.2 时,节点 2 消耗 0.096 + j0.036 pu。若某个预测状态产生的网络注入为 −0.090 − j0.030 pu,则 rP,2 = +0.006、rQ,2 = +0.006 pu。它尚未解释给定消耗。取功率尺度 sS = 0.2 pu,这一节点的两个归一化残差均为 0.03;在四个 PQ 节点、八项平均中,该节点贡献 (0.03² + 0.03²)/8 = 0.000225。电流和功率均由同一组预测电压计算,没有额外的隐藏标签。
3. 把物理方程加入 loss
一张图的标签项使用复电压实部、虚部;物理项使用 PQ 功率失配。固定 sV = 0.05 pu、sS = 0.2 pu,避免直接把不同单位和尺度的误差相加。
将有标签的训练图集合记为 𝒟L,全部训练输入 / 配点图集合记为 𝒟C。一个无标签图仍提供线路参数和指定 PQ,所以可以计算物理项,但不能计算监督项。
两项分别按自己的样本数平均。无标签时监督项省略;无标签且 λ = 0 就没有训练信号,不能把随机初始化叫作训练完成。λ 是归一化后两项的权衡,不是满足约束的概率。改变归一化尺度也会改变相同 λ 的意义。
为什么不惩罚所有越限,让模型输出“安全”?
功率平衡等式描述可行的电气状态,其中既有安全状态,也有过载、欠压状态。安全预测必须保留危险工况的真实电压和电流。若对所有输入都加入“必须在限值内”的惩罚,可能会把真正的危险输出推向看似安全,反而破坏任务。
本章 loss 不含电压 / 电流不等式惩罚;限值用于推理后的筛查。在可控的调度优化任务中,可以把发电、负荷削减等控制量作为决策变量,并有条件地处理不等式;那与本章“固定 PQ 下预测实际状态”是不同的问题。
4. 用一个电压扰动看见 loss
下方工作台联动第 8 节安全表中选中的故障,默认退出 2–4。先保持 AC 电压无扰动,物理残差应接近求解容差;再给 Re(V₅) 加 0.01 pu。因为 Ybus 将邻接节点耦合起来,失配会出现在节点 5 及其接通邻居。对照故障后与故障前矩阵的结果,检查拓扑是否用对。
Loss 工作台 · 在固定输出上观察物理项
使用安全表中选中的工况。先选 AC 参考,再把节点 5 的实部扰动到 +0.01 pu,观察失配如何出现在该节点及邻居。扰动只作用于本面板,不改变安全表。
ΔP, ΔQ · pu
按当前拓扑计算
此处用干净 AC 参考演示单工况 Ldata;训练面板另外施加标签掩码与噪声。改变 λ 会立即改变这个固定输出的 loss;重新训练后 θ 才会改变。这里同时显示误用基准 Ybus 的残差,帮助检查 N-1 拓扑是否正确更新。
5. GNN 输出怎样得到物理梯度?
沿用上一章的输入 xᵢ = [Pnet/0.2 pu, Qnet/0.1 pu, ref],每条在运物理线路展开为双向计算弧。本章采用六维隐藏状态、四层同步消息传递;下列矩阵在节点和消息层之间共享,共 146 个可训练参数。
阻抗门控 a 是人工选择的特征变换,不是导纳。空邻居的 mean 取零。读出没有把电压裁剪到安全区间。模型不使用节点编号、画图坐标、AC 标签或参考源的已求解功率作为输入。
上式给出一张图的梯度;训练时再对配点图平均。AC 运算由加、乘、共轭和固定 Ybus 构成,对 u、w 可微。先计算残差对电压的梯度,再穿过读出、tanh、聚合与四层共享计算反向传播。训练时不需要对 Newton 求解器反传;本例用解析导数与完整反向传播,代码可以逐行检查。全部 146 个参数的联合梯度通过中心差分检验;参考潮流另与 pandapower 核对。
6. 控制变量训练与诚实的验证
固定种子生成 8 个训练运行工况组和另外 3 个验证组;每组先确定负荷、光伏、阻抗,再扩展为基准与六种已知退出,共 56 个训练图、21 个验证图。先分运行组,再扩展故障,避免同一个运行点的不同故障跨到训练与验证两边。
运行组范围:负荷倍率 0.6–1.5,节点 5 基准负荷 60–160 kW,光伏 0–100 kW,阻抗倍率 0.8–1.2;均以默认六线路拓扑为基准。默认仅前 2 个训练组有标签,即 14 张图,其余 42 张图只有物理输入。无标签图不求解或存储 AC 电压供训练使用。标签实部与虚部分别叠加 σ = 0.002 pu 的独立高斯噪声;验证使用干净 AC 标签,且不参与梯度。
控制变量实验 · 纯数据与 Physics-informed GNN
两者使用相同初始化、工况组、标签、优化器和轮数,只有物理项权重不同。默认载入由完整 Python 源码生成的课程权重,可立即运行;也可以在浏览器重新训练。
正在加载课程默认权重…
| 验证指标 · raw GNN | 纯数据 | PI-GNN |
|---|
验证电压 MAE(pu)
验证功率残差 RMS(pu)
验证集为另外 3 个运行工况组,共 21 个案例,包含相同的 6 类线路退出;它评估新运行值,不证明全新拓扑的泛化。以上指标始终统计 raw GNN,不包含可选 Newton 校正。误判为安全 = AC 已越限、GNN 却预测未越限。
当前 loss 记录、训练设置与完整模型权重
下载课程默认模型快照默认 400 epochs、Adam 学习率 0.003。固定数据、初始化和优化设置,纯数据组 λ = 0,PI 组 λ = 1。课程快照的验证结果:功率残差 RMS 从纯数据的约 0.04217 pu 降到 PI 的 0.02441 pu;电压幅值 MAE 却从 0.00445 pu 变为 0.00577 pu。物理项在这个实验中改善了方程一致性,但没有改善电压 MAE。 这是带噪标签、有限模型与有限训练下可能出现的权衡。
两组默认都把验证集 3 个 AC 不安全工况误判为安全。总体正确 18/21 看起来不低,但对危险工况的检出率为 0。检查误判比只展示平均 loss 或总体准确率更有教学意义。尝试改变 λ、标签比例、噪声和轮数,记录各指标;不要预设 PI 必然胜出。调参用验证组,最终报告还需要独立测试组,Notebook 提供一个留出组示例。
7. 从状态预测得到 N-1 安全判据
固定训练后的 θ,枚举基准工况和当前每条在运线路单独退出。每次从原基准分别退出一条,故障不累积。 对每个 c,先检查是否仍可连到唯一参考源;然后从预测电压计算:
- 有失供节点,直接由图连接判为不通过;固定 PQ 光伏不承担孤岛电压参考。
- 已供电工况中,任一节点电压或在运线路电流越限即不通过。默认电压带为 0.95–1.05 pu。
- AC 数值求解失败为未知;缺少训练权重时模型结果也为未知。已知失供与数值失败有不同含义。
- 总判据包含基准工况及全部候选:任一不通过则总判据不通过;没有不通过但存在未知则总判据未知;全部满足才显示未越限。模型列是预测,需要 AC 或其他可信分析验证。
一次物理校正是什么?
可选地从 PI-GNN 输出出发,用故障后 Jacobian 做一次带回溯的 Newton 步,再检查安全限值。它使用数值求解器计算,是推理之后的独立步骤;页面会标为“PI + 1 Newton”。训练面板的验证指标始终使用 raw GNN。单步校正不等于收敛证明,低残差也不等于没有越限。
本例只筛查平衡 AC 静态、固定 PQ、无再调度的单线路退出,不评价暂态稳定性、频率、保护配合、设备控制或源容量。三相不平衡扩展可以让 GNN 预测 Vabc(必要时含中性线),再用 不平衡潮流的逐相 / 中性线方程替换残差;正负零序是输出分析工具,不能代替适用的相域物理模型。
8. 微电网 N-1 交互实验
先点“轻载”,再点“高负荷”,比较 AC 与两个模型的判断。默认双路径网每个单故障都保持连接;“观察失供”会回到 1–3 断开的馈线并退出 1–2。改变电流额定值只改变安全边界,不应改变 GNN 电压或功率残差。改变负荷 / 光伏 / 阻抗则改变物理输入。
微电网 N-1 筛查 · 平衡 AC
当前基准工况 + 每条接通线路单独退出| 工况(点击查看) | AC | 纯数据 | PI-GNN | AC min |V| | AC max I/Imax | PI RMS ΔS (pu) |
|---|
总判据包含基准工况和当前全部候选故障。已知失供为“不通过”;AC 数值未收敛为“未知”,不会伪装成零电压或直接判成不安全。模型列是预测判据;低残差本身不保证未越限。
节点电压幅值
支路电流 / 额定值
查看当前工况的电压、角度、线路与安全判据明细
| Bus | AC |V| | Data |V| | PI |V| | AC θ° | PI θ° |
|---|
| Line | status | r / x pu | Imax A | AC I A | PI I A |
|---|
9. 阅读、运行和修改完整 Python
折叠的 model.py 包含从图、AC 残差到全部反向传播和训练的实现。main.py 负责选择输入、调用当前权重、枚举故障并输出结果。默认推理不调用 pandapower;AC 参考由单独的 solve_ac() 计算。Python 面板独立执行,返回值直接用于其图表。
1 · 输入、模型权重与函数来源
case.operating 是物理控件快照,case.models 含当前两个模型的 146 个参数,case.selected_outage 与 case.correct_physics 控制输出展示及独立校正步骤。下面折叠预览省略权重数值;完整数组可在训练面板展开。
2 · 展开 model.py:完整 AC、GNN、loss 与反向传播
仅依赖标准库 math。build_graph() 重建图与 Ybus;predict() 只做 GNN 前向;objective() 计算归一化损失及电压梯度;backward() 将梯度传回全部参数;train_model() 训练。solve_ac() 生成参考,screen() 枚举故障,refine() 是可选的独立 Newton 单步。推理默认不调用 pandapower。
3 · main():预测状态,再计算安全判据
首次运行联网下载 Pyodide,计算在独立 Worker 中完成。默认 Python 实验使用当前权重做推理与参考对照;可在 main 中单独调用 train_model() 重新训练。源码或参数修改只作用于代码实验,可下载保存。
准备运行。
Python 所选工况的电压对照
10. 练习与下载
- 在默认退出 2–4 的 AC 电压上,把 Re(V₅) 增加 0.01 pu,记录 ΔP/ΔQ。哪些接通邻居出现失配?误用基准 Ybus 有什么后果?
- 保持同一预测输出,把 λ 从 0 调到 2;哪些数字立即变化?重新训练后,变化的对象又是什么?
- 标签比例设为 0、λ = 0,然后训练。为什么纯数据组保持未知?λ > 0 时无标签图提供哪些训练信息?
- 用两组默认模型查看高负荷工况,找出一次“误判为安全”。分别比较电压误差、功率残差和越限距离。
- 开启一次 Newton 校正,记录前后的最大功率残差和判断;解释为什么不能把校正后的结果记为 raw GNN 表现。
- 若目标是“未见过的线路故障”或“未见过的网络”,如何重新按故障 / 拓扑划分训练、验证、测试?当前按运行组的划分回答了哪个问题?
- 完整独立 Notebook:含模型源码、从零训练、图示、loss 扰动、N-1 对照、梯度检查与留出测试组;计算仅依赖标准库,绘图用 Matplotlib。
- 完整 Python 模型、课程默认训练快照:快照同时记录训练配置与验证指标。
- MATPOWER:AC Power Flow:节点类型、参考条件和 AC 求解;本章使用矩形电压坐标。
- Raissi 等:Physics-informed Neural Networks:数据与方程残差联合学习的原始工作,背景为 PDE;本章将这一思路用于图网络与 AC 代数方程。
- PyG:Message Passing Networks:消息、聚合、更新的实现约定。本教学模型为可检查全部梯度的标准库实现。