做配电网规划这些年,可靠性评估一直是个绕不开的环节。去年接手一张老旧馈线的改造方案比选,我一开始还是习惯性地用故障模式后果分析法去推,可算到双联络、分段备自投那几段拓扑时,状态空间越铺越大,自己都开始怀疑结果到底可不可信。后来我把整套流程换成基于序贯蒙特卡洛模拟法的时序仿真,用Matlab把一年8760小时里可能发生的故障、隔离、转供、修复过程反复演算上万次,再统计各个可靠性指标,整个思路一下就顺了。
这篇文章想把我在这个项目里从建模到编码、从调参到结果解读的完整过程整理出来,重点讲清楚序贯蒙特卡洛模拟法到底解决了配电网可靠性评估里的哪些问题、Matlab实现时哪些地方最容易翻车,以及最终算出来的SAIFI、SAIDI、ENS这些数字背后该怎么读。适合正在做配电网规划、供电可靠性后评估或相关课题研究的朋友,尤其是手里有一堆可靠性台账但不知道如何转成量化指标的人。
1. 为什么配电网可靠性评估最终选时序模拟,而不只用解析算法
1.1 解析法的边界在哪里
配电网可靠性评估的传统主力是解析法,典型代表就是故障模式后果分析法,把每个元件可能的故障状态列出来,逐个分析对下游负荷的影响,再汇总成指标。这个方法在拓扑简单、开关配置清晰的辐射状馈线上非常好用,人工手算一张典型馈线甚至能直接拿表格推出来。但它有几个天然的软肋:
一是状态空间膨胀。一旦馈线有联络线、分段开关、分支备自投,某个元件故障后下游能不能转移负荷,取决于联络开关位置、对侧馈线容量、分段开关动作逻辑等多重条件,每个条件都是组合分支。三条联络线交叉互备时,故障场景数量会成倍增长,人工枚举的出错率极高。
二是时间维度处理不自然。解析法对“停电多长时间”往往只能按故障修复时间近似,但真实场景里,故障上游用户可能在几分钟内由重合闸恢复,故障段下游用户要等隔离操作完成才能通过联络线转供,再下游的不可转供负荷只能等故障元件修好。这个时间链条在解析法里写起来很别扭,各种转移概率和时间期望缠在一起。
三是分布式电源接入后的时序耦合。光伏、储能接入配电网之后,故障恢复过程中的功率平衡、转供能力都随时间变化,解析法很难把这种时变特征吃进去。
1.2 三种蒙特卡洛方法怎么选:序贯 vs 非序贯 vs 准序贯
蒙特卡洛方法在电力系统可靠性里其实分成好几个流派,很多初学者一上来就混用,后面指标算完都不知道自己算的是哪个定义。
非序贯蒙特卡洛也叫状态抽样法,核心思路是直接按元件的可用率和不可用率抽样,得到整个系统在某个时刻的“快照”,再对这个快照做故障后果分析。它不关心事件在时间轴上的先后顺序,适合评估那些只看停运概率、不看停运持续时间的场合,计算量小,收敛快。缺点也明显:它天然假设各元件状态在抽样时刻互相独立,且系统的时序行为被压缩掉,像“先故障后转供”这种过程无法体现。
序贯蒙特卡洛模拟法则完全按时间轴推进。先给每个元件抽样出下一次故障时刻,取最早发生的故障事件,推演该事件从发生到隔离、修复完成的完整过程,再把时钟推进到下一个事件。仿真对象是连续的运行历史,因此天然能积出停电时户数、缺供电量这些需要时间维度的指标。
准序贯法则介于两者之间,通常对故障状态用状态抽样,对时间相关部分用解析公式近似,在大型输电网里常见,配电网用的没那么多。
我当时的选择很明确:目标指标是SAIFI、SAIDI、CAIDI、ENS这一类需要时间积分的结果,且网架结构里存在多条可通过联络线互备的馈线,时序细节直接影响恢复供电顺序,所以直接用序贯蒙特卡洛模拟法。代码写起来确实比非序贯法繁琐,但换来的是一个可以追溯、可以解释的仿真过程,这在后续和运维人员核对结果时特别有用。
1.3 序贯法真正擅长处理的时序逻辑
序贯法最核心的优势,是它把“时间”当作一等公民。配电网故障恢复过程中,时序逻辑几乎处处存在:断路器跳闸是毫秒级,隔离故障段是人工操作,可能要30分钟到1小时;合联络开关转供又要现场确认对侧带电和容量,又是一个时间窗口;修复故障电缆则需要几小时甚至十几小时。
这些时间叠加起来,直接决定了不同位置用户的停电时长差异。上游用户可能只停几分钟,中间段用户停一两小时,末端用户可能要等修复完成停五六个小时。解析法只能给这些过程设期望值,序贯法则自然地用随机抽样的方式把它们演出来。仿真的次数足够多之后,得到的统计结果既包含了随机波动,又能保持时序逻辑的完整性。我用这个办法处理那张带三条联络线的馈线时,第一次感觉到网络重构动作和停电指标的因果链是能对上的。
2. 可靠性建模的关键细节:状态空间、时序负荷与参数估计
2.1 元件两状态模型与状态持续时间抽样
序贯蒙特卡洛的第一步,是把配电网里的各元件抽象成随机过程模型。最常用的是两状态模型,即每个元件要么处于正常运行状态,要么处于故障修复状态,两个状态之间的转移服从一定的概率分布。
在Matlab实现时,标准做法是为每个元件抽样“运行持续时间TTF(Time To Failure)”和“故障修复时间TTR(Time To Repair)”。工程中最广泛使用的分布是指数分布,因为它是唯一能仅依靠故障率λ和修复率μ就完整构建的连续分布。抽样公式为:
TTF = -log(U) / lambda; TTR = -log(U) / mu;其中U是(0,1)区间均匀分布的随机数,lambda是元件年故障次数,mu是修复率。TTR抽样后还需要做个截断处理,比如限制在0.5到24小时之间,防止极端抽样值把单次仿真带偏。
这里有个容易被忽略的点:故障率λ必须考虑元件所在的环境和长度。架空线通常按“次/公里·年”计,电缆按“次/公里·年”计但数值低一到两个数量级;配变的故障率按“次/台·年”。建模时要把分段线路长度乘到每公里故障率上,得到每个分段元件的等效λ。我在项目里把一张馈线图按分段开关划分为28个分段,每个分段的长度不同、线型不同、故障率也不同,这一步拆分不做好,后面的枚举和转供分析都会失真。
2.2 负荷怎么吃进模型
可靠性指标里有一类非常重要的结果——缺供电量ENS,它的计算必须依赖负荷模型。很多简化案例把每个节点负荷取成恒定最大值,这样算出来的停电损失会被明显高估。
我在Matlab实现里使用8760小时负荷曲线,可以按配变额定容量乘一个时变负载系数。更精细一点的做法是区分工作日、周末和季节性负荷,把全年曲线合成一个8760×N节点的矩阵。仿真时主循环的每个时间步都要找到当前时刻的负荷水平,用来计算故障期间的累计缺供电量。
这样做有个额外的好处:在判断转供能力时,联络线容量校验可以用“当前时刻负荷”而不是“峰值负荷”来校验,很多时候故障发生在夜间低谷期,对侧馈线完全有能力完整转供,这就避免了过于保守的结论。
2.3 参数从哪来:可靠性台账的价值
模型的好坏不取决于算法,而取决于参数。农网和城网、架空裸线和电缆、室内和户外配变,故障率可能相差几倍甚至一个数量级。想拿一套标准参数打天下,结果基本上算不准。
我当时的做法是找运维部门要近三年的设备台账和故障抢修记录,按设备类型统计年平均故障频次,修复时间则按抢修记录里的“故障开始到恢复供电”时间做平均。数据样本不够的元件,再用行业通用推荐值兜底,比如架空线路每公里每年0.08到0.15次配变0.01到0.02次这类常见范围。
会碰到的现实困难是台账记录不规范,比如只记了“接地故障”却没写具体位置,这时只能靠配网GIS系统匹配线段。把参数清洗做完之后,我建议把每个元件的λ和μ做成一个结构体数组存放,一行一个元件,方便后续循环处理。
3. 配电网故障后果分析:故障隔离、网络重构与负荷转移
3.1 从“故障发生”到“时间轴推进”的事件驱动主循环
序贯蒙特卡洛模拟法在Matlab里的主程序本质上是一个事件驱动的时间推进循环。和很多初学者想象的“固定步长按小时递推”不同,事件驱动方式效率高得多,它的逻辑是:
- 初始化系统时间t=0,给所有元件生成第一个TTF。
- 找到TTF最小的那个元件,即下一个将要故障的元件,把时钟推进到该时刻。
- 执行该元件的故障后果分析,包括跳闸、隔离、转供、修复全过程,直到系统恢复到稳定状态。
- 为故障元件重新生成下一轮TTF和TTR,更新其他元件的状态,然后继续寻找下一个最早故障事件。
- 当年仿真时间达到8760小时后,记录一年的统计结果,重置系统状态,进入下一个仿真年。
这段循环用Matlab写出来非常紧凑,核心循环体大概几十行就能跑通:
while t < 8760 [minTTF, idx] = min(status.TTF); t = t + minTTF; status.TTF = status.TTF - minTTF; % 对元件idx执行故障后果分析 faultAnalysis(sys, idx, t); % 为元件idx生成新的运行时间和修复时间 status.TTF(idx) = exprnd(1 / lambda(idx)); status.TTR(idx) = exprnd(1 / mu(idx)); end其中status数组维护每个元件当前状态和剩余时间。这里要特别注意:故障元件的修复时间TTR要在故障后果分析里消耗掉,修复完成后再生成新的TTF,而不是一进入故障就立刻生成。
3.2 故障区间隔离与恢复供电路径判断
故障后果分析是整段代码的灵魂,也是和纯潮流计算、状态估计完全不同的部分。一个元件发生故障后,我按下面这个顺序处理:
第一步,确定上游最近的断路器或保护装置,通常就是馈线出口断路器,故障发生后它跳闸,导致整条馈线或馈线的一部分失压。第二步,搜索故障元件上下游两侧最近的开关(分段开关、联络开关),把它们断开,实现故障隔离。第三步,闭合故障上游原来由于跳闸而打开的断路器,让故障点上游的负荷先恢复供电。第四步,检查故障下游区域能否通过联络开关由相邻馈线转供,能转就转,不能转就保持停电直到故障修复。
这个顺序直接影响各类用户的停电时间统计。要注意的是,Matlab代码里最有效的网络搜索方法是先把配网建模成一个有向图,用邻接矩阵和深度优先搜索来扫描可达性。我建图时把配变、分段开关、联络开关、断路器都作为节点,支路作为边,每条边带上元件索引。故障隔离分析就是反复删边、反复做连通性检测的过程。
3.3 联络线容量与二次转供:算法里要显式校验
有联络线的网络,故障后能否转移负荷,很大程度上取决于对侧馈线的容量冗余。这也是序贯蒙特卡洛和纯拓扑分析的最大区别:不仅看拓扑通不通,还要看负荷带得带不动。
我在每个故障场景里做转供判断时,会先收集对侧馈线当前时刻的总负荷,加上本馈线待转供负荷,与该馈线额定容量比较。如果超载,就要缩减转供范围,只转供容量允许的部分负荷,剩余负荷继续停电等待修复。更复杂的情况是,某段负荷虽然不能转供到联络开关,但可以由更下游的分段开关再次重构到其他馈线,即所谓的二次转供。这种嵌套恢复逻辑在解析法里极难表达,在序贯蒙特卡洛的故障分析函数里只是一个递归搜索而已。
这里给个实用建议:转供优先级,先转移重要用户,再转移一般用户。等级相同的按接近联络开关的顺序转,这样算出来的ENS会略低,也更贴近调度人员实际操作的思路。
4. Matlab实现的核心骨架:主程序、数据结构与统计输出
4.1 用脚本还是Simulink
很多同学看到“Matlab实现”第一反应是搭Simulink模型。我的经验是:配电网可靠性评估这种以离散事件为主的仿真,用脚本写更合适,Simulink适合连续动态系统建模,硬拿来模拟事件队列反而麻烦。Matlab r2023b之后对这类算法项目支持很成熟,基础许可证加统计工具箱就完全够用,不需要额外装Simulink。
数据组织上,强烈建议用结构体数组或者表格存储系统信息,具体包括节点名称、节点类型(母线、配变、开关)、支路连接关系、支路元件类型和长度、故障率、修复时间、额定容量和当前负荷。有了这张表,主循环里的索引操作会变得非常清晰。
4.2 代码结构
我把整个工程拆成了几个层次分明的模块:
data_load.m:读取配网拓扑和参数,构建邻接矩阵和元件状态数组。fault_analysis.m:输入故障元件索引和当前时刻,输出各类停电用户数和缺供电量。main_simulation.m:序贯主循环,逐年年循环并累计指标。compute_indices.m:把累计结果折算成SAIFI、SAIDI、CAIDI、ENS等标准指标。plot_results.m:绘制年指标收敛曲线和各区域停电时间分布。
主循环里,我还会维护一个停电事件记录表,每一行是一次故障,包含故障元件编号、发生时间、影响用户数、各阶段停电时间。这张表对后处理非常有用,可以直接看出哪些元件故障最频繁、哪些故障造成了最长的停电。
% 每个仿真年的统计累加 for y = 1:Nyears simOutcome(y) = simulateOneYear(sys); fprintf('第%g年完成: SAIDI=%.4f h, ENS=%.2f kWh\n', ... y, simOutcome(y).saidi, simOutcome(y).ens); end4.3 指标统计与表格输出
可靠性指标必须严格按定义折算:
- SAIFI(系统平均停电频率指标)= 用户总停电次数 / 用户总数,单位次/户·年。
- SAIDI(系统平均停电持续时间指标)= 用户总停电时间 / 用户总数,单位小时/户·年。
- CAIDI(用户平均停电持续时间指标)= SAIDI / SAIFI,单位小时/次。
- ENS(系统缺供电量)= 各故障期间停供负荷与停供时间乘积之和,单位千瓦时/年。
- ASAI(供电可用率)= (用户总供电小时数) / (用户总数×8760)。
注意,这里“用户”指配变低压侧的用户等效户数,不是配变台数。实际项目中通常把每个配变按其额定容量和典型负载率折算用户数与负荷量。我的项目里一张馈线接了32台配变,折算用户数约4200户,这样算出来的指标才能和供电局口径对上。
5. 收敛性判据与提速方案,模拟几年才够用
5.1 方差系数怎么设
蒙特卡洛仿真的核心问题是:到底要跑多少年?答案不能拍脑袋,要看收敛判据。工程上最常用的是方差系数β,即估计量标准差与均值之比。
Matlab实现时,每跑一定年数就要停下来计算当前累计平均SAIFI,SAIDI和ENS的方差系数。以SAIDI为例:
beta = std(saidis) / (sqrt(Nyears) * mean(saidis));一般要求β小于0.02到0.05才算收敛。配电网元件故障率很低,直接跑一年一年地仿真,SAIDI的方差系数下降非常慢,经常需要几千年的模拟才能达到稳定结果。我实测下来,一张中等规模馈线Simulate 2000年,SAIDI的β能降到0.04左右,但ENS由于受罕见大停电事件影响大,β还在0.1以上晃。
5.2 预枚举故障场景:让每一次仿真都有信息量
为了提高效率,我用了一个比纯时序推进快不少的办法:预枚举故障场景。既然元件故障率极低,绝大多数年份根本不会发生故障,纯时序仿真里大量时间是在“空转”。那干脆把元件故障率映射成期望故障次数,直接枚举可能发生的故障组合,再对这些组合做时序推演。
具体操作是:按各元件的λ占总λ的比例,把一年内的总故障次数拆成多次抽样,每次抽样都能确定“这次故障发生在哪个元件、发生在什么时候”。这样每个仿真年都会发生若干次故障,每次故障都是有效信息,而不是干等。这个方法本质上属于重要抽样思想,只要保证各元件被抽到的概率正比于其故障率,统计结果就不会失真。我用了之后,收敛速度大概提升了三到五倍,2000年的仿真任务压缩到了半小时以内。
5.3 并行化与场景压缩的实测效果
如果网架规模更大,还可以做并行加速。Matlab的parfor可以对仿真年循环并行,每个worker独立跑一段年份,最后汇总统计。我那张馈线规模不大,8核并行提升大约3.5倍。需要留意的是并行计算时的随机数流管理,务必为每个worker单独设置随机种子,否则不同worker如果生成相同随机序列,并行结果反而失真。
另外可以做的优化叫场景压缩:故障后果相似的元件可以聚类处理。比如同一回分支线上的两个配变,故障后影响范围几乎相同,预枚举时就把它们合并成一个“等效故障事件”。这个优化在高密度节点馈线上效果明显,但前期建模工作量会增加,小规模系统不值得做。
6. 实测案例分析:一张典型馈线上算出的数字会说话
6.1 案例范围与参数
我拿一个实际项目里比较有代表性的10kV馈线来说明。这条馈线有38个节点,架空主干线长度约4.2公里,电缆分支约1.8公里,配变32台,分段开关7个,联络开关2条,分别接到相邻两条馈线。架空线平均故障率取0.1次/公里·年,电缆线取0.03次/公里·年,配变取0.015次/台·年,修复时间均值为2.5小时,人工隔离操作时间取0.7小时,联络开关转供操作时间取0.5小时。用户数为4200户,年最大负荷约2.8MW,8760小时负荷曲线按季节典型日合成。
6.2 指标结果解读
仿真5000年后得到:SAIFI约1.42次/户·年,SAIDI约0.95小时/户·年,CAIDI约0.67小时/次,ENS约8.6万千瓦时/年,ASAI约99.989%。这些数字和供电部门公开统计的该区域历史可靠性水平很接近,说明参数取定合理。
读这些数字时要注意:SAIDI小于1小时,说明大部分故障都能在1小时内通过转供恢复,但SAIFI仍有1.4次,说明一年里平均每个用户至少经历一两次停电事件,即便每次很短,用户体感也差。实际运维中真正影响口碑的往往是那些不可转供的长停电。因此,我又额外统计了一个“长时停电次数”,即以停电超过2小时的事件数做统计,这个指标反而更能反映问题。
6.3 一个让我改方案的发现
案例里有个让我印象很深的结论:通过预枚举和停电事件记录表,我发现三分之一的故障集中在一条沿着河边的架空线分段上,该段周围树木生长快,雷雨季节跳闸率明显偏高。但这个分段恰好位于整个馈线的末端,故障后无法转供,每次都要等修复完成,单次停电时间平均超过4小时。
优化方案原本是给这条馈线增加分段开关,以减少故障隔离范围。但仿真数据显示,末端段增加分段开关对SAIDI改善非常有限,真正有效的是把这段线路改成电缆或加强通道清理。最终项目采纳了改电缆方案。这个例子说明可靠性评估的价值不仅在于算指标,更在于通过仿真定位网架薄弱环节,把有限的改造资金花在刀刃上。
7. 四个最容易踩的坑,我替你们先踩过了
7.1 把修复时间抽成正态分布,SAIDI会失真
有的人觉得指数分布随机性太强,修复时间改用正态分布抽样,均值设为2.5小时。问题在于正态分布允许出现负值,不截断的话偶尔会抽到-0.3小时这样的无意义结果,即便截断后,它也无法体现真实抢修时间那种“大多数故障很快,少数故障特别慢”的长尾特征。我用故障抢修记录比对过,实际修复时间分布用指数分布拟合的效果远好于正态分布。建议除非手头有大量统计数据能拟合出更准确的分布,否则老老实实用指数分布加截断。
7.2 负荷曲线用恒定最大值,ENS会明显偏高
如果把所有节点负荷固定为峰值负荷,ENS会系统性高估,幅度可能超过30%。因为大多数故障发生在白天高峰时段的占比没那么高,而夜间低负荷时段的故障对ENS贡献很小。用恒定峰值负荷算出来的结果,停电损失会超出实际,改造方案的经济性评价也会跟着失真。正确做法是用8760小时时序负荷曲线,至少也要区分峰平谷三段负荷。
7.3 开关故障率被忽略,指标会“好看”得不真实
很多教材案例里只考虑线路和变压器的故障率,忽略断路器、隔离开关本身的拒动和误动。实际上开关故障虽然概率低,但一旦发生,往往直接扩大停电范围,把本该隔离的故障扩大到整段母线。忽略开关故障率会显著低估SAIFI,尤其在开关数量很多的环网柜系统里。建议把关键断路器的故障率纳入模型,哪怕取一个很小的保守值,也能让结果更接近实际。
7.4 仿真年数不足,指标抖动让你误判方案优劣
我见过有人只跑200年就去对比改造前后SAIDI,结果方案A比方案B低0.05小时,就下结论说A更优。其实200年样本下SAIDI的置信区间宽达±0.2小时,0.05的差异完全在噪声范围内。做方案对比前,务必先做收敛性分析,确保两个方案的指标差异大于各自的方差范围,否则对比结论没有统计意义。我现在做项目时,会先跑一个基准场景,用β值来倒推需要的仿真年数,再一次性把所有方案并行跑完。
这套方法目前已经成了我做配电网可靠性类项目的默认工具链。从最初的解析法手工推演,到后来用序贯蒙特卡洛模拟法完整复现配电网全年故障与恢复过程,最大的体会是:算法的核心价值不在于算得漂亮,而在于能帮你在杂乱的真实网架里看到问题的位置和量级。手里有Matlab,有网架数据,有可靠性台账,按这套思路去搭,慢慢你也能跑出一份能直接拿去和运维、规划同事对表的结果。