
简介这份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, labelfλ{lam}) axes[1].plot(t, f, labelfλ{lam}) axes[2].plot(t, F, labelfλ{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(alpha0.3) plt.tight_layout() plt.show()代码逻辑说明lambdas列表里放三个典型失效率0.02 对应高可靠设备MTTF50 年0.10 对应一般设备MTTF10 年。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 互补A1−FOR这张表里的第三行和第四行是实际项目里最容易搞混的。我见过有人把“年失效次数 0.3 次”直接当成 λ0.3 代入 R(t)e^(−0.3t)算出来十年可靠度只有 5%明显不合理。正确做法是先除以 8760 换算成小时失效率再统一时间单位。另一个常见错误是拿 FOR 直接当失效概率用比如 FOR0.05 就说“一年内失效概率 5%”——这在指数分布下只有当 λt 很小时才近似成立t1 年时 F(1)1−e^(−0.05)≈4.88%和 5% 差得不多但 t10 年时 F(10)1−e^(−0.5)≈39.3%而 10×5%50%偏差超过 10 个百分点。提示规划阶段做粗略估算可以用 FOR×t 近似失效概率但一旦 t 超过 5 年建议老老实实算 1−e^(−λt)。2.3 指数分布的无记忆性是优势也是陷阱指数分布有一个在可靠性工程里被反复讨论的性质无记忆性。用公式说就是 P(T ts | T t) P(T s)。翻译成人话一台设备已经正常运行了 t 年它接下来 s 年不出故障的概率和一台全新设备接下来 s 年不出故障的概率是一样的。这个性质在数学上很漂亮在工程上却经常引发争论。支持用它的人说电力设备在偶发失效期失效确实不依赖于已经运行了多久无记忆性正好匹配。反对的人说实际设备有老化、磨损、累积损伤运行越久越容易坏无记忆性不符合直觉。我的经验是对于发电机组、变压器、断路器这类经过老化筛选且定期检修的设备在规划时间尺度520 年上指数分布假设带来的误差通常在可接受范围内。但如果你做的是核电站安全壳、大坝闸门这类一旦失效后果极其严重的设备就必须用威布尔分布或对数正态分布来刻画老化效应。无记忆性还有一个实际好处它让马尔可夫状态转移模型变得极其简洁。在不可修复系统里如果寿命服从指数分布那么系统从“正常”到“失效”的转移率就是常数 λ状态方程是一阶线性微分方程手算都能解。这也是为什么电力系统可靠性评估的入门教材几乎都从指数分布开始讲——它不是最精确的但它是最容易让你把整个计算流程跑通的。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) 公式。规划阶段如果混用会把系统可靠度算低——因为可修复系统的长期可用度通常高于不可修复系统的可靠度。下面这段代码对比单元件、两元件并联、三元件并联的可靠度和 MTTFimport 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表示无穷大。输出结果会让你看到单元件 MTTF20 年2 并联 MTTF30 年3 并联 MTTF36.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 燃煤机组厂商说 MTTF20000 小时调度统计 FOR0.06行业标准推荐 FOR0.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.050.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): # 生成每个元件的寿命指数分布scale1/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”。这个改动很小但能让你从“可靠度”延伸到“风险率”曲线对规划方案比选更有说服力。希望帮到你。本文还有配套的精品资源点击获取