发输电组合系统可靠性评估:LOLP/LOLE/EENS指标与枚举蒙特卡洛实现
简介这份演示文稿聚焦电力系统发输电组合系统的可靠性评估适合电力系统规划、运行及可靠性研究的师生和工程技术人员使用。内容以状态解析法为主线系统讲解了枚举系统状态、判断失效状态、计算失负荷量及更新累计指标等步骤并对维数灾问题作了说明同时给出了事件概率、频率与失电量的计算公式通过算例演示了根据元件故障率、修复时间和容量数据计算电力不足概率、电力不足频率、电量不足期望等指标的过程。包内为单个演示文稿文件大小约2.19MB内嵌多张算例数据表、系统单线图及分步计算过程便于教学、自学或复习。目前已有95人学习对希望掌握状态解析法并应用于发输电组合系统可靠性分析的读者是一份结构清晰的参考资料。1. 发输电组合系统可靠性评估规划课上最难讲清的那页 PPT第一次做电力系统规划与可靠性方向的人多半都会和「发输电组合系统可靠性评估」这类 PPT 打交道图上画着若干台发电机、几条输电线路和几个负荷节点看起来只是把单线图换了个配色但真正动手算的时候才发现一台机组跳闸、一条线路过负荷到底会不会导致负荷丢失不是一个 N-1 校验能说清的事。8 机规模的发输电组合系统恰好是能讲明白这件事的最小算例——机组数、线路数和负荷节点不多不少既可以用状态枚举把所有工况列完也能拿蒙特卡洛抽样验证一遍。做电源规划、网架方案比选或可靠性专责的人都可以用它把 LOLP、LOLE、EENS 这几个指标从 PPT 上的定义变成能复现的评估程序。2. 先立住三个指标LOLP、LOLE、EENS 和 8 机系统的评估边界可靠性评估的第一步不是写程序而是想清楚要回答什么问题。规划口的人常问这个网架一年里有百分之多少的时间可能带不住负荷折算成年小时数是多少真正切负荷时一年少供了多少电对应到指标就是 LOLP、LOLE 和 EENS。这三个词在 PPT 上可能只是一行定义但在实际方案比选里它们各自指向完全不同的决策目标。2.1 三个指标各回答一个问题概率、小时数还是电量缺口LOLPLoss of Load Probability是一个概率值表示在考察的时段里系统处于失负荷状态的概率。比如 LOLP 等于 0.001意思是在 8760 小时里大约有 0.1% 的时间存在切负荷风险。LOLELoss of Load Expectation把概率换算成期望小时数常用单位是小时/年或天/年比如 LOLE 为 8.76 小时/年就说明平均每年有不到 9 小时可能需要切负荷。EENSExpected Energy Not Supplied是电量单位常用 MWh/年表示一年里期望少供多少电这个指标可以直接和停电损失费用相乘用于经济性评估。三个指标的取舍不是随意的。如果你只关心系统是否满足充裕性标准LOLE 够用如果你要算停电损失EENS 才是核心如果只是风险概率汇报LOLP 最直观。实际评估中一般三个都算因为 LOLP 和 LOLE 本质上由同一个失负荷概率换算而来EENS 则额外计及了切负荷量的大小。比如同样失负荷 1 小时切 50 MW 和切 500 MWEENS 差别很大但 LOLP 和 LOLE 完全一样这就是为什么不能只看一个指标。在数学形式上设系统状态为 s状态概率为 P(s)失负荷量为 ΔP(s)失负荷指示变量为 I(s)考察周期 T 取 8760 小时则LOLP Σ P(s) × I(s)LOLE LOLP × TEENS Σ P(s) × ΔP(s) × T指标单位回答的问题规划用途LOLP无单位失负荷可能性多大风险上限控制LOLEh/a 或 d/a年失负荷多少小时充裕性标准EENSMWh/a年缺供多少电量停电损失、方案比较2.2 发输电组合系统和发电系统可靠性差在哪8 机系统为什么适合讲网络约束单纯发电系统可靠性只回答一个问题总装机容量减去强迫停运后的可用容量是不是大于负荷。它假设发出来的电都能送到负荷终端这在分析电源规划时成立但用在电网规划上会出大问题。发输电组合系统可靠性评估在发电系统基础上叠加了输电网络约束发电机可用、但线路过载或断开照样可能造成负荷丢失。这类评估对应的英文叫 composite generation and transmission system reliability assessment也就是标题里的“发输电组合系统”。8 机系统在这个问题上的价值在于规模小但又不失网络特征。我一般用一个典型的教学算例来说明8 台发电机分成两组前 6 台接在母线 A后 2 台接在母线 B母线 A 与母线 B 之间有两回输电线路每回容量 150 MW母线 A 负荷 150 MW母线 B 负荷 500 MW。这样系统就具备了两个关键约束母线 B 的本地发电能力和 A-B 输电通道的送电能力。如果把评估程序写对了可以发现有些状态明明总装机足够但因为线路故障导致母线 B 失负荷这就是发输电组合系统评估和发电可靠性评估最本质的区别。构建这样的评估模型需要四类参数。第一类是发电机参数包含额定容量和强迫停运率 FOR第二类是线路参数包含传输容量和停运概率第三类是负荷参数包含各节点负荷数值和年负荷曲线第四类是拓扑参数也就是发电机、线路和负荷之间的连接关系。PPT 里的单线图最终都要转换成这样一张设备参数表设备参数单位说明发电机额定容量MW最大出力发电机FOR无单位长期停运概率线路传输容量MW单回线最大输送能力线路停运概率无单位可用于状态枚举负荷节点负荷MW按典型日/季节分层FOR 是发输电可靠性评估里最容易用错的参数。它的定义是设备处于停运状态的时间占总时间的比例数学上等于 λ / (λ μ)其中 λ 是故障率μ 是修复率。FOR 不是故障率本身而是一个长期平均概率。在枚举法中它是状态概率的乘法因子在蒙特卡洛抽样中它是判定设备是否停运的阈值。2.3 状态空间的分水岭什么时候枚举什么时候改抽样评估一个发输电组合系统最朴素的想法是把所有可能的运行状态全部列出来逐个判断是否失负荷。状态总数等于 2 的元件数次方元件包括发电机和线路。以 8 机 2 线系统为例总状态数是 2 的 10 次方也就是 1024 个每一个状态都能在毫秒级完成失负荷判断全枚举只需要几秒。如果系统扩大到 20 台发电机加 20 条线路状态数变成 2 的 40 次方约 1 万亿个状态枚举法就彻底不可行了。工程里的分水岭大致可以这样把握元件总数在 20 到 25 个以内枚举法可行超过这个规模优先选择蒙特卡洛随机抽样。枚举法和抽样法还有个重要区别枚举法给出的是精确数学期望没有抽样误差可以作为验证基准抽样法给出的是统计估计值需要通过方差系数判断收敛情况。后面第 3 章先讲枚举法在 8 机系统上的完整实现第 4 章再讲蒙特卡洛抽样和收敛控制两者互相印证是可靠性评估程序调试里最实用的做法。3. 用状态枚举跑通 8 机系统状态空间、简化潮流与指标累加状态枚举法的核心就三步生成所有状态向量计算每个状态的概率判断每个状态下是否失负荷并累加指标。8 机 2 线系统一共 1024 个状态直接穷举没有任何性能压力。下面用一个可以直接复现的 Python 示例把这三步串起来。3.1 枚举状态向量与状态概率一段代码看完所有系统状态import itertools # 8 台发电机的 FOR前 6 台接母线 A后 2 台接母线 B gen_for [0.02, 0.02, 0.03, 0.03, 0.05, 0.05, 0.08, 0.08] n_gen len(gen_for) # 2 回 A-B 联络线的停运概率 line_for [0.01, 0.01] n_line len(line_for) n_total n_gen n_line # 枚举全部状态bits[i]1 表示运行0 表示停运 for bits in itertools.product([0, 1], repeatn_total): prob 1.0 for i in range(n_gen): prob * (1 - gen_for[i]) if bits[i] 1 else gen_for[i] for j in range(n_line): prob * (1 - line_for[j]) if bits[n_gen j] 1 else line_for[j] # 到这里已经得到状态向量 bits 及其概率 prob # 下一步是判断该状态是否失负荷这段代码的逻辑很直接itertools.product([0, 1], repeat10)会生成 1024 个长度为 10 的元组前 8 位对应当前状态下 8 台发电机是否运行后 2 位对应两回线路是否运行。每个设备独立考虑状态概率就是 10 个概率因子相乘。这里要注意的是 FOR 是停运概率所以当 bits[i] 等于 0 时乘 FOR等于 1 时乘 1 减 FOR。很多人在这一步会把乘数写反导致概率全部错误后面所有指标跟着翻车。3.2 判断是否失负荷用母线平衡加通道容量校核替代复杂潮流实际问题里判断一个状态是否失负荷需要求直流潮流甚至交流潮流再按最小切负荷模型确定切负荷量。8 机教学系统里可以先用更直观的简化判断母线 A 的多余发电能力由联络线送往母线 B如果母线 B 的本地发电加上能送到 B 的功率仍然小于负荷就存在失负荷。代码如下# 8 台发电机容量顺序与 gen_for 对应 gen_cap [100, 100, 120, 80, 100, 100, 100, 100] # 发电机所属母线 gen_bus [A] * 6 [B] * 2 # 两回联络线容量 line_cap [150, 150] load_a 150.0 load_b 500.0 def check_loss(bits): cap_a sum(gen_cap[i] for i in range(n_gen) if gen_bus[i] A and bits[i] 1) cap_b sum(gen_cap[i] for i in range(n_gen) if gen_bus[i] B and bits[i] 1) line_avail sum(line_cap[j] for j in range(n_line) if bits[n_gen j] 1) # 母线 A 自身负荷扣掉后剩余可送功率 excess_a max(cap_a - load_a, 0.0) # 实际可送到 B 的功率受线路容量限制 transfer min(excess_a, line_avail) deficit_b load_b - (cap_b transfer) if deficit_b 0: return deficit_b return 0.0这个函数返回的就是该状态下的切负荷量单位是 MW。逻辑上先算母线 A 的剩余电力再看剩余电力能不能通过可用联络线送到母线 B最后用母线 B 的本地发电加外来受电对比负荷。实际的发输电组合系统比这个复杂节点多、环路多必须建立节点导纳矩阵并求解直流潮流再对切负荷量做线性规划优化。但教学场景下用这种简化校核完全可以讲清楚“网络约束导致失负荷”的核心概念而且它和完整直流潮流法在结论趋势上一致。3.3 指标累加把 1024 个状态的概率和切负荷量汇总有了状态概率和每个状态的切负荷量三个指标就能累加出来。枚举法的优势在于它走遍了全部状态不需要考虑抽样误差。lolp 0.0 eens 0.0 hours_per_year 8760.0 for bits in itertools.product([0, 1], repeatn_total): prob 1.0 for i in range(n_gen): prob * (1 - gen_for[i]) if bits[i] 1 else gen_for[i] for j in range(n_line): prob * (1 - line_for[j]) if bits[n_gen j] 1 else line_for[j] loss_mw check_loss(bits) if loss_mw 0: lolp prob eens prob * loss_mw * hours_per_year lole lolp * hours_per_year print(fLOLP {lolp:.6f}) print(fLOLE {lole:.2f} h/a) print(fEENS {eens:.2f} MWh/a)这段代码把状态概率和失负荷判断组合在了一起。LOLE 等于 LOLP 乘以 8760本质上是把长期平均概率折算成年期望小时数。EENS 乘以 8760 则是把期望缺供功率折算成期望缺供电量。枚举法算出的这三个数值是确定性的同一个模型任何人跑都会得到完全相同的结论。这也是为什么我建议先做枚举法后做蒙特卡洛——枚举法得到的 LOLP 和 EENS 是判断抽样程序有没有写错的基准答案。4. 从 1024 个状态到随机抽样非序贯蒙特卡洛与收敛控制状态枚举法在 8 机系统上表现完美但工程系统动辄几十台机组、上百条线路枚举法只能停在教科书里。蒙特卡洛抽样不枚举全部状态而是按设备停运概率随机生成大量系统状态再用统计平均估计可靠性指标。这章用同一个 8 机模型实现非序贯蒙特卡洛并说清楚抽样规模和收敛判据怎么设。4.1 枚举法已经够准为什么还要再走一遍蒙特卡洛两个原因。第一现实系统的状态空间太大枚举法的时间复杂度是 O(2^N)N 是元件数当 N 达到 50 时状态数超过 10 的 15 次方即使每秒算一万个状态也要算几万年。抽样法每多抽一个样本只增加一次潮流计算计算量随样本数线性增长和系统规模不直接挂钩。第二可靠性评估本质上是求小概率事件的期望值大多数系统状态是正常运行状态真正失负荷的样本占少数。蒙特卡洛通过大量随机试验自然覆盖到高概率区域再通过方差系数判断样本量是否足够。当然随机抽样也有代价结果带有随机波动两次运行不会完全一致必须通过收敛判据控制误差。8 机系统在这里正好起到“试验场”作用把抽样结果和枚举结果对比能直观看出抽样法到底准不准。4.2 非序贯蒙特卡洛的最小实现50000 次抽样加一次失负荷判断非序贯蒙特卡洛的含义是不考虑时间先后顺序每次抽样都认为系统处于一个独立的稳态没有状态转移过程。抽样时对每个设备生成一个随机数随机数大于 FOR 判定为运行否则判定为停运。以下代码完整实现了抽样估计过程。import random random.seed(42) N 50000 sample_lolp 0 sample_eens 0.0 for _ in range(N): bits [] for f in gen_for: bits.append(1 if random.random() f else 0) for f in line_for: bits.append(1 if random.random() f else 0) loss_mw check_loss(bits) if loss_mw 0: sample_lolp 1 sample_eens loss_mw mc_lolp sample_lolp / N mc_eens sample_eens / N * 8760 mc_lole mc_lolp * 8760 print(fMC LOLP {mc_lolp:.6f}) print(fMC LOLE {mc_lole:.2f} h/a) print(fMC EENS {mc_eens:.2f} MWh/a)随机种子固定为 42保证程序可复现。对 8 台发电机和 2 回线路每次抽样只生成 10 个随机数调用一次check_loss五万次抽样在普通笔记本上也就是一两秒的事。random.random() f这个写法隐含了一个约定随机数落在 0 到 f 之间表示设备停运落在 f 到 1 之间表示设备运行。FOR 越大停运概率越大抽样中出现停运状态的频率也越高。非序贯蒙特卡洛的一个局限是得不到停电频率和停电持续时间因为这两个指标依赖状态之间的时间转移关系。如果 PPT 内容涉及频率和持续时间就不能用这种简单抽样而要改用序贯蒙特卡洛按状态持续时间抽样模拟一整年时序。8 机系统讲清非序贯法的原理完全够用。4.3 收敛判据与抽样规模别再只写 N10000看方差系数五万次抽样够不够不是拍脑袋说了算要看方差系数。如果把 N 次抽样分成 K 批每批独立计算 LOLP 估计值就能得到这批结果的样本标准差 s进而计算方差系数 β s / (mean × sqrt(K))。工程经验一般要求 β 小于 0.05严格场合要求小于 0.01。β 越小说明不同批次之间的结果越接近抽样越收敛。抽样次数示意方差系数 β结论10000.25 左右明显不收敛100000.10 左右可用于初步估算500000.05 左右常规规划评估够用2000000.02 左右经济性比较推荐这张表只是示意具体数值和系统失负荷概率大小有关。失负荷概率越低方差越大需要的抽样次数越多。如果系统 LOLP 在 10 的负 4 次方量级常规五万次抽样可能一个失负荷样本都碰不到这时候需要采用重要抽样或分层抽样等方差削减技术。判断程序是否收敛最可靠的办法还是和枚举结果对比8 机系统枚举 LOLP 是精确值蒙特卡洛估计值落在枚举值附近说明抽样程序和收敛逻辑都正确偏离太远要么是抽样次数不够要么是失负荷判断函数出了问题。5. 可靠性评估避坑指南8 机系统算不对的 5 个真实原因评估程序能不能出正确结果很多时候不取决于算法高级不高级而取决于几个小细节。下面这 5 个坑是我在实际调试和方案审查里经常碰到的每个都按现象、原因、解决三步说清楚。5.1 FOR 用反把 0.02 当运行概率状态概率全错现象枚举法算出的 LOLP 比蒙特卡洛结果大很多或者某个元件 FOR 改大后可靠性反而变好。原因把 FOR 直接当成设备运行概率去乘状态概率而不是停运概率。解决统一约定 bits 中 0 代表停运、1 代表运行停运概率用 FOR运行概率用 1 减 FOR逐个元件乘进去。调试时可以单独打印一个全停运状态的概率比如把所有 FOR 相乘如果数值对不上说明乘法方向写反了。5.2 只枚举发电机不枚举线路线路故障成了黑匣子现象计算结果显示所有失负荷都由发电容量不足引起线路无论怎么改容量LOLP 都不变。原因状态向量里只放了 8 台发电机两回联络线被当成永远可用。解决把线路也纳入状态枚举状态向量长度从 8 变成 10。典型的发输电组合系统评估必须同时考虑发电机和线路故障否则就是纯发电系统可靠性网络约束完全失效。5.3 用峰荷顶全年的负荷EENS 高得离谱现象EENS 数值很大把停电损失费用一乘任何规划方案都通不过经济性审查。原因评估时全年 8760 小时全部用节点峰荷比如母线 B 一直按 500 MW 计算但实际系统一年里只有很少时间运行在峰荷。解决把年负荷曲线分成峰荷、腰荷、谷荷三段每段对应不同持续时间。8 机系统可以只取三档负荷比如峰荷 500 MW 持续 1000 小时腰荷 350 MW 持续 4000 小时谷荷 200 MW 持续 3760 小时分别计算后按时间加权汇总。这样 EENS 才会回到合理量级。5.4 抽样收敛只看次数不看种子和方差同一个程序每次结果不一样现象同一个模型第一次跑 LOLP 是 0.005第二次跑变成 0.006代码没改结果变了。原因蒙特卡洛本身有随机性抽样次数不够时波动很大而且没有固定随机种子。解决程序里显式设置random.seed(42)这一类的固定种子确保可复现同时按第 4.3 节的方差系数判断收敛而不是死板地把 N 固定成 1 万或 5 万。如果每次结果都随随机种子大幅波动就加大抽样次数。5.5 把 N-1 校验当可靠性评估确定性判据和概率指标混用现象PPT 里说系统满足 N-1 准则所以可靠性没有问题但 EENS 算出来仍然不为零。原因N-1 校验是确定性安全准则只检验单一元件故障下系统是否安全不计算故障发生的概率也不计及多重故障。可靠性评估则要遍历所有可能故障组合及其概率两者用途完全不同。解决明确规划论证中 N-1 用来定网架结构可靠性指标用来定经济性风险。如果某条线路 N-1 通过但 FOR 很高仍会对可靠性指标产生明显影响。8 机系统里可以人为把一台 FOR 为 0.08 的发电机改成 0.02看 EENS 变化这样就能直观理解概率权重的作用。6. 给 PPT 加一张灵敏度曲线枚举法交叉验证与单因子扫描程序写到这里最后一件值得做的事情是把结果变成能说服人的图表。8 机系统最推荐的验证方式是把枚举法和蒙特卡洛结果放在同一张表里先确认两套程序一致再对关键参数做单因子扫描画出一条 EENS 随 FOR 变化的曲线。这类图在规划汇报里比大段文字有说服力得多。验证分三步。第一步跑枚举法得到精确的 LOLP、LOLE、EENS。第二步跑蒙特卡洛抽样 5 万次检查结果落在枚举值附近误差控制在 5% 以内。第三步做极限条件测试把所有 FOR 设为 0LOLP 必须为 0把负荷设为 0LOLP 必须为 0把某回线路容量改为 0EENS 必须增大。这三条过了程序逻辑基本可信。单因子扫描的代码很短核心思想是只改变一个参数其余保持不动观察指标的敏感程度import numpy as np forc_values np.linspace(0.01, 0.10, 10) eens_sensitivity [] for f_val in forc_values: gen_for[0] f_val # 只动第一台发电机 # 重新调用第 3 章枚举或第 4 章抽样函数 this_eens run_evaluation() eens_sensitivity.append(this_eens)扫描结果最好画成柱状图或者折线图横轴是 FOR纵轴是 EENS。你会看到某些机组对 EENS 特别敏感FOR 从 0.01 提到 0.05EENS 可能翻倍另一些机组怎么调影响都很小。这其实就是规划方案里“先改造哪台机组、优先加强哪条线路”的量化依据。如果把每台机组扫描得到的 EENS 变化量排序做成瀑布图直接可以回答 PPT 评审时最常被问的那句这个方案投下去可靠性到底提升了多少。我早期做这类评估时习惯把全年负荷固定在峰荷EENS 算出来大得惊人结果领导拿着数问我是不是评估模型有问题。后来改成多级负荷曲线再配合单因子灵敏度分析整套材料才真正经得起追问。希望这个做法对你也有帮助。本文还有配套的精品资源点击获取