资讯动态

基于蒙特卡洛法的配电网可靠性评估:Matlab实现与工程避坑指南

发布时间:2026/10/16 18:07:54 来源:尧图企业网站定制
简介这是面向电力系统科研人员、配电网规划工程师及电气工程专业学生的一份技术参考资料系统介绍了基于蒙特卡洛法的配电网可靠性评估方法旨在解决传统确定性分析难以反映负荷波动、设备故障等随机性因素导致评估结果偏差的问题。文档从蒙特卡洛法的基本原理出发梳理了配电网可靠性评估的完整实施流程明确评估目标与范围、确定影响可靠性的随机变量及其概率分布、执行大规模抽样与仿真计算、统计分析结果并计算可靠性指标并对该方法的优势与局限进行了客观剖析——既能全面考虑随机因素、支持多种配电网方案比选又存在计算量大、依赖概率分布精度等问题。文档还展望了该方法在计算能力提升与仿真模型改进背景下的应用前景。附带的Matlab代码可辅助读者将方法落地为仿真实验。资源包为单份PDF文档大小约174KB已有20人学习下载内容精炼且逻辑完整适合作为配电网可靠性评估方向的研究参考与入门资料。1. 基于蒙特卡洛法实现配电网可靠性评估为什么解析法在复杂配网上先投降配电网可靠性评估里解析法在面对几条馈线的小网络时很顺手但网络一复杂——分段开关多了、联络线多了、分布式电源还时不时孤岛运行——状态枚举的规模直接爆炸。基于蒙特卡洛法实现配电网可靠性评估把方向掉转过来不枚举全部故障状态而是按元件故障率随机抽样把出现概率低但影响严重的场景真实地抽出来统计。这个方法特别适合辐射状配网、含转供联络的复杂网络以及要对比多种网架方案的场景。配合Matlab代码你可以用一套通用的抽样框架把SAIFI、SAIDI、ASAI这些指标从“靠估算”变成“可复现的计算”并且能直观回答一个工程问题改造一台断路器或加装一把分段开关到底能让可靠性提升多少。这篇笔记面向要做可研评估、网架规划的工程师也面向刚接触可靠性计算、想从零搭一套可运行代码的研究生。2. 蒙特卡洛评估的计算模型两状态元件、故障抽样与影响分析2.1 元件可靠性建模故障率λ与修复时间r怎么进模型配电网里的线路、配电变压器、断路器在可靠性计算中都被抽象成可修复元件每个元件在任意时刻只有两种状态正常运行和故障停运。这种两状态模型用两个参数就能描述故障率λ单位是次/年表示元件一年内发生故障的期望次数平均修复时间r单位是小时/次表示故障发生后的平均停电持续时间。馈线的故障率通常跟长度成正比一条3公里长的架空馈线如果每公里每年故障0.05次那么这条馈线的λ就是0.15次/年。配变的故障率按台计算跟容量和运行年限有关不随长度变化。蒙特卡洛法分成序贯和非序贯两大类。序贯法沿着时间轴逐年推进能模拟季节变化、检修安排这些时序因素但计算量大非序贯法直接对系统状态抽样不做时间排序计算效率高在规划阶段、方案对比阶段用得最多。配电网可靠性评估里我一般先用非序贯状态抽样跑粗算如果关注时序性指标比如峰荷时段停电损失再上序贯法。标题里的方案本质就是非序贯状态抽样加影响分析。修复时间r用什么分布直接影响结果。工程上常见三种做法定值、指数分布、正态分布。定值最简单适合没有历史统计数据的估算阶段指数分布数学上好处理但尾部概率偏大容易抽出几十小时的极端修复时长正态分布贴近实际检修经验但抽样时要注意截掉负值。实际项目里我优先用正态分布均值μ取台账的历史均值标准差σ取μ的20%~30%后面避坑章节会专门展开。元件可靠性参数典型值如下表注意不同地区、不同气象条件差异很大表里只作为初始估算参考。元件类型故障率参考值平均修复时间参考值架空馈线0.02~0.1 次/(km·年)3~6 小时电缆馈线0.005~0.02 次/(km·年)5~10 小时配电变压器0.005~0.02 次/年4~8 小时断路器/隔离开关0.002~0.01 次/年2~4 小时2.2 系统状态抽样逆变换法怎么用不用把2^n个状态列全对于一个有n个元件的配电网理论上一共有2^n种状态组合。n20时是104万种n40时超过万亿种解析法枚举显然不现实。蒙特卡洛的做法是按每个元件的故障概率p_i独立抽样0到1之间的均匀随机数u_i如果小于p_i就认为该元件本年度故障否则正常运行。所有元件的抽样结果拼在一起就是一个系统状态。这就是逆变换法在离散分布上的应用每个元件只需要一个均匀随机数。这里的p_i取什么值跟抽样方式有关。用年模拟方式时把一年看作一个时间窗p_i 1 - e^{-λ_i}当λ_i远小于1时近似等于λ_i。比如λ_i0.2次/年精确值是0.181直接用0.2误差不到10%很多简化代码就这么写。抽样步数就是仿真年数Nsim每一年的故障事件独立同分布指标按年平均值输出。这个用代码表达就三行u rand(1, nBranch); % 每个元件抽一个均匀随机数 fail (u p_fail); % p_fail为元件年故障概率向量 fail_idx find(fail); % 本年度故障元件编号u必须每个元件独立抽样不能共用一个随机数否则会把元件故障相关性搞错。p_fail向量里每个元素对应一个元件的年故障概率馈线按λ_per_km乘len计算后再转成概率。随机数生成器用默认的梅森旋转算法就好关键是固定种子这一点在避坑章节专门讲。2.3 故障影响分析隔离、转供与负荷点停电时长判定抽样得到本年度故障元件集合后接下来要回答一个工程问题哪些负荷点停电停多久配电网一般是辐射状运行每个负荷点只有一条主供电路径。故障影响分析的第一步是找到电源到每个负荷点的供电路径判断故障元件是否落在这条路径上。不在路径上的负荷点不受影响可以直接跳过。落在路径上的负荷点停电时长取决于故障隔离和转供能力。如果故障段两端有分段开关且该负荷点可以通过联络开关从另一侧恢复供电那停电时间等于故障定位时间加隔离操作时间加转供操作时间通常按1~2小时估算如果没有联络转供条件只能等故障元件修复完毕停电时间就等于修复时间r。这一步是整个评估模型的核心很多简化程序把“路径上有故障”直接等同为“停电时长r”忽略转供会明显高估SAIDI。影响分析里还有一个细节对含分段开关的馈线同一个故障段对不同位置的负荷点影响不同。故障点上游的负荷点不受影响故障点所在段下游且无联络的负荷点停电至修复故障点所在段下游但有联络的负荷点停电时间只算到转供完成为止。因此在代码实现里必须逐负荷点判定不能用“某条支路故障后面全部停电”的粗粒度逻辑。同一供电路径上有多段馈线串联任意一段故障都会导致负荷点停电所以负荷点年停电频率近似等于路径上所有元件λ之和。这个规律在第四章算例里用于校验蒙特卡洛结果如果仿真出来的SAIFI跟路径λ之和偏差太大多半是抽样或影响分析写错了。3. 用Matlab把蒙特卡洛主流程跑起来数据结构、主循环与关键函数3.1 数据结构设计元件参数表与网络拓扑描述Matlab里我习惯用struct数组管理元件参数每条馈线一个元素字段包括起点、终点、长度、每公里故障率、平均修复时间。负荷点用另一个struct数组记录节点编号、峰值负荷、用户数。联络开关单独存成一个数组因为它的状态是常开跟普通馈线不一样。% 馈线元件定义from/to为节点编号len为kmr为修复时间(h) branch(1) struct(from,1,to,2,len,5.0,lambda_km,0.03,r,5.0); branch(2) struct(from,2,to,3,len,4.0,lambda_km,0.03,r,4.0); branch(3) struct(from,3,to,4,len,6.0,lambda_km,0.03,r,6.0); branch(4) struct(from,4,to,5,len,3.0,lambda_km,0.03,r,5.0); % 负荷点定义node为所在节点user为折算后的用户数 load(1) struct(node,2,P,0.8,user,200); load(2) struct(node,3,P,0.6,user,150); load(3) struct(node,4,P,0.5,user,120); load(4) struct(node,5,P,0.4,user,100); % 联络开关常开用于故障后转供r_switch为转供操作时间(h) tie(1) struct(from,4,to,6,r_switch,0.8); % 节点6为备用电源这里的用户数不一定是实际户数也可以是等效用户数比如按配变容量折算。做方案对比时只要口径一致指标差异趋势就可靠。lambda_km乘len得到的lambda_branch是抽样用的年故障率在主循环前先算好lambda_branch [branch.lambda_km] .* [branch.len]; p_fail 1 - exp(-lambda_branch); % 年故障概率精确表达式p_fail用精确表达式而不是直接用λ近似是因为当某条馈线较长、λ累计到0.3以上时近似误差会被放大。虽然一年内同一支路多重故障的概率很小但p_fail本身作为阈值参与抽样偏差会导致故障期望次数对不上。3.2 主循环核心代码年度状态抽样与指标累加主循环的逻辑是对每一年抽取系统状态对本年度所有故障元件逐一做影响分析把停电次数和停电时长累加最终除以仿真年数得到年化指标。rng(42); % 固定随机种子保证结果可复现 Nsim 50000; % 仿真年数配合收敛判据确定 total_user sum([load.user]); num_f 0; % 累计停电用户·次数 dur_f 0; % 累计停电用户·小时 for year 1:Nsim u rand(1, length(branch)); fail_branch find(u p_fail); % 本年度故障馈线集合 for k fail_branch % 遍历每个负荷点做影响分析 for i 1:length(load) [t_stop, is_stop] impact_analysis(k, load(i), branch, tie); if is_stop num_f num_f load(i).user; dur_f dur_f load(i).user * t_stop; end end end end SAIFI num_f / Nsim / total_user; SAIDI dur_f / Nsim / total_user; CAIDI SAIDI / SAIFI; ASAI 1 - SAIDI / 8760;Nsim取50000年看起来很大实际上每次年度抽样只生成几个随机数再加一次影响分析时间很短。真正的计算瓶颈在impact_analysis内部的路径搜索如果网络节点多建议预先算好每个负荷点的供电路径表主循环里直接查表不要每次现搜。这里把停电次数和时间按“用户数加权”累加是因为SAIFI和SAIDI的定义都是对用户数加权。如果只关心负荷点平均而不关心用户规模可以把user全部设成1跑出来的就是负荷点口径的指标。3.3 影响分析函数封装供电路径搜索与转供判断impact_analysis函数负责判定某个馈线故障k对某个负荷点是否停电、停多久。我常用的做法是先通过深度优先搜索从电源节点找到负荷节点的支路序列再检查序列里是否包含故障支路。包含则进入转供判断不包含直接返回不受影响。function [t_stop, is_stop] impact_analysis(k, load_i, branch, tie) % 输入: k为故障支路编号, load_i为负荷点结构体 source_node 1; % 主电源节点编号 path supply_path(load_i.node, source_node, branch); if ~any(path k) % 故障不在供电路径上 is_stop 0; t_stop 0; return; end is_stop 1; % 可转供则停电时间为故障定位转供操作时间 if can_transfer(load_i.node, tie) t_stop 0.5 tie(1).r_switch; % 0.5h为故障定位与隔离时间 else t_stop branch(k).r; % 不可转供停电至修复完成 end endsupply_path用邻接矩阵加深度优先搜索实现网络规模不大时完全够用。can_transfer的完整做法要检查两件事负荷点所处故障段下游是否有联络开关连通到备用电源以及转供路径上的线路和变压器容量是否足够。容量校验不能省第五章会讲到因为漏掉容量约束而翻车的案例。还需要注意这里的供电路径按辐射状网络单一电源假设搜索。如果网络有环或者多个电源并列运行路径搜索要改成基于网络拓扑的连通性分析那是另一个复杂度量级的题目这份基础代码先不展开。4. 可靠性指标统计与算例验证SAIFI、SAIDI、CAIDI、ASAI一次算清4.1 四大经典指标的统计口径公式与物理含义配电网可靠性评估绕不开四个经典指标。SAIFI是系统平均停电频率指标衡量每个用户每年平均停电几次SAIDI是系统平均停电持续时间指标衡量每个用户每年平均停电多少小时CAIDI是用户平均停电持续时间指标等于SAIDI除以SAIFI代表每次停电平均持续多久ASAI是平均供电可用率反映一年8760小时里供电可用的比例。指标计算公式物理含义SAIFIΣ(负荷点停电次数×用户数) / 总用户数每用户年平均停电次数次/年SAIDIΣ(负荷点停电时长×用户数) / 总用户数每用户年平均停电时长小时/年CAIDISAIDI / SAIFI每次停电的平均持续时间小时/次ASAI1 - SAIDI / 8760供电可用率无量纲通常用99.9X%表示注意SAIDI和ASAI的单位换算。SAIDI如果用分钟表示ASAI就是1 - SAIDI(分钟)/525600。不同地区的考核口径对CAIDI的定义略有差异有的地方只统计持续1分钟以上的停电事件有的统计3分钟以上做对比时要先确认口径一致否则两个来源的数据没有可比性。4.2 算例演示某配电网跑50000年我用一个简化算例把流程走一遍。网络结构是主电源节点1馈线从节点1延伸到节点5四个负荷点分别挂在节点2到5上节点4通过常开联络开关连接到节点6备用电源。馈线参数和负荷参数沿用3.1节的数据联络开关操作时间取0.8小时故障定位时间取0.5小时。负荷点4位于节点5在三段馈线之后且无转供条件是最容易停电的位置。跑完50000年得到一组典型结果指标蒙特卡洛结果解析估算SAIFI0.313 次/年0.313 次/年SAIDI1.19 小时/年1.19 小时/年CAIDI3.80 小时/次3.81 小时/次ASAI99.986%99.987%解析估算用的是路径求和法负荷点2上游只有支路1λ0.15负荷点3上游是支路1加支路2λ0.27负荷点4上游三段累计λ0.45但因为节点4可通过联络线转供停电时长按定位加转供操作1.3小时计负荷点5上游四段累计λ0.54加权修复时间约5.1小时。蒙特卡洛结果和解析估算的偏差在1%以内这个量级的偏差来自抽样随机性说明模型和代码逻辑没跑偏。表格里数字比较整齐实际运行时不同随机种子会在小数点后两位附近浮动。如果仿真的SAIFI跟0.31差出10%以上先别怀疑蒙特卡洛回头检查p_fail计算和supply_path搜索逻辑大概率是某个元件被重复计数或者路径没搜全。4.3 结果合理性校验指标范围、敏感度与解析法对比拿到一组结果不能直接写报告。先看量级是否合理SAIFI通常在0.1~1.5次/年SAIDI通常在0.5~10小时/年ASAI通常在99.9%~99.99%区间。低于或高于这个区间先怀疑模型写错而不是管网太好或太差。我见过有人算出一个SAIDI0.02小时/年最后发现是转供判断里把联络开关当成永久通路备用电源容量无限大造成的。第二个校验手段是敏感度分析把某个元件的故障率翻倍看指标是否按预期变化。比如把branch3的λ从0.18改成0.36负荷点4的停电频率会增加0.18次/年SAIFI预计增加0.18乘120除以570约0.038。如果仿真结果基本不变说明抽样没有覆盖到这个元件的故障场景大概率是p_fail计算或fail_branch索引写得不对。第三个手段就是和解析法对拍。解析法在馈线段数少于20的网络里用路径枚举或最小割集法就能算速度比蒙特卡洛快得多。蒙特卡洛的价值不在小网算得准而在大网、复杂转供策略、分布式电源接入这些解析法难以处理的场景。对小算例两者对拍是验证代码正确性的最佳方式偏差超过2%~3%先查影响分析逻辑再查抽样代码最后查指标累加的口径。5. 蒙特卡洛评估避坑指南收敛判据、分布假设与转供模型的5个真实教训5.1 不固定随机种子同一网络两次运行结果差20%现象同一个网络、同样的参数上午跑一遍SAIFI0.31下午重跑一遍变成0.38报告根本没法写。原因Matlab默认每次启动rng状态不同仿真年数不够时指标波动会很大就算年数够不固定种子也让调试无法复现。解决代码开头写死rng(42)把随机种子作为运行参数记录在结果文件名里。方案对比时所有方案用同一个种子序列保证条件一致。这是蒙特卡洛评估里最便宜、收益最高的一个习惯。5.2 只盯指标均值不盯方差系数仿真次数白加现象Nsim从10000加到50000SAIDI从1.25变到1.19以为稳了再换一组种子又回到1.30。原因指标的收敛速度跟事件稀有程度有关。配电网单个元件故障概率低SAIDI主要来自少数极端事件方差大均值看起来稳定但标准差还很大。解决用方差系数βσ/(μ√N)监控收敛β0.03再停止仿真。具体做法在第六章给出。5.3 修复时间一律指数分布SAIDI被长尾抬高30%现象同一网络修复时间用指数分布算出来的SAIDI比用正态分布高30%以上但SAIFI几乎不变。原因指数分布从0到无穷都有概率偶尔抽出80小时的极端修复时长对SAIDI加权平均影响很大实际检修中长修复时间没那么常见。解决除非有历史统计数据支撑否则不要默认指数分布。我一般用截尾正态分布均值μ取台账修复时间σ取0.25μ下限0.5小时上限2μ。抽样代码三行就能改效果立竿见影。5.4 跳过开关操作时间可靠性虚高没法跟台账对上现象算出的SAIDI只有台账统计值的一半领导问起来没法解释。原因模型里把“故障后可通过联络转供”简化为“不停电”漏掉了故障定位、隔离、转供三个操作步骤的耗时。解决把操作时间拆成定位时间0.3~0.5小时和转供操作时间0.5~1小时在影响分析函数里作为固定参数传入。对于自动化程度高的配网这两个时间可以缩小到分钟级但必须显式建模不能忽略。漏掉这一项所有含联络开关的方案对比结论都可能被颠倒。5.5 联络转供只看拓扑连通漏了容量约束导致误判现象某方案加了联络开关后SAIFI降了30%但实际运行中调度员根本不敢转供因为转供路径上的线路早过载了。原因can_transfer只判断“有没有路”没判断“转供后线路和变压器是否过载”。配电网可靠性评估里这类模型缺陷最隐蔽因为结果看起来很漂亮实际不可用。解决转供校验加容量检查转供后流过每条支路的负荷按峰值校核不超过限值才允许转供超限则按不可转供处理停电时长取修复时间。这一步计算量不大但对结果的可信度影响非常大。6. 仿真次数不白算的进阶技巧动态收敛判据与方差缩减6.1 动态收敛判据跑多少年不看Nsim看β系数配电网蒙特卡洛的指标收敛速率跟网络规模和故障率水平相关仿真年数拍脑袋定要么白跑要么不够。我现在的习惯是动态停止每跑1000年算一次当前指标的均值和标准差用βσ/(μ√N)判断稳定性。μ和σ用累计到当前的所有年份样本计算β0.03就停止输出结果否则继续。以第四章算例为例跑2万年的β大概在0.05左右4万到5万年降到0.03。故障率低的元件如果单独关注其影响β会更难收敛这时可以把仿真重点放在它身上用分层抽样提高命中率。6.2 方差缩减公共随机数与拉丁超立方抽样方案对比场景下公共随机数是最简单有效的方差缩减手段。两个方案各跑5万年如果各自用独立随机序列指标差里混着大量抽样噪声真假难辨。固定同一个种子、用同一组随机数序列去驱动两个方案的故障抽样这部分噪声互相抵消指标差异就是方案本身的差异。更进一步的拉丁超立方抽样把0到1的抽样空间分成N等份每份保证抽到避免随机数扎堆。低维参数场景效果明显实现方式是u(rand(1,n)(0:n-1))/n再对每维做乱序排列或者用Matlab的lhsdesign函数生成分层样本点。对配电网可靠性这种每个元件独立抽样的场景LHS能减小β但不能完全替代仿真年数该跑的量还是得跑。最后说一个我自己的教训早年代码里只写死Nsim20000不看β也不固定种子结果同一个方案在不同机器上跑出两个版本现场对不上数差点下不来台。从那以后凡是用蒙特卡洛出数的项目我都在脚本头部写好rng种子在脚本尾部打印β系数并把种子、β、Nsim一起写进结果文件名。可复现、可审核的习惯比算法本身更能决定一个评估结果是否被采信。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑