首页 / 资讯中心 / 文章详情

基于FAHP的选煤机械健康状态评价:从模糊权重到检修决策

基于FAHP的选煤机械健康状态评价:从模糊权重到检修决策 ★ FEATURED ARTICLE
简介针对选煤机械健康状态评估中影响因素多样、精确数值难以刻画的问题这份PDF资料完整收录了《基于FAHP的选煤机械健康状态评价》论文原文。资源面向煤矿机电设备管理、选煤厂设备维护与安全生产相关工程技术人员系统展示了基于模糊层次分析的评价模型构建过程先建立以出厂质量、运行状况和历史状态为准则层的层次结构再通过专家模糊判断矩阵、归一化变换、一致性检验确定各层权重最后以某选煤厂旋转机械算例验证有效性。全文仅1个PDF文件压缩包大小146KB方便直接下载阅读。结合文中的判断准则表和计算步骤读者可学习如何将模糊比较标度0.10.9转化为可量化的评估权重并参考算例搭建适用于自身场景的设备健康评价体系。目前已有174人学习浏览适合需要应用模糊层次分析法开展设备状态评价的研究人员与现场工程师。1. 从“该修没修、修了不该修”到量化打分FAHP为什么适合选煤机械健康状态评价选煤厂里最难回答的问题往往不是“哪台设备坏了”而是“哪台设备快要坏了”。振动筛的筛面磨穿还能再跑两个月激振器轴承温度顶到临界值却可能一夜之间抱死——检修计划到底排在哪一周备件先买哪一批靠经验能扛一阵但经验说不清“这台设备比那台差多少”。基于FAHP的选煤机械健康状态评价就是把这种说不清变成可计算的模糊判断用模糊层次分析法把检修经验、振动数据、工艺指标一起折算成一台设备的健康分数再按分数定检修优先级。FAHP相比普通打分法最大的差别是它允许专家给出“大概重要两到四倍”这类模糊回答而不是硬逼着填一个精确数字这套方法适合设备科技术员、点检工程师和搞状态监测的工艺人员把月度点检记录变成一张能直接开检修工单的健康报表。2. 建立健康评价指标体系从设备机理到可打分的层次结构2.1 层次结构怎么搭目标层-准则层-指标层的设计原则FAHP 的第一步不是算权重而是把“健康”这个词拆成能测量的东西。常见做法是搭三层结构顶层是目标层就是这台选煤机械的综合健康状态中间是准则层一般从机械性能、工艺性能、安全环保、经济性四个方面切入最底层是指标层每个指标必须能通过点检、在线监测或生产报表拿到数据。以直线振动筛为例我常用的指标体系如表 1 所示。准则层指标层测量方式方向说明机械性能振动速度有效值mm/s手持测振仪/在线传感器负向振动烈度越高越差机械性能激振器轴承温度℃红外测温/在线热电阻负向取停机前峰值机械性能激振器工作电流A配电柜电流表负向反映轴承磨损和润滑状态机械性能筛框与支撑弹簧状态停机目视点检定性裂纹、断裂、老化工艺性能筛下产物合格率%生产报表正向分级效率直接反映筛分效果工艺性能单位时间处理量t/h生产报表正向需在同工况下比较工艺性能筛面磨损与堵孔率%停机检查负向堵孔率越高越差安全环保设备噪声dB(A)声级计负向低频异响往往是轴承故障前兆安全环保粉尘浓度mg/m³粉尘仪/目视等级负向密封与除尘状态经济性吨煤电耗kWh/t电表计量负向反映传动效率经济性备件消耗费用占比物资台账负向与历史均值比较搭层次时有三个原则比权重计算更值得较真可测、独立、方向统一。“可测”是说每个指标在月度评价周期内必须能拿到数值或明确等级拿不到数据的指标再重要也先放一边“独立”是说指标之间不要强相关比如“激振器电流”和“轴承温度”都反映轴承状态但一个偏摩擦损耗一个偏热积累可以同时保留“方向统一”是指所有指标要么按正向处理、要么按负向处理后面做隶属度函数时才不会把方向搞反。吨煤电耗这类指标受入料煤质影响很大如果现场煤质波动频繁建议把它从评价体系里剔除或改成“同煤质条件下的环比变化率”否则算出来的健康分随煤质跳检修决策跟着受干扰。2.2 三角模糊数打分与模糊判断矩阵构造传统 AHP 要求专家在 1~9 标度里选一个精确数字回答“A 比 B 重要几倍”但现场专家往往说不准。某位老点检员可能觉得振动速度比轴承温度“明显重要”早一点晚一点填表就会在 3 和 4 之间摇摆。FAHP 用三角模糊数 (l, m, u) 代替这个点值m 是最可能的重要倍数l 和 u 是上下边界表示“大概在这个区间内”。比如专家填“明显重要”对应的模糊数取 (2, 3, 4)意思是重要程度大致在 2 到 4 倍之间、最接近 3 倍。反向比较不需要专家再判断一次直接取倒数区间 (1/4, 1/3, 1/2)。实际设计专家问卷时我一般给五个语言变量并锁死对应的三角模糊数不让人自由发挥填区间否则有人写 1 到 9有人写 3 到 4矩阵没法统一。表 2 是工程上常用的一套映射注意这套映射一旦确定就要贯穿所有专家问卷中途不能换。语言变量三角模糊数 (l, m, u)说明同等重要(1, 1, 1)两者对健康评价贡献相当稍微重要(1, 2, 3)有优势但不压倒性明显重要(2, 3, 4)实践经验能明显区分强烈重要(3, 4, 5)一个指标失效直接换整台设备极端重要(4, 5, 6)几乎主导健康状态给专家填表时矩阵只填上三角即可对角线上全是 (1,1,1)下三角在程序中自动补全。最难的不是解释表格而是让专家理解“重要性”指的是什么。我的做法是先给出业务解释“振动速度失效后可能导致筛体结构开裂停机 3 天以上轴承温度失效后可能烧毁激振器停机 1~2 天且更换成本更低”——让专家基于停机时长和修复成本去判断“哪个更影响健康”比让他们抽象地比较“重要性”靠谱得多。2.3 用 Python 算模糊权重三角模糊数判断矩阵的权重计算脚本有了模糊判断矩阵之后下一步是计算各层权重。我常用的是几何平均法步骤是先对每一行所有三角模糊数做几何平均得到该行的模糊几何均值再把各行几何均值做归一化得到模糊权重向量最后用重心法去模糊化得到可以排序的精确权重。相比算术平均几何平均对个别极端判断的敏感性更低现场专家偶尔填出一个夸张区间时不会把权重拉偏。import numpy as np # 1. 构造准则层三角模糊判断矩阵 # 每个元素为 [l, m, u]代表“该行指标比该列指标重要的程度” # 上三角由专家打分直接填入下三角按倒数自动补齐 # 若 A[i][j] [l, m, u]则 A[j][i] [1/u, 1/m, 1/l] n 4 # 顺序机械性能 / 工艺性能 / 安全环保 / 经济性 mat np.zeros((n, n, 3)) mat[0][1] [2, 3, 4] # 机械性能比工艺性能明显重要 mat[0][2] [3, 4, 5] # 机械性能比安全环保强烈重要 mat[0][3] [2, 3, 4] # 机械性能比经济性明显重要 mat[1][2] [1, 2, 3] # 工艺性能比安全环保稍微重要 mat[1][3] [1, 1, 1] # 工艺性能与经济性同等重要 mat[2][3] [1/3, 1/2, 1] # 经济性比安全环保略重要 for i in range(n): mat[i][i] [1, 1, 1] # 对角线自身与自身同等重要 for i in range(n): for j in range(i 1, n): # 补全下三角 l, m, u mat[i][j] mat[j][i] [1/u, 1/m, 1/l] # 2. 几何平均法求模糊权重 # 每行所有三角模糊数做几何平均得到 r_i (r_l, r_m, r_u) r_l np.prod(mat[:, :, 0], axis1) ** (1/n) r_m np.prod(mat[:, :, 1], axis1) ** (1/n) r_u np.prod(mat[:, :, 2], axis1) ** (1/n) # 归一化模糊除法近似处理保证权重区间有界且和为 1 sum_l, sum_m, sum_u np.sum(r_l), np.sum(r_m), np.sum(r_u) w_l r_l / sum_u w_m r_m / sum_m w_u r_u / sum_l # 3. 重心法去模糊化并归一化 w_defuzz (w_l w_m w_u) / 3 w w_defuzz / np.sum(w_defuzz) print(准则层权重, np.round(w, 4)) # 4. 一致性检验近似做法 # 取每个三角模糊数的中值 m 构成点值矩阵套用经典 AHP 的一致性比例公式 A mat[:, :, 1] eig_val np.linalg.eigvals(A) max_eig np.max(eig_val.real) CI (max_eig - n) / (n - 1) RI {3: 0.58, 4: 0.90, 5: 1.12} # 只用到 n4 CR CI / RI[n] print(fCI{CI:.4f}, CR{CR:.4f}) if CR 0.1: print(通过一致性检验) else: print(不通过需让专家局部重填)这段脚本里有两个工程细节值得说明。第一归一化时分子除以sum_u、分母用sum_l或sum_u交叉处理是为了让模糊权重仍然保持三角模糊数的区间特性避免分母取单一值导致权重被压缩成没有模糊度的点。第二一致性检验用的中值矩阵是工程近似做法严格意义上模糊判断矩阵应该用模糊一致性公式但现场评价里点估计已经足够判断“矩阵是否矛盾到不可用”我一般会在报告里标注“一致性为近似校验”。运行时如果输出 CR 接近 0.1优先检查 2.2 节里的两两比较是否有方向矛盾而不是急着调数据调数据是最后手段程序自动改数据会让整个评价丧失工程可信度。2.4 一致性校验不通过怎么办先查错位再查矛盾对CR 超标的处理顺序我的经验是先查录入错位。上三角录入时行与列看反是最高频错误比如专家说“机械比工艺重要”录入员却填在 mat[1][0] 上程序补全后变成“工艺比机械重要”整个矩阵逻辑全反。第二查矛盾对如果 A 比 B 明显重要、B 比 C 明显重要、C 比 A 又明显重要这在三指标子矩阵里会出现 CR 飙到 0.3 以上的情况说明专家对这三个指标的关系没有想清楚。第三才轮到局部重填而且只让专家重填那一个矛盾三元组不要整张表重来。三个顺序走完多数现场矩阵都能在半小时内收敛到 CR0.1。这里有一条血泪经验不要看到 CR 超标就用程序把矩阵平移到满足一致性那等于伪造专家意见算出来的权重再好看也没人敢签字。3. 从权重到健康等级隶属度函数与模糊综合评价合成3.1 定量指标与定性指标怎么转换成隶属度FAHP 只解决权重问题要得到“健康等级”还得再走一步模糊综合评价。综合评价需要一张隶属度矩阵 R行是指标列是健康等级。我习惯把健康等级划分为五档健康、亚健康、注意、劣化、严重对应百分制分数 90、75、60、45、30。每个指标对五档各有一个隶属度取值在 0 到 1 之间加起来不要求等于 1因为模糊隶属度允许重叠。定量指标用梯形隶属度函数把实测值映射到五个等级。以振动速度有效值为例某类直线振动筛的工程经验分级如表 3 所示注意不同机型、不同筛体结构的阈值差异很大用之前要拿历史故障记录校核一遍不要直接抄别人家的数。健康等级振动速度 (mm/s)轴承温度 (℃)筛下合格率 (%)健康≤2.8≤65≥92亚健康2.8~4.565~7585~92注意4.5~7.175~8578~85劣化7.1~11.285~9570~78严重11.29570梯形隶属度函数的参数最好与表 3 的边界对齐。每个等级用四个参数 a、b、c、d 描述在 [a, b) 区间从 0 线性升到 1在 [b, c] 区间保持 1在 (c, d] 区间降到 0超出范围取 0。相邻等级之间存在重叠区是正常的这正是模糊评价表达“说不清到底属于哪档”的方式。定性指标如弹簧状态、筛框焊缝裂纹不强行测数值直接由点检员按“优/良/中/差/严重”五档记录对应五档隶属度向量取 [1,0,0,0,0] 到 [0,0,0,0,1]。这样定性定量指标最终都归一成同一形态可以进同一个矩阵。def trap(x, a, b, c, d): 梯形隶属度函数 x a 或 x d 时隶属度为 0[a,b) 线性上升[b,c] 为 1(c,d] 线性下降 a、b、c、d 由相邻等级边界决定例如振动 2.8~4.5 这一档 a2.0, b2.8, c4.5, d5.5表示 2.0 以下完全不属于亚健康 2.8~4.5 完全属于亚健康边界外缓慢过渡。 if x a or x d: return 0.0 if x b: return (x - a) / (b - a) if x c: return 1.0 return (d - x) / (d - c)参数设定的关键在重叠区的宽度。重叠太窄实测值在边界附近轻微波动就会导致健康等级跳档重叠太宽两个相邻等级的隶属度几乎一样最大隶属度原则失效。我的经验是重叠区取该档宽度 15%~20%比如 2.8~4.5 这一档跨度 1.7重叠区取 0.3 左右a2.0、b2.8、c4.5、d5.5。现场可以先拿三个月的点检记录试算看历史数据中属于同一等级的设备是否在评价结果里也稳定在同一档频繁跳档就说明边界参数设窄了。3.2 二级模糊综合评价的合成计算有了指标层隶属度矩阵下一步是合成。合成公式是 B W ∘ RW 是权重向量R 是隶属度矩阵算子取加权平均型 M(·, ⊕)即 B_j Σ(w_i × r_ij)。加权平均型的好处是每个指标都对结果有贡献不会像取大取小算子那样把信息丢掉。综合健康评分再对 B 做加权平均HealthScore Σ(B_j × score_j)。当最大隶属度值和第二大隶属度值差距小于 0.05 时不要用最大隶属度下结论用加权评分判断更稳。import numpy as np def evaluate(w, R, score_vec[90, 75, 60, 45, 30]): 二级模糊综合评价 参数说明 w: 准则层权重已归一化长度等于准则层个数 R: 准则层隶属度矩阵行为准则层、列为健康等级 行数必须等于 len(w)列数必须等于 len(score_vec) score_vec: 健康等级对应的百分制分数默认五档 返回 B: 综合评价向量表示整体对各健康等级的隶属度 grade_idx: 最大隶属度对应的等级下标0健康, 4严重 health_score: 加权平均得到的百分制健康评分 B np.dot(w, R) grade_idx int(np.argmax(B)) health_score float(np.dot(B, score_vec)) return B, grade_idx, health_score # 示例4 个准则层的权重和隶属度矩阵 w np.array([0.42, 0.24, 0.13, 0.21]) R np.array([ [0.00, 0.20, 0.45, 0.25, 0.10], # 机械性能偏向“注意” [0.10, 0.30, 0.30, 0.20, 0.10], # 工艺性能健康到注意较均衡 [0.30, 0.40, 0.20, 0.10, 0.00], # 安全环保状态较好 [0.00, 0.10, 0.35, 0.35, 0.20], # 经济性明显劣化 ]) B, idx, score evaluate(w, R) print(综合评价向量 B , np.round(B, 3)) print(最大隶属度等级下标 , idx) print(健康评分 , round(score, 1))示例输出中 B 的最大值落在“注意”档健康评分约 61 分和现场“振动偏大、经济性指标恶化”的直观判断吻合。两级合成的完整链路是先把每个准则层内部的指标隶属度矩阵与该准则层权重合成得到准则层评价向量再把准则层评价向量组合成新的 R 矩阵与准则层权重做第二级合成。上面的代码只展示第二级合成因为第一级合成与第二级在数学上完全一致只是矩阵的尺寸不同如果指标层有 11 个指标、5 个等级第一级就是 11×5 的矩阵乘以 11 维权重向量。3.3 评价周期与数据来源不是有了公式就能算数健康状态评价最容易被忽略的是数据来源。振动速度有效值不能拿瞬时值要取统计周期内的 95% 分位值或七日最大值轴承温度取带料运行两小时后的稳定峰值停机开盖测的温度没有可比性筛下合格率看当班生产报表堵孔率和弹簧状态走停机点检记录。我一般建议按月出评价台账按季度做一次综合状态评价月度台账用简化的指标集只保留振动、温度、电流、筛下合格率四个硬指标保证每月都能在 2 小时内算完季度评价才把安全环保和定性指标加进来。不同数据来源的可靠性不一样定量指标直接进公式定性指标要尽量限定期频率。比如“筛框焊缝裂纹”如果写成“有无裂纹”等于只有两档写成“无裂纹/疑似细微裂纹/明显裂纹/穿透性裂纹/结构变形”五档点检员的可操作性反而更强。评价结果出来之后先看是否与设备科的实际判断一致不一致的往往不是公式问题而是某个指标的隶属度参数标定有问题这时候回去调表的边界值比调权重见效快。4. FAHP 落地避坑这几个坑我替你先踩过了4.1 指标层塞进太多定性指标隶属度全靠拍脑袋现象最开始把一个准则层下面挂了五个定性项什么“润滑站油位”“紧固件状态”“操作工责任心”都往里放最后评价结果和现场感觉明显不符——一台明显异响的设备健康分居然比旁边正常设备还高。原因定性指标没有客观数据支撑点检员打分时带着强烈的主观印象两个定性指标之间相关性又高等于把同一个主观判断重复算了三四遍。解决体系里定量指标至少占三分之二定性指标只保留与故障强相关的项每项的点检标准必须写成五档可勾选的具体描述禁止写“好/不好”这种两档词否则后面隶属度矩阵基本就是拍脑袋矩阵。4.2 判断矩阵一致性反复不过问题出在区间打分太宽现象第二版问卷让专家直接填模糊区间有人觉得“填准了怕错”几乎所有判断都写成 (1, 7) 这种超级宽区间中值矩阵的一致性比例 CR 直接到 0.35权重算出来四个准则层几乎全相等评价失去区分度。原因自由填写区间给了专家“越宽越安全”的心理暗示模糊区间的宽度并不是表达不确定性的工具它是给语言变量定界的应该锁死。解决按表 2 的语言变量模板让专家只选词不填数稍微重要就是 (1,2,3)明显重要就是 (2,3,4)区间宽度由模板统一控制。如果个别专家坚持认为某个判断确实比“明显重要”更确定也只能加一个自定义变量 (2,3,3) 这类窄区间并在备注里说明理由不允许自由填 1 到 7。4.3 同一台设备不同人的打分差异巨大评价结果像黑匣子现象机械、工艺、安全三个口子的人对同一个准则层打分算出来的权重差异超过两倍A 组结果是“注意”等级B 组结果是“劣化”等级谁都不服谁评价报告最后变成黑匣子。原因每个口子都站在自己的专业视角理解“重要性”工艺口觉得筛下合格率就是一切机械口觉得轴承温度才是硬指标本质上比的不是同一件事。解决填表前先统一判据——“这个指标失效后平均会导致多长时间的被动停机、换件成本大概多少”让专家基于停机时长和检修成本回答而不是抽象的重要性。我还会先组织一次集中试填把三个口子的结果差异当场摆出来讨论通常一轮之后就能收敛到可接受的区间范围。4.4 只报总分检修工单还是没法开现象设备健康评分 67 分结论是“注意”但检修人员拿着报告问“那这次到底修哪里”除了知道总分不高得不出任何有用信息。原因目标层得分是加权平均的结果某个指标劣化被其他健康指标稀释总分掩盖了内部差异。解决评价报告强制带上“劣化贡献 TOP3”指标计算每个三级指标对总分的负贡献按权重乘隶属度变化量排序把排在最前面的三个指标直接写进检修建议。比如振动速度从亚健康掉到注意就要建议测一下激振器轴承游隙经济性指标恶化就查电机效率和润滑脂消耗这样评价结果才能转化成工单而不是停留在报表上。4.5 评价结果上下跳档原来是采样时点出了问题现象某台设备一个月内振动超限一次评价立刻从“亚健康”跳到“劣化”隔几天数据正常评分又反弹回去设备没修过也没换件分数却像股票一样波动。原因用了单次瞬时采样值这次采样恰好赶上煤量偏大或启动瞬态不代表设备整体状态另一个原因是没有限定相同工况采集条件。解决每个评价周期只允许用统计特征值——均值、95% 分位值或极差不能用单点值采集工况统一写明“带料稳定运行两小时后”评价周期内如果发生过停机检修或大修单独标注不与正常周期混算。数据预处理的重要性在这种时候远大于算法本身数据没洗干净FAHP 算得再漂亮也是给脏数据做包装。5. 让评价结果真正用起来单台劣化追踪与多台横向排序健康评价做完不能只用于当月的“修不修”判断更有价值的是把多期评价结果串起来看趋势。我的做法是把每月的指标隶属度存成一张宽表逐期对比“健康隶属度”变化下降最快的三个指标就是下月点检的重点。单期 61 分只能说明状态中等偏下连续三个月部分指标健康隶属度从 0.6 降到 0.2哪怕总分还在“亚健康”也在明明白白告诉你这条劣化曲线正在加速该准备检修预案了。import pandas as pd # 每月每个指标的健康隶属度只取“健康”这一列做趋势观察 df pd.DataFrame({ 指标: [振动速度, 轴承温度, 激振器电流, 筛下合格率], 3月健康隶属度: [0.60, 0.80, 0.90, 0.50], 4月健康隶属度: [0.20, 0.70, 0.80, 0.40], }) df[变化] df[4月健康隶属度] - df[3月健康隶属度] # 单月健康隶属度下降超过 0.15 的指标下月必须安排专项点检 alarm df[df[变化] -0.15] print(alarm[[指标, 变化]])阈值 0.15 不是拍出来的我用历史故障数据回溯验证过故障前一到两个月里被更换设备的主因指标健康隶属度普遍出现过单月 0.15 以上的跳水连续两期小幅下降累计超过 0.2 的也要进关注名单。多台设备横向排序时只比同机型、同工况评价分数可以跨设备比但“劣化贡献 TOP3”必须每台单独看因为不同设备的短板完全可能在不同指标上。备件采购计划按“严重”隶属度排序大修计划按劣化加速度排序两个维度各管一摊。我现在的习惯是每次跑完评价先不看总分先看健康隶属度下降最快的三个指标和连续两个周期的变化斜率——总分是给汇报用的指标变化才是给检修用的。这个习惯是从一次翻车里学来的有台设备总分一直稳定在 68 分“注意”档没人当回事拆检时发现激振器轴承保持架已经碎了大半。回查月度数据轴承温度的健康隶属度早就在三个月里默默掉了 0.4只是被其他指标加权平均盖住了。从那以后我做的每一份评价报告都把“下降最快指标”放在最前面。希望这四章半的内容能帮你在自己的选煤机械上少走一段弯路把 FAHP 从论文里的公式变成车间里真能开检修票的工具。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站