
综合管廊的施工现场跟普通房建项目完全不是一个路数。它是一条埋在地下的长条形空间基坑深、战线长、多工种交叉、有限空间作业集中风险点密得像一张网而且沿线上千米范围内地质条件还经常变化。我这两年一直在做管廊施工的安全风险评估最早用的就是传统 LEC 法几张专家打分表填完D 值一算分级一划评估报告几天就能出来。但真到了现场核查环节问题就冒出来了同一段基坑两位专家一位打 3 一位打 6取平均变成 4.5这个 4.5 到底代表两人都觉得是中等风险还是一个人觉得还行、另一个人觉得快出事了LEC 法给不出答案而这个差别在管廊这种深度大、暴露时间长的作业面上往往就是要不要停工整改的分界线。后来我把三角模糊 LEC 和云模型拼到一起用这件事才算理顺。三角模糊数负责把三分到六分之间、大概四分这种专家嘴里的模糊语言翻译成可以参与运算的数云模型负责把一组专家打分的离散程度还原成期望、熵、超熵这三个特征量最后画出来的云图一眼就能看出综合风险落在哪一档以及这个判断本身有多散。整套东西我用 MATLAB 实现了一遍核心代码不到两百行只用到了基础函数和统计工具箱里最常见的几个不需要额外工具箱。下面就把指标体系怎么搭、模糊数怎么算、云发生器怎么写、代码跑起来会踩哪些坑完整捋一遍。有 LEC 底子的、正在做管廊或类似深基坑项目安全评估的、或者手头压着一堆专家打分表不知道怎么处理的朋友都可以照着走一遍。1. 传统 LEC 在管廊施工场景里到底卡在哪1.1 三因子打分的原始规则先讲清楚LEC 法出自格雷厄姆和金尼提出的作业条件危险性评价核心公式就一行D L × E × C。其中 L 是事故发生可能性E 是人员暴露于危险环境的频繁程度C 是事故一旦发生造成的后果严重度D 就是危险性总分。这套方法的取值表是行业里通用的我把它整理成下面这张表方便后面配色和标定时对照。分值L事故发生可能性E暴露频繁程度C事故后果严重度10完全可以预料连续暴露大灾难多人死亡6相当可能每天工作时间内暴露灾难数人死亡3可能但不经常每周一次或偶然暴露非常严重一人死亡2—每月一次暴露—1可能性小完全意外每年几次暴露引人注意需要救护0.5很不可能可以设想非常罕见暴露—0.2极不可能——0.1实际不可能——D 值的分级也是固定套路大于 320 属于极其危险不能继续作业160 到 320 是高度危险需要立即整改70 到 160 是显著危险20 到 70 是一般危险小于 20 属于稍有危险可以接受。注意 C 的取值跨度特别大从 1 直接跳到 100这是 LEC 的一个设计特点也是为了在乘法结构里放大后果的权重。管廊施工具体用起来我一般会把 L 拆成该分项工程历史上同类事故的发生频率和当前防护措施到位程度两个维度综合判断E 看的是这个工序每天有多少人、待多久C 则直接对应《企业职工伤亡事故分类》里的人员伤亡和经济损失口径。这三项打分表发下去五位专家独立填收回来就能算。1.2 单点数值丢掉的恰恰是专家意见的分歧传统 LEC 最大的毛病是它默认专家能给出一个精确的点值。但实际情况是你问一位干了二十年的安全总监这段基坑发生围护结构失稳的可能性有多大他给你的回答大概率是六分吧也可能五分具体看下周下雨不下雨。这是一段区间不是一个数字。更麻烦的是后续处理。五位专家打出的 L 值分别是 1、3、3、6、6取算术平均得到 3.8。这个 3.8 在计算上没问题但它把两组完全不同的意见压缩成了同一个数一组是五人全打 3 到 4意见高度一致另一组是两极分化一半认为没问题、一半认为风险很大。前者可以按常规管控后者必须专门开会讨论那两位打 6 分的专家到底看到了什么。平均之后这个关键信息就没了。传统上大家用离散系数或者变异系数来补救能看到一点分歧但看不到分歧的形状。而且 LEC 的取值表本身是跳档的0.5 之后跳到 11 之后跳到 33 之后跳到 6两个相邻档位之间的实际风险差距其实很小但计算出来的 D 值差距可能翻倍。这种硬边界会让人产生假精度的错觉——报告上写着 D73.5看起来煞有介事实际上它跟 D68 没有本质区别。1.3 管廊施工的风险特征放大了 LEC 的短板管廊工程有几个特别的地方会让 LEC 的短板被放得更大。一是工序耦合强。管廊基坑开挖、支护、降水、主体结构浇筑、防水、回填、机电安装是流水交叉的同一个作业面上常常同时存在三个以上工种。风险的相互作用远大于叠加LEC 对每个分项单独打分再汇总的做法恰恰切断了这种耦合关系。二是暴露时间长。一条三公里的干支线管廊主体施工周期动辄十几个月工人每天在基坑里待八小时以上E 因子的取值很容易就压到 6 甚至 10全项目 E 值拉不开差距权重实际上被架空了。三是事故后果差异悬殊。管廊基坑坍塌可能是群死群伤卷材防水施工的火灾可能只是局部烧伤燃气管道破坏则可能引发次生灾害。C 值从 3 到 100 的跨度让 D 值的量级差异极大直接拿 D 值做比较很不直观。这三个特征叠加起来结论就很清楚不是 LEC 本身错而是管廊这个场景需要一套能表达模糊判断、能保留专家分歧、能把量级压缩到可比区间的处理方式。2. 三角模糊数与云模型两个工具各自补哪块短板2.1 三角模糊数把大概四分变成可运算的区间三角模糊数的定义很朴素一个三元组(a, b, c)其中 a 是下界b 是最可能值c 是上界。它的隶属函数是一个三角形在 b 点取最大值 1向左右两侧线性衰减到 a 和 c 处归零。管廊安全评估里专家说L 大概是 3 到 6 之间最可能是 4翻译过来就是 L̃ (3, 4, 6)。为什么选三角形而不是梯形或者高斯型我的理解是三点。第一三角形的参数最少三位专家各给一个最可能值、一个悲观值、一个乐观值凑成三元组就行问卷负担小专家配合度高。第二管廊施工的安全判断本身就是最可能 上下浮动的思维结构三角形的形状跟这个思维结构天然吻合。第三后续运算简单三角模糊数的乘法仍然是三角模糊数不会退化成非标准形式。三角模糊数的乘法和加法都有标准公式。加法是逐位相加(a₁,b₁,c₁) ⊕ (a₂,b₂,c₂) (a₁a₂, b₁b₂, c₁c₂)。乘法在三个数都为正时用逐位相乘(a₁,b₁,c₁) ⊗ (a₂,b₂,c₂) (a₁a₂, b₁b₂, c₁c₂)。LEC 的三个因子 L、E、C 全部取正值所以乘法规则可以直接用这一点很重要省掉了很多麻烦。去模糊化我用的是均值面积法D (a 2b c) / 4。这个公式给了最可能值双倍权重两端各一倍比简单平均值更能反映专家的真实判断也比重心法需要积分好算。有人用 (a 4b c) / 6差别不大我在管廊项目上对比过两种公式算出来的风险排序几乎一致最终等级判定没出现过翻转。选哪个主要看你希望最可能值的权重有多高我习惯用 1:2:1 这个比例。2.2 云模型用三个数字描述一个定性概念云模型是李德毅院士提出的用来解决这个概念到底属于哪个等级这种带随机性和模糊性的问题。它的核心是用三个数字刻画一个定性概念期望 Ex、熵 En、超熵 He。Ex 是概念的中心值可以理解为这个概念最典型的取值。比如中等风险这个等级如果评分区间是 4 到 6那 Ex 就取 5。En 是熵衡量概念的模糊程度也就是这个概念的覆盖范围有多宽。En 越大云滴散布越广等级边界越模糊En 越小云越收敛成一根竖线。它同时刻画了随机性和模糊性这是云模型比单纯用均值加标准差描述更到位的地方。He 是超熵衡量的是熵本身的不确定性直白点说就是云图有多厚。He 越大云图边缘越毛糙、越像一团雾He 越小云图边界越清晰。它的物理意义是专家群体对这个概念的模糊程度在认识上有多不一致。在管廊评估里He 一般取 En 的十分之一左右太大云图会糊成一片没法看。云模型有两个发生器一个反向一个正向正好对应评估的两个阶段。逆向云发生器从一堆数据点反推 (Ex, En, He)用在我们收集完专家打分之后正向云发生器从 (Ex, En, He) 生成一堆云滴用来画图跟标准等级云对比。2.3 两者的接口在哪里从模糊D值到云滴样本很多人第一次听这套组合会卡在一个地方三角模糊处理的是单个专家的判断云模型处理的是群体样本这两者到底怎么接上我的处理方式是分两步走逻辑链条是单专家模糊判断 → 单专家风险得分 → 群体样本 → 云参数。第一步请每位专家对自己负责的每个二级指标分别给出 L、E、C 的三角模糊数。注意是每位专家各给各的不是先汇总再模糊。第二步对每位专家先用模糊乘法算出他自己的三维 D 值 D̃ L̃ ⊗ Ẽ ⊗ C̃再用均值面积法去模糊得到一个清晰数。这样一位专家对 16 个指标就有 16 个 D 值。第三步把 D 值映射到 0 到 10 的评分区间。这一步不能省因为 D 的理论范围从 0.05 到 10000跨度五个数量级直接拿去做云模型标准等级云根本没法标定。我用的是对数映射具体公式和参数在第四章代码里。第四步对每个指标五位专家映射后的得分构成一组样本送进逆向云发生器得到该指标的 (Ex, En, He)。第五步用组合权重把 16 个指标云合成为综合云再跟五个标准等级云做相似度比较取相似度最大的那个作为判定等级。这条链条的好处是每一环的信息损失都可控。三角模糊阶段保留的是单专家判断内部的模糊性云模型阶段保留的是专家之间的分歧两部分信息各归各位不会互相污染。提示第三步的对数映射参数上下界一定要在项目开始时就定下来并写进评估方案中途改会让前后两批数据失去可比性。我吃过这个亏第二次评估调了映射区间前后风险排序居然变了。3. 评估模型的整体结构与指标体系搭建3.1 四类十六项二级指标的分解逻辑指标体系是整套评估的地基。管廊施工的风险分解我按分部分项 作业类型双维度切最后收敛到 4 个一级、16 个二级。切分的逻辑是一级指标对应管廊施工的主要分部工程阶段二级指标对应每个阶段里能独立打分、独立管控的具体风险源。这样切完每一项都能在施工现场找到明确的责任人和防护措施不会出现这条指标到底谁来管的扯皮。一级指标二级指标编号二级指标名称基坑与支护 AA1围护结构变形与失稳A2基坑降水与地下水控制A3土方开挖放坡与坑边堆载A4周边管线及建构筑物沉降主体结构 BB1模板支架体系失稳B2大体积混凝土浇筑与温控B3高处作业与临边洞口防护B4起重吊装与设备作业防水与附属 CC1卷材防水施工与动火作业C2变形缝及施工缝处理C3有限空间作业与气体监测C4临时用电与洞内照明机电与协调 DD1管线吊装与就位D2多工种交叉作业协调D3洞内通风与有害气体积聚D4应急疏散通道与逃生条件这里有个经验点值得说A4 和 C3 这两个指标是我在项目上加了三次才定下来的。早期版本里周边管线沉降被并进了基坑开挖有限空间作业被并进了临时用电结果两次内部评审都被一线安全员打回来理由是这两类风险在管廊项目里事故占比很高而且管控措施跟母指标完全不一样合并之后评估结果没有指导意义。指标独立性这个要求比理论完备性更重要。3.2 五个风险等级的标准云参数怎么标定标准等级云是判定的尺子。我把风险从低到高划成五档I 低风险、II 较低风险、III 中等风险、IV 较高风险、V 高风险。评分区间 0 到 10每档等宽 2 分。等级语义评分区间ExEnHeI低风险[0, 2]1.00.50.05II较低风险[2, 4]3.00.50.05III中等风险[4, 6]5.00.50.05IV较高风险[6, 8]7.00.50.05V高风险[8, 10]9.00.50.05Ex 取区间中点没有争议。En 的标定是这套方法里最需要经验的一步。常用的经验规则是 En 取区间宽度的六分之一到四分之一这里区间宽 2En 就在 0.33 到 0.5 之间。我最终取 0.5理由是管廊施工的风险等级边界本身就不清晰D 值算出来 5.9 和 6.1实际管控措施可能完全一样把 En 调小会让等级判定过于硬稍微偏一点就跨档。He 取 En 的十分之一也就是 0.05。这个值是让云图保持好看的毛边效果不至于糊成一团。有同行取 0.1 倍我也试过云图边缘会明显毛糙相似度计算的方差变大需要把云滴数量提到一万以上才稳定性价比不高。注意En 一旦定了就不要在同一个项目里改。它直接决定相似度计算的结果改了 En 等于换了尺子前后两次评估的等级没法横向比较。3.3 权重来源AHP 与熵权的组合权重这块我走的是组合路线。主观权重用层次分析法AHP请专家对 4 个一级指标做两两比较构造判断矩阵算最大特征值对应的特征向量再做一致性检验CR 小于 0.1 就算通过。这一步的代码不复杂用eig函数几行就能搞定。我在管廊项目上做的判断矩阵A 类基坑的权重最高一般在 0.35 左右D 类机电最低0.15 上下这跟事故统计的分布基本吻合。客观权重用熵权法。熵权法的思想是某个指标在所有专家、所有方案下的取值差异越大说明它携带的信息越多权重应该越高。这里的方案对应五位专家的打分列。最后组合w 0.5 × w_AHP 0.5 × w_熵再归一化。为什么不偏不倚各取一半实测下来如果完全用 AHP权重会被专家经验主导一些老专家容易把注意力集中在基坑上忽略机电安装如果完全用熵权又可能把某个专家打分特别离谱的指标权重抬得很高出现越乱越重要的荒谬结果。五五分是我试过几次之后觉得最稳的比例当然这个系数可以根据项目特点调比如机电占比特别大的综合管廊主观权重可以提到 0.6。4. MATLAB 完整实现流程4.1 数据准备与三角模糊打分矩阵的组织方式代码组织上我踩过一个坑值得提前说一开始我用元胞数组存专家打分写起来方便但后续做向量化计算和索引非常别扭尤其是要按指标、按专家、按因子三个维度切片的时候。后来改成四维数值数组代码立刻清爽了很多。数据维度安排是tnf(指标序号, 专家序号, 因子序号, 三元组序号)大小 16×5×3×3。因子序号 1、2、3 分别对应 L、E、C三元组序号 1、2、3 对应下界 a、最可能 b、上界 c。实际项目里这个矩阵从 Excel 读进来录入模板我建议做成三层表头第一行指标、第二行专家、第三行因子一个专家一个工作表收表的时候不容易错行。%% 0. 环境清理与随机种子 clear; clc; close all; rng(20240101, twister); % 固定种子保证云图可复现 %% 1. 基本参数 nInd 16; % 二级指标个数 nExp 5; % 专家人数 fMax [10, 10, 100]; % L、E、C 三个因子的取值上限 %% 2. 构造专家三角模糊打分矩阵 % tnf(i,e,f,:) [a b c] % 实际项目请替换成tnf read_tnf(expert_score.xlsx); tnf zeros(nInd, nExp, 3, 3); for f 1:3 for i 1:nInd for e 1:nExp b 0.15*fMax(f) 0.70*fMax(f)*rand(); % 最可能值 a b * (0.55 0.25*rand()); % 下界 c min(b * (1.15 0.35*rand()), fMax(f)); % 上界 tnf(i,e,f,:) [a, b, c]; end end end这里生成的演示数据只是为了让代码能跑通真实项目一定要换成真专家打分。判断方法很简单如果跑出来的所有指标云参数都差不多那大概率是数据没读进去。4.2 模糊乘法、去模糊化与风险得分映射这一步是整套流程的数值核心三个动作连在一起模糊乘、去模糊、对数映射。模糊乘要把每位专家的 L̃、Ẽ、C̃ 各自乘起来。因为都是正数直接逐位相乘即可结果的 a、b、c 仍然是单调排列的三角形形状保持。去模糊用均值面积法。映射这一步的上下界我取 D_lo 0.5、D_hi 5000这是根据 LEC 取值表的实际边界估的L 最低 0.1、E 最低 0.5、C 最低 1理论下界 0.05但管廊项目里 L 取 0.1 基本不现实实际操作下限在 0.5 左右上界 L10、E10、C100 对应 10000同样极少同时取满取 5000 更贴近实际分布。这两个参数写进代码顶部作为常量方便统一调整。%% 3. 模糊乘法 去模糊 得分映射 D_lo 0.5; D_hi 5000; % 映射区间务必固定在方案里 mapL log10(D_lo); mapU log10(D_hi); Score zeros(nInd, nExp); % 每位专家对每个指标的风险得分 Dmat zeros(nInd, nExp); % 去模糊后的 D 值便于追溯 for i 1:nInd for e 1:nExp Lf squeeze(tnf(i,e,1,:)); Ef squeeze(tnf(i,e,2,:)); Cf squeeze(tnf(i,e,3,:)); % 三角模糊数逐位相乘 Df [Lf(1)*Ef(1)*Cf(1), Lf(2)*Ef(2)*Cf(2), Lf(3)*Ef(3)*Cf(3)]; % 均值面积法去模糊 D (Df(1) 2*Df(2) Df(3)) / 4; Dmat(i,e) D; % 对数映射并截断到 [0,10] s 10 * (log10(max(D, D_lo)) - mapL) / (mapU - mapL); Score(i,e) min(max(s, 0), 10); end end运行完这一段Dmat里存的是原始 D 值可以直接对照 LEC 分级表看趋势Score是映射后的 0 到 10 得分后面云模型全用它。建议在正式分析前先画一张Dmat的热力图看看哪几个指标的专家得分出现了明显分化这几个往往就是需要重点讨论的。4.3 逆向云发生器求指标云参数逆向云发生器我用的是混合矩法Ex 用一阶原点矩En 用一阶中心绝对矩He 用二阶中心矩。这三个量算完之后每个指标就有一个 (Ex, En, He) 三元组。这里有个细节值得说明。标准的逆向云算法里En 和 He 都从二阶矩推出来但那样会得到一个恒等式 He En没有意义。混合矩法避开了这个问题En 用一阶绝对中心矩乘以 √(π/2) 估计He 从二阶中心矩减去 En 平方再开方得到。这套算法对样本量的要求是五个以上比较稳我们五位专家刚好卡在下限所以 He 的估计值会偏小实际用的时候我在代码里加了一个下限保护。%% 4. 逆向云发生器 Ex zeros(nInd,1); En zeros(nInd,1); He zeros(nInd,1); for i 1:nInd [Ex(i), En(i), He(i)] backward_cloud(Score(i,:)); end function [Ex, En, He] backward_cloud(x) n numel(x); Ex mean(x); En sqrt(pi/2) * mean(abs(x - Ex)); S2 var(x, 1); He sqrt(max(S2 - En^2, 0)); if He 1e-3, He 1e-3; end % 下限保护防止云图退化成竖线 if En 1e-3, En 1e-3; end end跑了之后你会发现像 B2 大体积混凝土温控这种工序标准化程度高、专家意见容易统一的指标En 会明显偏小而 A4 周边管线沉降这种受外部条件影响大的指标En 通常偏大。这个差异本身就很有信息量En 大的指标说明管控措施需要留更多冗余不能只按平均值配资源。4.4 组合权重与综合云合成权重这部分熵权的计算有个容易出错的点归一化必须在指标维度内做也就是按每一行每个指标的五位专家得分归一化不是按列。按列归一化会把不同指标的量级差异混进来算出来的熵权没有意义。组合云的合成公式我选用的是独立假设下的形式期望加权求和熵和超熵按平方和开方再开根。这是虚拟云算法里最常用的一种前提假设是各指标之间相互独立。管廊评估里这个假设是打了折扣的比如 A1 和 A4 之间存在耦合所以我在结果解读时会把综合云当成一个参考值重点还是看单指标云图。%% 5. 熵权法 AHP 组合权重 P Score ./ repmat(sum(Score,2), 1, nExp); P(P 0) 1e-12; k 1 / log(nExp); Ej -k * sum(P .* log(P), 2); dj 1 - Ej; w_ent dj / sum(dj); % AHP 权重示例值实际由判断矩阵计算并通过 CR 检验 w_ahp [0.11 0.09 0.08 0.07, ... % A1~A4 0.07 0.06 0.06 0.06, ... % B1~B4 0.05 0.04 0.05 0.04, ... % C1~C4 0.04 0.03 0.03 0.02]; % D1~D4 w_ahp w_ahp / sum(w_ahp); alpha 0.5; % 组合系数 w alpha * w_ahp (1 - alpha) * w_ent; w w / sum(w); %% 6. 综合云合成 Ex_c sum(w .* Ex); En_c sqrt(sum((w .* En).^2)); He_c sqrt(sum((w .* He).^2)); fprintf(综合云参数Ex%.4f, En%.4f, He%.4f\n, Ex_c, En_c, He_c);AHP 判断矩阵那部分我这里直接给了权重向量实际项目中要自己算。算法很简单构造矩阵后用[V, D] eig(A)取最大特征值对应的特征向量归一化之后就是权重。一致性检验用 CR CI/RICI (λmax - n)/(n-1)四阶矩阵的 RI 取 0.90CR 小于 0.1 通过。这一步别偷懒评审专家一定会问。4.5 正向云发生器绘图与等级判定最后是判定环节。我用的是云滴重叠度法对综合云和五个标准等级云各自用正向云发生器生成 5000 个云滴在 0 到 10 的分数轴上按 0.1 分一格做直方图并归一化然后逐格取两者的较小值再求和得到的重叠面积就是相似度。重叠度在 0 到 1 之间越大越相似取最大者对应的等级就是判定结果。这个方法比比较 Ex 距离更稳因为它同时用到了 En 和 He 的信息。缺点是要生成云滴计算量比查表大但 5000 个点的规模普通笔记本跑一次也就零点几秒完全不影响效率。%% 7. 标准等级云与相似度判定 std_Ex [1 3 5 7 9]; std_En 0.5; std_He 0.05; N 5000; edges 0:0.1:10; p_c cloud_hist(Ex_c, En_c, He_c, N, edges); sim zeros(1,5); for kk 1:5 pk cloud_hist(std_Ex(kk), std_En, std_He, N, edges); sim(kk) sum(min(p_c, pk)); end [~, lvl] max(sim); lvName {I 低风险,II 较低风险,III 中等风险,IV 较高风险,V 高风险}; fprintf(综合云相似度%.4f %.4f %.4f %.4f %.4f\n, sim); fprintf(判定等级%s\n, lvName{lvl}); %% 8. 绘图 figure(Color,w,Position,[100 100 900 500]); hold on; grid on; cols lines(5); for kk 1:5 [xd, yd] forward_cloud(std_Ex(kk), std_En, std_He, 2000); plot(xd, yd, ., Color, [cols(kk,:) 0.25], MarkerSize, 3); end [xc, yc] forward_cloud(Ex_c, En_c, He_c, 3000); plot(xc, yc, k., MarkerSize, 3); xlabel(风险得分); ylabel(隶属度); title(sprintf(综合风险云图判定%s, lvName{lvl})); xlim([0 10]); ylim([0 1.05]); legend([I;II;III;IV;V;综合], Location,northeast); %% 9. 两个云发生器函数 function [x, mu] forward_cloud(Ex, En, He, N) En_n En He * randn(1, N