
干过综合管廊施工现场的人都清楚这类工程的风险评估特别难拿捏基坑开挖、管节吊装、燃气舱焊接、涌水涌砂、支撑体系失稳风险因素又多又杂交叉作业密任何一个环节失控都不是小事故。现在很多项目都在用 LEC 作业条件危险性评价法做打分但用多了你会发现一个很别扭的地方——专家打分是靠经验的经验天生就是模糊的你让人家填一个精确的“3分”还是“4分”他其实很难拍板。而且即使所有人都填了 4 分现场条件一变风险水平也会随机波动。所以这两年我一直在琢磨怎么把 LEC 这套老工具做得更贴近工程实际最后落地了一套“三角模糊 LEC 云模型”的组合拳并且用 Matlab 把全过程代码化了。这篇就把思路、原理、代码、坑一次性讲清楚适合正在做施工安全风险评估的安全管理人员也适合把风险评估当课题方向的研究生。1. 为什么综合管廊施工风险评估要用“三角模糊LEC云模型”1.1 传统LEC法在管廊施工场景中的尴尬LEC 法是格雷厄姆和金尼提出的一套半定量评价方法核心公式很简单危险性分值 D L × E × C。其中 L 是事故发生的可能性E 是人员暴露于危险环境的频繁程度C 是发生事故可能造成的后果。分数越高代表越危险对应整改等级也不同。这套方法在工厂、矿山的单一作业点评价里非常成熟但要直接套到综合管廊施工上问题就出来了。管廊施工是典型的线性工程一个标段几公里长沿线地质条件、地下管线分布、周边环境差异巨大。同样是基坑开挖这一段是黏土那一段是粉砂层同一个专家对两个段位给定的 L 值怎么可能一样传统 LEC 却要求专家把每个指标打成一个精确的数这等于逼着专家在“3”和“4”之间硬选。更麻烦的是 LEC 的 D 值分级用的是硬边界比如 160 分就是“显著危险需要整改”159 分虽然只差一分等级却完全不同实际工程中这种边界差异很常见而其背后的风险本质并没有区别。LEC 本身还有一个天然缺陷它完全没考虑打分结果的不确定性。两个专家对同一作业点打分一个给 L3另一个给 L6平均下来是 4.5看起来挺合理可这个 4.5 背后其实是两种截然不同的风险认知。传统方法把这种分歧直接吞掉了得出的结论看似精确实则脆弱。这就需要引入能表达“模糊”和“随机”两个维度的数学工具。1.2 三角模糊数让专家打分从“一个数”变成“一段区间”解决“专家不好拍板”最简单直接的办法就是让专家给区间。三角模糊数用三个数表示一个模糊量(l, m, r)分别表示下限、最可能值、上限。专家说“这个基坑发生坍塌的可能性我判断下限 3、最可能 5、上限 7”比让他填一个 5 更自然也更符合人类认知习惯。三角模糊数虽然多了一个维度但运算并不复杂。两个三角模糊数的加法、乘法都是逐分量运算比如 (l1,m1,r1) (l2,m2,r2) (l1l2, m1m2, r1r2)乘法也是对应分量相乘。当多位专家独立打分时只要给每位专家一个权重并做加权平均就能聚合出综合三角模糊数。权重可以按专家资历、项目经验时长来定最省事的做法是平均权重。引入三角模糊数之后L、E、C 三个指标各自变成了三角模糊数计算出的危险性分值 D L × E × C 也自然是一个三角模糊数。这一步的工程意义在于D 不再是一个点而是一个“从最乐观到最悲观”的风险区间。比如我们后面案例里算出 D(47.4, 137.2, 299.0)直接解释就是该作业风险分值大概率在 47 到 299 之间最可能落在 137 附近跨度很大说明专家对风险水平的看法差异不小。1.3 云模型把模糊和随机放进同一个框架三角模糊数表达了模糊性但它处理不了随机性。这里的随机性不是指事故发生的概率而是指专家打分的区间本身就有波动同一个专家今天心情不同、对现场信息的掌握程度不同他给出的区间可能整体上移或缩窄。要同时刻画这种“模糊随机”那就轮到云模型上场。云模型是我国学者李德毅院士提出的一种不确定性转换模型用三个数字特征描述一个定性概念Ex期望、En熵、He超熵。用打靶比喻最容易理解Ex 是靶心代表这个概念最典型的数值En 是弹着点的散布半径代表这个概念的模糊程度和覆盖范围He 是半径本身的稳定性即每次打出的弹着点散布范围是否一致。风险打分里Ex 就是风险分值的最可能中心En 大说明风险区间模糊、跨等级边界He 大说明专家意见本身就漂移不定、可信度低。云模型还有一个很实用的特性它可以生成云滴把看不见的“模糊集合”变成一张可以画出来的图。通过正向云发生器在 Ex、En、He 的控制下随机生成成千上万个云滴每个云滴带一个隶属度画出来就是一坨形状像云的点群。这能让风险等级判定从“一个数字”变成“一张分布图”决策者一眼就能看出风险到底稳不稳定。2. 方法原理拆解从LEC到云模型每一步在解决什么问题2.1 LEC的评分逻辑与危险性分级LEC 里三个指标的取值都有成熟的参考表。L 从 0.1 到 10 分10 代表完全可能预料0.1 代表实际不可能E 从 0.5 到 10 分10 代表连续暴露0.5 代表非常罕见C 从 1 到 100 分100 代表大灾难多人死亡1 代表引人注目需要救护。三个分数相乘得到 D 值D 值对应五个风险等级具体见下表。D值区间危险程度应对措施320极度危险停止作业并整改160~320高度危险立即整改70~160显著危险需要整改20~70一般危险需要注意20稍有危险可以接受这套分级表本身没有问题问题在于“硬边界”。比如 D159 和 D161按表一个是显著危险一个是高度危险管理动作却天差地别。真实风险不可能在 160 这个点上发生突变边界一定是渐变的云模型的标准等级云正好可以表达这种渐变。2.2 三角模糊数的定义、运算与多专家聚合三角模糊数可以用符号记为 A (l, m, r)约束条件是 l ≤ m ≤ r。当 lmr 时退化为一个精确数这其实是三角模糊数的一种特殊情况所以这套方法向下兼容传统 LEC——如果你坚持用精确打分把区间三个值填一样就行。多专家聚合是实际项目里绕不开的一步。假设有 n 位专家每位专家的权重为 w_i且权重之和为 1则聚合后的三角模糊数每个分量分别是各位专家对应分量的加权和。例如 L 的下限 Σw_i × l_iL 的最可能值 Σw_i × m_iL 的上限 Σw_i × r_i。E、C 同理。这种加权平均聚合的优点是简单稳定缺点是会抹掉部分极端专家意见如果专家分歧特别大建议先做一致性检验或把异常专家打分剔除后再聚合否则聚合结果会被“和稀泥”。聚合完成之后计算 D L × E × C。三角模糊数的乘法就是逐分量相乘所以 D (l_L×l_E×l_C, m_L×m_E×m_C, r_L×r_E×r_C)。这是整条技术路线里唯一一次乘法务必注意三个指标的下限乘下限、中值乘中值、上限乘上限不能交叉相乘否则算出的区间没有实际意义。2.3 三角模糊数转云模型的三要素怎么定有了 D 的三角模糊数 (a, b, c)下一步要把它转成云模型数字特征 (Ex, En, He)。这里我用的是工程上最常用的一组转换公式Ex (a 4b c) / 6En (c - a) / 6Ex 采用“中值占 4 倍权重”的公式和项目管理里 PERT 三点估算的期望值公式一致核心逻辑是中值 b 是专家判断的最可能值应该在期望中占据主导地位如果直接用 (abc)/3反而会把下限和上限两端的悲观、乐观意见与最可能意见等权看待与专家认知不符。En 的选取依据是正态分布的 3σ 原则。三角模糊数的区间 [a, c] 可以理解为风险分值约 99.7% 的置信区间而这个置信区间的半径约为 3 个标准差所以标准差 En (c-a)/6。这个关系在统计意义上非常清晰也保证了云滴大概率落在模糊区间内。He 的确定相对灵活一般有三种做法。第一种是工程简化取 He En/10我们代码里用的就是这个胜在简单第二种是如果有多位专家数据先把每位专家的打分分别转换成各自的 En再求这些 En 的标准差作为 He能真实反映专家意见的离散程度第三种是用逆向云发生器直接从大量打分样本里反推三个数字特征。三种方案我在实操里都试过如果专家人数只有三四位第一种和第二种结果接近不建议用第三种样本太少逆向云反推的 He 不稳定。2.4 风险等级标准云的设计与相似度判定原理标准云就是给每一个风险等级都建立一个云模型。仍以 LEC 的五个等级为例每个等级对应 D 值的一个区间取区间中点为 Ex区间半宽度的三分之一作为 EnHe 统一给一个较小的值比如 0.1。具体标准云参数如下。等级D值区间ExEnHe稍有危险20103.330.1一般危险20~70458.330.1显著危险70~16011515.000.1高度危险160~32024026.670.1极度危险32036013.330.1接下来要解决的问题是待评项目的风险云 C(149, 42, 4) 到底属于哪个等级这里不能简单地拿 Ex 去跟区间比因为云模型的判断还需要考虑 En 和 He 的差异。最直观的相似度计算方法是“云滴隶属度均值法”从待评风险云中随机生成 N 个云滴计算每个云滴在标准等级云中的隶属度取平均作为两个云的相似度对待评风险云与五个等级云分别算一遍取相似度最大的等级作为最终风险等级。这种做法的好处是把三个数字特征全部纳入了相似度考量。Ex 决定云滴的重心偏向En 决定云滴的散布范围He 决定云滴会不会“忽散忽聚”三要素一起影响隶属度计算比单纯比较 Ex 落在哪个区间更可靠也天然地考虑了边界渐变问题。3. Matlab代码实现可直接改参数运行的完整方案3.1 代码包含哪几个模块各自做什么整套代码我拆成三块一个云模型正向发生器函数、一个云相似度计算函数、一个主脚本。正向云发生器负责从数字特征生成云滴相似度函数负责把待评风险云与标准等级云比较主脚本负责输入打分、聚合、转换、判定、输出。代码量不大全部加起来一百行以内核心逻辑集中在主脚本里方便你按自己的项目改参数。为了代码清爽主脚本里直接输入聚合后的 L、E、C 三角模糊数。如果你手上是多名专家的原始打分可以先在 Excel 里算加权平均也可以在主脚本开头加一个小循环做聚合我在 3.4 节会给出聚合代码片段。3.2 云模型正向发生器与相似度计算函数先写云模型正向发生器。标准正态云发生器的逻辑分三步先对熵 En 做一次高斯扰动得到 Enn再以 Ex 为均值、Enn 为标准差生成云滴 x最后计算云滴的隶属度。function [x, mu] normalCloud(Ex, En, He, N) % 云模型正向发生器 % 输入Ex期望En熵He超熵N云滴数量 % 输出x云滴值mu云滴隶属度 Enn En He * randn(N, 1); % 熵的随机扰动 x Ex Enn .* randn(N, 1); % 生成云滴 mu exp(-(x - Ex).^2 ./ (2 * Enn.^2)); % 云滴隶属度 end这里注意如果当前 Matlab 版本有统计工具箱也可以用 normrnd(En, He, N, 1) 代替 En He*randn结果一样但 randn 方案不需要额外工具箱兼容性更好。然后是云相似度函数。思路是以云 1 为基准生成云滴再把云滴代入云 2 求隶属度均值。云 2 的熵也做一次扰动这样两个云模型的不确定性都被考虑进去。function sim cloudSimilarity(Ex1, En1, He1, Ex2, En2, He2, N) % 基于云滴隶属度均值的相似度计算 % 输入两个云模型的数字特征N云滴数量 % 输出云1相对云2的平均隶属度作为相似度 Enn1 En1 He1 * randn(N, 1); % 云1熵扰动 x Ex1 Enn1 .* randn(N, 1); % 云1云滴 Enn2 En2 He2 * randn(N, 1); % 云2熵扰动 mu exp(-(x - Ex2).^2 ./ (2 * Enn2.^2)); % 云滴在云2中的隶属度 sim mean(mu); end3.3 主程序完整代码从打分输入到等级输出主程序我按模块依次写清楚里面加了比较详细的注释。案例背景是综合管廊明挖段深基坑土方开挖三位专家经过现场踏勘后对 L、E、C 进行三角模糊打分加权平均后得到的聚合值直接作为输入。这个作业的特点是基坑深度大、周边有地下管线、工人在基坑内连续作业时间较长专家普遍认为坍塌风险中等偏高后果比较严重。clear; clc; rng(2024); % 固定随机种子保证每次运行结果一致 % ---------- 1. 输入作业活动的三角模糊LEC值 ---------- % 格式 [下限, 最可能值, 上限]由多位专家打分加权平均聚合得到 L [2.67, 3.67, 4.67]; % 事故发生的可能性 E [3.33, 4.67, 6.00]; % 暴露于危险环境的频繁程度 C [5.33, 8.00, 10.67]; % 发生事故可能造成的后果 % ---------- 2. 计算危险性分值D的三角模糊数 ---------- D_low L(1) * E(1) * C(1); D_mid L(2) * E(2) * C(2); D_high L(3) * E(3) * C(3); D_tri [D_low, D_mid, D_high]; % ---------- 3. 三角模糊数转换为云模型数字特征 ---------- Ex (D_low 4 * D_mid D_high) / 6; % 期望 En (D_high - D_low) / 6; % 熵3σ原则 He En / 10; % 超熵工程简化取值 % ---------- 4. 风险等级标准云 ---------- % 等级编号 | Ex | En | He stdCloud [ 1, 10.0, 3.33, 0.10; 2, 45.0, 8.33, 0.10; 3, 115.0, 15.00, 0.10; 4, 240.0, 26.67, 0.10; 5, 360.0, 13.33, 0.10 ]; levelName {稍有危险, 一般危险, 显著危险, 高度危险, 极度危险}; levelNote {可以接受, 需要注意, 需要整改, 立即整改, 停止作业}; % ---------- 5. 计算待评风险云与各等级云的相似度 ---------- N 5000; % 云滴数量越大结果越稳定但计算稍慢 sim zeros(5, 1); for i 1:5 sim(i) cloudSimilarity(Ex, En, He, ... stdCloud(i, 2), stdCloud(i, 3), stdCloud(i, 4), N); end [bestSim, bestIdx] max(sim); % ---------- 6. 控制台输出 ---------- fprintf(综合三角模糊LECL(%.2f, %.2f, %.2f), E(%.2f, %.2f, %.2f), C(%.2f, %.2f, %.2f)\n, ... L(1), L(2), L(3), E(1), E(2), E(3), C(1), C(2), C(3)); fprintf(危险性分值D的三角模糊数D(%.2f, %.2f, %.2f)\n, D_low, D_mid, D_high); fprintf(云模型数字特征Ex%.2f, En%.2f, He%.2f\n, Ex, En, He); fprintf(\n各风险等级相似度\n); for i 1:5 fprintf( %s%s%.4f\n, levelName{i}, levelNote{i}, sim(i)); end fprintf(\n最终判定结果%s%s最高相似度%.4f\n, ... levelName{bestIdx}, levelNote{bestIdx}, bestSim); % ---------- 7. 绘图画出待评风险云直观观察分布 ---------- [x, mu] normalCloud(Ex, En, He, 3000); figure; scatter(x, mu, 10, filled, MarkerFaceAlpha, 0.3); xlabel(危险性分值 D); ylabel(隶属度); title(待评作业活动风险云图); grid on;需要提醒一句因为云模型本身是随机算法每次运行的相似度数值会有轻微波动这属于正常现象。代码里已经用 rng(2024) 固定了随机种子保证必要时可以精确复现结果。3.4 案例运行结果解读上面这组输入跑出来D 的三角模糊数约等于 (47.4, 137.2, 299.0)云模型数字特征 Ex≈149.2En≈41.9He≈4.2。五个等级的相似度通常表现为“显著危险”最高其次是一般危险和高度危险最终判定为“显著危险需要整改”。这个结果很有代表性。如果只看 D 的最可能值 137.2落在显著危险区间但 D 的上限 299 已经逼近高度危险区间上界说明专家内部存在“这活儿风险可能很高”的担忧。云模型的 Ex149.2 也印证了这一点——它高于中值 137因为上限的拖拽效应。En41.9 意味着约 99.7% 的云滴分布在 23 到 275 之间已经明显跨越了“一般危险”“显著危险”“高度危险”三个等级风险不确定性非常大。所以对这个案例的结论不应停留在“显著危险需要整改”这一句话上。正确的管理解读是该作业活动当前按显著危险管控但因为有相当概率滑向高度危险等级必须把深基坑周边沉降监测、支护结构位移监测、人员撤离通道检查作为重点管控项。这就是云模型相比传统 LEC 的最大价值——它告诉你风险不仅有一个等级还有一个“风险区间”让你知道该在哪些方向上留有余地。如果你手上是多名专家的原始打分矩阵而不是已经聚合好的三角数可以在主程序第 1 步之前加两行聚合代码% 假设 scores 为 n×9 矩阵列依次为L下限、L中值、L上限、E下限、E中值、E上限、C下限、C中值、C上限 w ones(size(scores, 1), 1) / size(scores, 1); % 平均权重 L w * scores(:, 1:3); E w * scores(:, 4:6); C w * scores(:, 7:9);3.5 参数调整建议云滴数、超熵He、等级云区间代码里最值得调的两个参数是云滴数量 N 和超熵 He。N 默认 5000工程判断足够了想要更平滑的相似度曲线可以加大到 10000 或 20000代价是计算时间变长对单次评估来说影响可以忽略。He 的取值要谨慎不要把 He 设成 En 的一半以上否则熵的扰动过大云滴分布会乱成一团相似度结果噪声很大排名可能不稳定。我的经验是 He 在 En 的 0.01 到 0.1 倍之间最稳妥。另一个需要结合项目实际调整的是标准云的等级区间。综合管廊不同区域的风险承受度差异很大比如燃气舱的爆炸后果极严重有的企业会把“极度危险”的下边界从 320 下调到 280或者把“高度危险”的整改要求再细化。不要死守 LEC 原始表标准云区间的设计应该贴合企业风险偏好和项目实际情况。4. 实操经验专家打分和参数设定里最容易踩的坑4.1 打分区间设计要符合认知别让专家“被迫精确”三角模糊打分看起来简单实际操作中最大的问题是专家不会填区间。很多专家习惯性地填 (5,5,5) 这种退化区间等于又回到精确打分。我常用的对策是在打分表里给每个指标附上分值的含义描述卡不只是给一个抽象分值而是把该分值对应的事故频次、暴露时长、后果类型都写清楚。比如 L 的“3分”对应“可能发生但不经常”我会在描述卡里结合管廊施工场景举例“类似地质条件下同类基坑事故平均每 3~5 年发生一次”。有了具体的锚点专家才愿意把区间拉开填出有区分度的 (2,3,4) 而不是 (3,3,3)。另外三角模糊数的三个分量必须满足 l ≤ m ≤ r这是硬性要求。有的专家会把“上限”理解成“比最可能值更悲观的值”填得过大或者把“下限”填成“不可能值”填得过小这都可能导致最终三角模糊数畸形。主程序里建议加一行校验assert(L(1) L(2) L(2) L(3), L分量顺序错误); assert(E(1) E(2) E(2) E(3), E分量顺序错误); assert(C(1) C(2) C(2) C(3), C分量顺序错误);4.2 超熵He到底怎么取三种办法对比He 是这套方法里最“玄学”的一个参数但它的作用又很关键——He 越大代表专家意见越不稳定风险判定结果越不可信。我上面代码里用的是 He En/10 的简化法适合快速出结果如果项目要求更严谨建议用第二种办法把每位专家的打分单独转换成一组云特征然后计算这些专家云特征中 En 的标准差作为 He。具体做法是先把每个专家的 L、E、C 三角模糊数分别算成 D 三角模糊数再按式 En_i (D_i_high - D_i_low)/6 得到每个专家的 En_i最后 He std(En_数组)。这里的 He 实际上衡量的是“专家们对风险模糊程度的分歧”比拍脑袋定系数更有说服力。第三种办法是用逆向云发生器从大量打分样本中反推 Ex、En、He。这个办法理论上最“正统”但需要样本量足够大少于 10 位专家时反推结果不稳定实操中反而容易误导判断。我的建议很直接项目上赶时间用第一种写论文或正式安全评估报告用第二种。4.3 边界问题的价值等级不是唯一结论用云相似度判定等级时最常遇到的情况是最大相似度和第二大相似度很接近。比如显著危险的相似度 0.21高度危险的相似度 0.18差距只有 0.03。这种情况不该强行说“判定为显著危险就完事”而是应当把两个相似度都报告出来并按更严格的等级安排管控措施。云模型的好处就是把这种“边界风险”显性化了如果 Ex160 且 En25那么它一半概率属于显著危险、一半概率属于高度危险决策者应该按高度危险做预案。我处理过的管廊项目里有过几次真实的“边界翻案”。某标段基坑开挖作业初始评估是显著危险但连续降雨后土体含水率上升专家复评时 L 值上限明显抬升D 值区间整体右移判定结果就变成了高度危险。用传统 LEC 的精确打分法这种变化往往要等到连续两次评估分数都越线才能被发现而云模型在第一次评估时就能用“高熵”给出预警信号。4.4 常见报错与排查我把这套代码在几台不同环境的 Matlab 上跑过碰到的问题基本集中在下面几个。现象原因解决方式运行报错 Undefined function randn极少见通常是 Matlab 环境异常重启 Matlab或在命令行执行 clear all相似度每次运行差异大云模型本身有随机性固定 rng(2024) 种子增大 N 到 10000 以上He 设得太大云图散成一团熵的扰动过度He 控制在 En 的 0.1 倍以内相似度全部为 0待评云与标准云相距过远云滴隶属度接近 0检查数字特征单位是否一致标准云区间是否合理D 的三角模糊数出现负数L/E/C 中某分量的下限填错为负数检查打分输入L/E/C 下限一般不应小于 0.1、0.5、1最高相似度并列待评云恰好位于两个等级云中间取更严格等级并说明边界不确定性还有一个容易忽略的问题部分 Matlab 版本默认显示小数位数较少fprintf 里用了 %.2f 和 %.4f 就可以避免这个困扰。老版本如果没有 normrnd 函数换成 randn 的写法即可我把代码里都改成了 randn兼容性更好。4.5 方法局限性什么时候不应该用这套组合再好的方法都有边界这套“三角模糊 LEC 云模型”也是一样。LEC 本身是半定量方法D 值并不等于真实事故概率它给的是相对危险性的可比排序所以这套模型适合单个作业活动的风险评估、多个作业活动的风险一致性对比但不适合用来做精确到小数点后两位的定量风险概率计算。如果项目要求的是严格的事故概率量化比如要做 QRA 定量风险分析那应该考虑事件树、故障树加蒙特卡洛模拟不是 LEC 这条路。另外一个容易踩的坑是LEC 的三个因素事实上存在耦合关系。基坑渗水会同时推高坍塌可能性和人员暴露程度管廊吊装作业中如果吊索具老化L 和 C 也会联动上升。三角模糊打分是独立打分无法自动反映这种相关性。工程上我一般用“分险源拆分”来缓解把“基坑渗水”“支撑变形”“吊装超载”等耦合较强的环节拆成独立的评估单元分别打分而不是混在一个作业活动里评一个大而全的风险。这样可以最大限度规避 LEC 框架自身对相关性无能为力的问题。最后再说一句大家普遍会忽略的点这套方法里专家打分的质量决定了模型输出的质量。云模型、三角模糊数再精巧也只是把专家主观性表达得更充分而不是替代专家判断。所以现场踏勘一定要做足打分人员尽量涵盖施工、安全、技术三条线必要时还要邀请有类似地质条件施工经验的专家参与否则算出来的云模型只会把错误共识包装得更加华丽。我个人在实际操作中的体会是这套方法最值得用的场景不是专家意见很一致的常规评估而恰恰是专家分歧明显、风险不确定性强的大型风险源。当相似度向量里出现两个等级的数值接近时我反而会更警惕因为这说明该项目风险正处于过渡状态管理上需要同时准备两套预案。建议大家在交付评估报告时把云特征和相似度向量一起附上既保留中间过程也让决策者看到风险边界的真实宽度。代码本身不难难的是把工程经验转化成合理的三角模糊区间这个功夫在现场不在 Matlab 里。