简介:这份PPT面向电力系统规划、可靠性分析与电气工程专业的学习者,系统讲解指数分布与不可修复系统的可靠性建模方法。内容从集合与事件、概率基本概念切入,依次梳理正态分布、二项分布、泊松分布与指数分布的区别,重点推导可靠度R(t)、不可靠度Q(t)、故障率函数λ(t)及平均无故障工作时间MTTF,并结合浴盆曲线说明初期损坏、正常使用与衰耗三阶段的故障特征。资源还通过两相同元件并联冗余系统实例,演示失效概率与工作概率的计算过程,帮助读者掌握串联、并联等可靠性框图的等效分析思路。包内共1个PPT文件,约830KB,以图文公式排版呈现,便于课堂讲解与自学对照。目前已有75人学习,适合作为电力系统可靠性课程的复习提纲或工程入门参考。
1. 不可修复系统的可靠性:为什么指数分布是绕不开的第一块基石
做电力系统规划的人迟早会撞上一个尴尬场景:手里有一批设备的历史运行数据,领导问“这套系统五年内不出问题的概率有多大”,你打开 Excel 却发现无从下手。问题不在于数据不够,而在于你缺一个能把“失效”这件事数学化的框架。不可修复系统的可靠性分析就是干这个的——它假设设备一旦失效就更换或报废,不修,只统计从投运到失效的时间分布。听起来简单,但它恰恰是电力系统规划里最底层的计算单元:发电机组强迫停运率、输电线路故障概率、保护装置误动率,往上追溯都落在这个模型上。
而指数分布,是这个框架里最常被使用的寿命分布假设。原因不复杂:它对应“失效率恒定”的情形,数学上极其干净,期望寿命就是失效率的倒数,可靠度函数只有一项指数。对于电力系统规划阶段的粗略估算,这个假设在设备偶发失效期(浴盆曲线的底部平坦段)是站得住的。适合谁看?如果你正在做发电容量充裕度评估、配电系统可靠性指标计算,或者要给学生讲清楚“强迫停运率到底怎么来的”,这篇笔记里的推导路径和计算模板可以直接拿去用。接下来我会从指数分布的三个核心公式讲起,再落到串联、并联和复杂网络的手算与代码实现,最后把参数怎么查、坑在哪说透。
2. 指数分布的三组公式:从可靠度函数到强迫停运率
2.1 可靠度、失效密度与失效率的三角关系
不可修复系统可靠性分析里,最核心的三个函数是可靠度函数 R(t)、失效概率密度函数 f(t) 和失效率函数 λ(t)。它们之间的关系不是定义堆砌,而是一条可以互相推导的链条。指数分布的特殊性在于 λ(t) 是常数,记作 λ,于是:
- 失效密度 f(t) = λ·e^(−λt),t ≥ 0
- 可靠度 R(t) = ∫ₜ^∞ f(τ)dτ = e^(−λt)
- 累积失效概率 F(t) = 1 − e^(−λt)
- 平均寿命 MTTF = ∫₀^∞ R(t)dt = 1/λ
这组公式在电力系统规划里的直接映射就是:如果一台机组的强迫停运率 FOR 为 0.05,那么它的等效失效率 λ ≈ FOR/8760(单位:次/小时),MTTF ≈ 8760/0.05 = 175200 小时,约 20 年。注意这里有一个容易翻车的地方:FOR 是“平均不可用时间占比”,在不可修复模型里它和 λ 的换算依赖“修复时间远小于运行时间”这个前提。规划阶段通常直接拿 FOR 当 λ 用,但如果你要做精确的年度风险计算,这个近似会带来 3%~8% 的偏差。
下面这段 Python 代码把三个函数画在一张图上,方便你直观看到 λ 变化时曲线怎么移动:
import numpy as np import matplotlib.pyplot as plt # 参数设置:三台不同可靠性的机组,失效率单位 次/年 lambdas = [0.02, 0.05, 0.10] t = np.linspace(0, 50, 500) # 时间轴 0 到 50 年 fig, axes = plt.subplots(1, 3, figsize=(15, 4)) for lam in lambdas: R = np.exp(-lam * t) # 可靠度函数 f = lam * np.exp(-lam * t) # 失效密度函数 F = 1 - np.exp(-lam * t) # 累积失效概率 axes[0].plot(t, R, label=f'λ={lam}') axes[1].plot(t, f, label=f'λ={lam}') axes[2].plot(t, F, label=f'λ={lam}') axes[0].set_title('可靠度 R(t)') axes[1].set_title('失效密度 f(t)') axes[2].set_title('累积失效概率 F(t)') for ax in axes: ax.set_xlabel('时间 (年)') ax.legend() ax.grid(alpha=0.3) plt.tight_layout() plt.show()代码逻辑说明:lambdas列表里放三个典型失效率,0.02 对应高可靠设备(MTTF=50 年),0.10 对应一般设备(MTTF=10 年)。np.exp(-lam * t)直接实现 R(t),1 - np.exp(-lam * t)实现 F(t)。三张子图并排是为了让你看到:λ 越大,R(t) 衰减越快,f(t) 的峰值越靠左,F(t) 上升越陡。参数怎么改?如果你手头是 FOR 数据,先除以 8760 换算成小时失效率,再把时间轴单位改成小时即可。
2.2 用 MTTF 和 FOR 互推:规划阶段最常用的两个换算
电力系统规划里,设备可靠性参数通常以两种形式出现:一种是厂商给的 MTTF(平均无故障时间),另一种是运行统计得到的 FOR(强迫停运率)。这两个指标在指数分布框架下可以互推,但换算路径取决于你拿到的原始数据是什么。
| 已知参数 | 换算公式 | 适用场景 | 注意点 |
|---|---|---|---|
| MTTF(小时) | λ = 1/MTTF | 设备手册、元器件级数据 | MTTF 是期望值,不代表寿命下限 |
| FOR(无量纲) | λ ≈ FOR / 8760 | 发电机组、线路年度统计 | 仅当修复时间远小于运行时间时成立 |
| 年失效次数 n | λ = n / 8760 | 运行日志、故障记录 | 需确认统计口径是“次/年”还是“次/千小时” |
| 可用度 A | λ = (1−A) / 8760 | 调度运行数据 | A 和 FOR 互补,A=1−FOR |
这张表里的第三行和第四行是实际项目里最容易搞混的。我见过有人把“年失效次数 0.3 次”直接当成 λ=0.3 代入 R(t)=e^(−0.3t),算出来十年可靠度只有 5%,明显不合理。正确做法是先除以 8760 换算成小时失效率,再统一时间单位。另一个常见错误是拿 FOR 直接当失效概率用,比如 FOR=0.05 就说“一年内失效概率 5%”——这在指数分布下只有当 λt 很小时才近似成立,t=1 年时 F(1)=1−e^(−0.05)≈4.88%,和 5% 差得不多,但 t=10 年时 F(10)=1−e^(−0.5)≈39.3%,而 10×5%=50%,偏差超过 10 个百分点。
提示:规划阶段做粗略估算可以用 FOR×t 近似失效概率,但一旦 t 超过 5 年,建议老老实实算 1−e^(−λt)。
2.3 指数分布的无记忆性:是优势也是陷阱
指数分布有一个在可靠性工程里被反复讨论的性质:无记忆性。用公式说就是 P(T > t+s | T > t) = P(T > s)。翻译成人话:一台设备已经正常运行了 t 年,它接下来 s 年不出故障的概率,和一台全新设备接下来 s 年不出故障的概率是一样的。这个性质在数学上很漂亮,在工程上却经常引发争论。
支持用它的人说:电力设备在偶发失效期,失效确实不依赖于已经运行了多久,无记忆性正好匹配。反对的人说:实际设备有老化、磨损、累积损伤,运行越久越容易坏,无记忆性不符合直觉。我的经验是:对于发电机组、变压器、断路器这类经过老化筛选且定期检修的设备,在规划时间尺度(5~20 年)上,指数分布假设带来的误差通常在可接受范围内。但如果你做的是核电站安全壳、大坝闸门这类一旦失效后果极其严重的设备,就必须用威布尔分布或对数正态分布来刻画老化效应。
无记忆性还有一个实际好处:它让马尔可夫状态转移模型变得极其简洁。在不可修复系统里,如果寿命服从指数分布,那么系统从“正常”到“失效”的转移率就是常数 λ,状态方程是一阶线性微分方程,手算都能解。这也是为什么电力系统可靠性评估的入门教材几乎都从指数分布开始讲——它不是最精确的,但它是最容易让你把整个计算流程跑通的。
3. 串联与并联系统:手算加代码,把可靠度算到小数点后四位
3.1 串联系统:可靠度连乘的适用边界
串联系统在可靠性框图里指的是“所有元件都正常,系统才正常”。电力系统里最典型的串联结构是“发电机—变压器—输电线路—负荷”这条供电路径,任何一个环节失效,负荷就断电。如果各元件寿命独立且都服从指数分布,串联系统的可靠度为:
R_sys(t) = R₁(t)·R₂(t)·…·Rₙ(t) = e^(−(λ₁+λ₂+…+λₙ)t)
系统等效失效率 λ_sys = Σλᵢ,MTTF_sys = 1/λ_sys。这个公式简单到很多人直接拿来用,但它的适用边界需要说清楚:它要求各元件失效相互独立。实际电力系统里,雷击可能同时导致多条线路跳闸,暴雨可能同时影响多台设备,这种共因失效会让串联系统的实际可靠度低于连乘结果。规划阶段如果忽略共因失效,算出来的系统可靠度会偏乐观,偏差幅度取决于共因事件的频率——在雷电活动频繁的地区,这个偏差可能达到 15%~20%。
下面用 Python 算一个四元件串联系统的可靠度曲线,并和单元件做对比:
import numpy as np # 四个元件的年失效率(次/年) lambda_list = [0.02, 0.03, 0.015, 0.025] lambda_sys = sum(lambda_list) t = np.array([1, 5, 10, 20, 30]) # 关注的时间点(年) # 单元件可靠度(取第一个元件) R_single = np.exp(-lambda_list[0] * t) # 串联系统可靠度 R_series = np.exp(-lambda_sys * t) print(f"系统等效失效率 λ_sys = {lambda_sys:.4f} 次/年") print(f"系统 MTTF = {1/lambda_sys:.2f} 年") print(f"{'时间(年)':<10}{'单元件R':<12}{'串联系统R':<12}") for i, ti in enumerate(t): print(f"{ti:<10}{R_single[i]:<12.4f}{R_series[i]:<12.4f}")代码逻辑说明:lambda_list里放四个元件的年失效率,lambda_sys直接求和得到系统等效失效率。np.exp(-lambda_sys * t)计算串联系统可靠度。输出表格让你看到:单元件 30 年可靠度还有 54.9%,但四元件串联系统 30 年可靠度只有 5.5%——这就是串联结构对可靠度的“惩罚效应”。参数怎么改?把lambda_list换成你手头设备的实际数据即可,注意单位统一为“次/年”或“次/小时”。
3.2 并联系统:冗余设计的数学表达与常见误用
并联系统指“至少一个元件正常,系统就正常”。电力系统里的双回输电线路、备用变压器、冗余保护通道都是并联结构。两个独立元件并联时:
R_sys(t) = 1 − [1−R₁(t)]·[1−R₂(t)] = e^(−λ₁t) + e^(−λ₂t) − e^(−(λ₁+λ₂)t)
如果两个元件相同,λ₁=λ₂=λ,则 R_sys(t) = 2e^(−λt) − e^(−2λt),MTTF_sys = 1/λ + 1/(2λ) = 3/(2λ)。注意这里 MTTF 不是简单翻倍,而是变成单元素的 1.5 倍——这是很多人第一次算并联系统时容易翻车的地方。他们以为“两个并联,寿命翻倍”,实际上因为两个元件可能同时失效,平均寿命只增加到 1.5 倍。
更常见的误用是:把并联系统的可靠度公式直接套到“可修复系统”上。不可修复并联系统假设元件失效后不修复,系统靠剩余元件撑到全部失效。但实际电力系统里,备用变压器故障后会检修,修好后重新投入,这是可修复系统,需要用马尔可夫模型算稳态可用度,而不是用上面的 R(t) 公式。规划阶段如果混用,会把系统可靠度算低——因为可修复系统的长期可用度通常高于不可修复系统的可靠度。
下面这段代码对比单元件、两元件并联、三元件并联的可靠度和 MTTF:
import numpy as np from scipy.integrate import quad lam = 0.05 # 单元件年失效率 def R_parallel(t, n, lam): """n 个相同元件并联的可靠度""" return 1 - (1 - np.exp(-lam * t))**n t = np.array([1, 5, 10, 20, 30]) print(f"{'时间(年)':<10}{'单元件':<10}{'2并联':<10}{'3并联':<10}") for ti in t: r1 = np.exp(-lam * ti) r2 = R_parallel(ti, 2, lam) r3 = R_parallel(ti, 3, lam) print(f"{ti:<10}{r1:<10.4f}{r2:<10.4f}{r3:<10.4f}") # 用数值积分算 MTTF for n in [1, 2, 3]: mttf, _ = quad(lambda t: R_parallel(t, n, lam), 0, np.inf) print(f"{n} 元件并联 MTTF = {mttf:.2f} 年")代码逻辑说明:R_parallel函数用1 - (1 - R)^n计算 n 个相同元件并联的可靠度。quad做数值积分算 MTTF,积分上限用np.inf表示无穷大。输出结果会让你看到:单元件 MTTF=20 年,2 并联 MTTF=30 年,3 并联 MTTF=36.67 年——边际收益递减非常明显。参数怎么改?改lam和n即可,但注意n超过 4 以后数值积分可能因为浮点精度出现警告,可以手动把积分上限设成 200 年。
3.3 复杂网络:从可靠性框图到最小割集
实际电力系统很少是纯串联或纯并联,更多是“桥式”或“网状”结构。比如一个变电站有两条进线、两台主变、分段母线,可靠性框图就是一个桥式网络。这种结构没法直接用串并联公式,需要用最小割集法或最小路集法。
最小割集的定义是:一组元件,它们同时失效会导致系统失效,但去掉其中任何一个元件,系统就不失效。找到所有最小割集后,系统可靠度近似为:
R_sys(t) ≈ 1 − Σ P(Cᵢ)
其中 P(Cᵢ) 是第 i 个最小割集里所有元件同时失效的概率。这个近似在割集失效概率很小时成立,规划阶段通常满足。下面用一个桥式网络举例:
import itertools import numpy as np # 桥式网络:5 个元件,A-B 并联,C-D 并联,中间有桥 E # 最小割集:{A,C}, {A,D,E}, {B,C,E}, {B,D} components = ['A', 'B', 'C', 'D', 'E'] lambda_dict = {'A': 0.02, 'B': 0.02, 'C': 0.03, 'D': 0.03, 'E': 0.01} min_cut_sets = [{'A', 'C'}, {'A', 'D', 'E'}, {'B', 'C', 'E'}, {'B', 'D'}] def cut_set_failure_prob(cut_set, t): """计算割集在时间 t 内全部失效的概率(独立假设)""" prob = 1.0 for comp in cut_set: prob *= (1 - np.exp(-lambda_dict[comp] * t)) return prob t_values = [1, 5, 10, 20] print(f"{'时间(年)':<10}{'系统失效概率':<15}{'系统可靠度':<15}") for t in t_values: fail_prob = sum(cut_set_failure_prob(cs, t) for cs in min_cut_sets) # 一阶近似,割集概率很小时可用 R_sys = 1 - fail_prob print(f"{t:<10}{fail_prob:<15.6f}{R_sys:<15.6f}")代码逻辑说明:min_cut_sets手动列出桥式网络的四个最小割集。cut_set_failure_prob计算每个割集内所有元件在时间 t 内都失效的概率,用1 - np.exp(-λt)算单元件失效概率,再连乘。最后求和得到系统失效概率的一阶近似。注意这个近似忽略了割集之间的交叠,当割集概率之和超过 0.1 时误差会变大,此时需要改用容斥原理或蒙特卡洛仿真。参数怎么改?把lambda_dict换成实际数据,min_cut_sets根据你的网络拓扑重新列。
4. 参数从哪来、怎么验:指数分布可靠性计算的避坑清单
4.1 数据来源不同导致的参数打架
做电力系统规划时,同一个设备可能有三套可靠性参数:厂商手册给的 MTTF、调度运行统计的 FOR、行业标准推荐的典型值。这三套数据经常打架。比如一台 300MW 燃煤机组,厂商说 MTTF=20000 小时,调度统计 FOR=0.06,行业标准推荐 FOR=0.04。你该用哪个?
我的经验是:规划阶段优先用行业标准推荐值,因为它经过了大量同类设备的统计平均,适合做方案比选;详细风险评估用调度运行数据,因为它反映的是你所在电网的实际运行水平;厂商数据只在设备招标技术规范里做参考,因为厂商测试条件往往偏乐观。如果三套数据差异超过 30%,不要自己拍脑袋选一个,而是做敏感性分析——把三套参数分别代入,看结论是否翻转。如果翻转了,说明你的方案对参数很敏感,需要补充更多数据。
4.2 单位不统一:小时、年、次的换算陷阱
指数分布计算里最常见的翻车现场就是单位不统一。λ 的单位可以是“次/小时”“次/年”“次/千小时”,t 的单位可以是“小时”“年”“月”。一旦 λ 和 t 的单位不匹配,算出来的可靠度会差出几个数量级。
| 现象 | 原因 | 解决 |
|---|---|---|
| R(t) 算出来大于 1 | λ 和 t 单位不匹配,指数项变成正数 | 统一换算成“次/小时”和“小时” |
| R(t) 算出来接近 0 | λ 用了“次/年”但 t 用了“小时” | 检查 λ 是否误把年失效率当小时失效率 |
| MTTF 算出来是 8760 的倍数 | FOR 直接当 λ 用,没除以 8760 | 确认 FOR 换算公式 |
| 并联系统 MTTF 小于单元件 | 公式用错,把并联当串联算 | 并联用 1−(1−R)^n,串联用 R^n |
我一般会在代码开头写一个单位换算注释块,把所有参数统一到“次/小时”和“小时”,算完再换算回年。这个习惯帮我省掉了至少五次返工。
4.3 独立假设不成立时的修正思路
串联和并联公式都建立在“元件失效独立”的假设上。但电力系统里共因失效很常见:同一条走廊里的双回线路可能被同一场山火同时烧断,同一厂站的两台变压器可能被同一次雷击同时损坏。忽略共因失效会让并联系统的可靠度算得偏高。
修正思路有两种:一是用 β 因子模型,把每个元件的失效率拆成独立部分和共因部分,λᵢ = λᵢ_ind + λ_common,其中 λ_common = β·λᵢ;二是用显式共因割集,把“双回线路同时失效”作为一个单独的割集加入最小割集列表。β 因子通常取 0.05~0.10,具体值查 IEEE 标准或本电网的历史共因故障统计。规划阶段如果缺乏数据,取 β=0.10 做保守估计是常见做法。
4.4 指数分布假设被滥用时的信号
什么时候该怀疑指数分布不适用了?三个信号:一是设备已经运行超过 MTTF 且失效率明显上升,说明进入损耗期;二是失效数据画在威布尔概率纸上明显不是直线;三是同一批设备早期失效集中,说明有制造缺陷或安装问题。遇到这些信号,不要硬套指数分布,改用威布尔分布(形状参数 β>1 刻画老化)或对数正态分布(刻画修复时间)。规划阶段如果时间紧,至少要做一次分布拟合检验,用 Anderson-Darling 统计量判断指数分布是否被拒绝。
注意:指数分布的无记忆性意味着“旧设备和新设备一样可靠”,这在规划阶段做保守估算时可以接受,但在设备更换决策中不能直接用,否则会得出“永远不用换”的荒谬结论。
5. 用蒙特卡洛仿真验证手算结果:一个可复用的校验模板
手算完串联、并联或桥式网络的可靠度后,怎么确认没算错?我的习惯是用蒙特卡洛仿真做交叉验证。思路很简单:对每个元件生成服从指数分布的随机寿命,判断系统是否失效,重复十万次,统计失效频率。如果仿真结果和手算结果偏差在 2% 以内,基本可以确认手算无误。
下面是一个可复用的校验模板,以桥式网络为例:
import numpy as np np.random.seed(42) # 固定随机种子,保证结果可复现 lambda_dict = {'A': 0.02, 'B': 0.02, 'C': 0.03, 'D': 0.03, 'E': 0.01} t_mission = 10 # 任务时间 10 年 N = 200000 # 仿真次数 fail_count = 0 for _ in range(N): # 生成每个元件的寿命(指数分布,scale=1/lambda) life = {comp: np.random.exponential(1/lam) for comp, lam in lambda_dict.items()} # 判断系统是否失效:桥式网络的最小割集任一成立即失效 # 割集1: A和C都失效 cut1 = life['A'] < t_mission and life['C'] < t_mission # 割集2: A、D、E都失效 cut2 = life['A'] < t_mission and life['D'] < t_mission and life['E'] < t_mission # 割集3: B、C、E都失效 cut3 = life['B'] < t_mission and life['C'] < t_mission and life['E'] < t_mission # 割集4: B和D都失效 cut4 = life['B'] < t_mission and life['D'] < t_mission if cut1 or cut2 or cut3 or cut4: fail_count += 1 fail_prob_sim = fail_count / N R_sim = 1 - fail_prob_sim print(f"仿真次数: {N}") print(f"系统失效概率(仿真): {fail_prob_sim:.6f}") print(f"系统可靠度(仿真): {R_sim:.6f}") # 和手算一阶近似对比 def cut_set_failure_prob(cut_set, t): prob = 1.0 for comp in cut_set: prob *= (1 - np.exp(-lambda_dict[comp] * t)) return prob min_cut_sets = [{'A', 'C'}, {'A', 'D', 'E'}, {'B', 'C', 'E'}, {'B', 'D'}] fail_prob_hand = sum(cut_set_failure_prob(cs, t_mission) for cs in min_cut_sets) print(f"系统失效概率(手算一阶近似): {fail_prob_hand:.6f}") print(f"相对偏差: {abs(fail_prob_sim - fail_prob_hand)/fail_prob_sim*100:.2f}%")代码逻辑说明:np.random.exponential(1/lam)生成服从指数分布的随机寿命,scale 参数是 1/λ。life[comp] < t_mission判断元件在任务时间内是否失效。四个割集条件用or连接,任一成立系统就失效。fail_count / N得到失效概率仿真值。最后和手算一阶近似对比,输出相对偏差。参数怎么改?改lambda_dict、t_mission和N即可。N建议至少 100000,否则仿真波动会掩盖手算误差。np.random.seed固定种子是为了让你每次运行结果一致,方便调试。
这个模板我用了三年多,帮我在多个配电网可靠性评估项目里抓出过手算错误。最典型的一次是桥式网络里漏了一个割集,手算可靠度偏高 4.7%,仿真一跑就暴露了。后来我养成了一个习惯:任何复杂网络的可靠度手算结果,必须过一遍蒙特卡洛,偏差超过 3% 就回去查割集列表。
最后一个技巧:如果你要算的是“系统在 t 时刻的瞬时失效率”而不是“t 时间内的累积失效概率”,蒙特卡洛需要改成“在 t 时刻附近取一个小区间 Δt,统计区间内失效的比例再除以 Δt”。这个改动很小,但能让你从“可靠度”延伸到“风险率”曲线,对规划方案比选更有说服力。希望帮到你。
本文还有配套的精品资源,点击获取