ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

综合管廊施工安全风险评估:基于三角模糊LEC云模型的MATLAB实现

综合管廊施工安全风险评估:基于三角模糊LEC云模型的MATLAB实现 综合管廊施工这行凡是下过现场的都清楚风险点大多藏在你眼睛看不到的地方——十几米深的基坑边坡、封闭管廊内部的通风死角、和既有市政管线交叉的顶管断面。要把这些风险量化到能给班组交底、能给监理和业主签字确认的程度光靠我感觉这段有点悬肯定是不够的。这些年工程上比较主流的一套做法是拿作业条件危险性评价法也就是LEC法对每个风险点从可能性、暴露频率、后果严重度三个维度打分算出D值再定级。可真正用过的人都知道LEC落地时有三道绕不过去的坎专家打分太主观、LEC本身是精确数表达不了模糊判断、等级边界又是一刀切。我这篇要聊的就是把三角模糊数和云模型这两样东西嵌进LEC里再配合matlab把整条评估链路跑通的一套完整方案。说白了基于三角模糊LEC云模型的综合管廊施工安全风险评估研究核心目标就是让评估结论更贴近现场的真实感受而不是专家拍脑袋拍出来一个看着很精确、实际上站不住脚的数字顺带附上能直接复现的matlab代码。1. 传统LEC为什么在管廊施工里不够用1.1 LEC法的适用场景和它天生的短板LEC这套方法能流行几十年不是没有道理的。它的公式简单到一句话能说清D L × E × C其中L代表事故或危险事件发生的可能性E代表人员暴露在危险环境中的频繁程度C代表一旦发生事故可能造成的后果严重度。三个因子各自按一套经典标度取值L从0.1到10E从0.5到10C从1到100乘出来的D值再对照一个分级表比如D大于320算极其危险、160到320算高度危险、70到160算显著危险、20到70算一般危险、小于20算稍有危险。优点是直观、可操作、有明确的出处交底的时候工人也能听懂。我做过几个市政项目监理和总包基本都认这套。但它的问题从第一天用就暴露了。首先是打分环节L、E、C本质上都是专家凭经验给的判断老师傅说这东西可能性大概3可他心里想的其实是可能2到4之间取个中间值3吧。你把这个3写进表里后面的乘法就把这个不确定性彻底抹平了最后算出来的D值看起来精确到小数点后两位实际上从源头就已经蒙上了一层模糊。其次是边界问题70和71这两个D值按规则一个算一般危险一个算显著危险可就差一分,现场的危险程度真的有那么大台阶吗这种硬阈值在实际评估里经常导致踩线争议专家吵半天就为了这1分该算哪一级。管廊施工的风险恰恰又高度依赖经验判断、边界又天然模糊这两个短板在这里被放得特别大。1.2 三角模糊数补上专家说不清这一环三角模糊数就是用来装这种说不清的。一个三角模糊数用三个参数表示记作A(a,b,c)其中a是悲观值b是最可能值c是乐观值且满足a≤b≤c。它的隶属度函数是一条三角形在b处取到1向两边线性衰减到0。为什么是三个而不是一个或者两个因为专家做判断时的思维结构本来就是三段的最坏能坏到哪、最可能是什么情况、最好也就这样。你让老师傅对基坑支护失稳的可能性打分他嘴上说大概3但你追问一句他往往会补上保守点至少2、乐观了说4。这三个数就是天然的三角模糊数(2,3,4)。相比单一精确数三角模糊数最大的好处是保留了专家判断的带宽。带宽越宽说明这个专家越没把握带宽越窄说明他经验足、判断稳。这个信息在传统LEC里是被完全丢弃的。而且三角模糊数有一整套成熟的运算规则加法、数乘、加权平均都能闭式算聚合多位专家意见的时候也不会引入额外的失真。把它塞进LEC的L、E、C三个维度里等于给每个专家打分装了一个置信区间后面再谈综合评估就有了分寸感。这一步是整个方法能不能立得住的地基。1.3 云模型把等级边界的一刀切变成渐变云模型解决的是另一头的问题。它是用期望Ex、熵En、超熵He三个数字去描述一个定性概念——注意这里描述的不是一个数而是一个概念。Ex是概念的中心值En刻画这个概念的模糊程度也就是取值范围He刻画云滴的离散程度也就是随机性。用正向云发生器一跑一个定性概念就会在论域上散成一片密密麻麻的云滴中心密、边缘稀非常直观。拿风险等级来说显著危险这个概念传统上被定义成D在70到160之间边界是死的。可你一旦用云模型表示它中心大概在115附近En大约15那么一个D值等于70的评估对象它对显著危险的隶属度可能只有零点几对一般危险的隶属度也不高它是处在两个云的过渡带里隶属度是渐变的。这就把71和70差一级的荒谬问题化解了。管廊施工的风险等级划分本身就带着人为约定的成分用云模型表示等于承认边界附近确实存在说不清到底算哪级的区域这比硬划一条线要诚实得多也更符合工程实际。2. 整体建模方案拆解从专家打分到风险等级的四步链路2.1 风险评估指标体系怎么搭才贴合管廊施工方法再好指标搭错了也是白搭。综合管廊施工和普通房建、普通市政差别很大它的风险是复合型的。我一般从几个维度切基坑工程是头号风险源深基坑支护失稳、地下水突涌、周边地表沉降几乎每个项目都要盯结构工程里模板支架坍塌、大体量混凝土浇筑的侧压力也是老问题管廊特有的有限空间作业是重灾区廊内通风不足导致中毒窒息、缺氧这类事故一旦发生就是群死群伤再有顶管和盾构推进段的地表隆起沉降、既有管线的破坏加上通用性的高处坠落、起重吊装物体打击、临时用电触电这些。我建议指标体系别贪多一层一层的往下拆最终落到可以直接打分的底层因素上一般控制在一级指标5到6类、底层因素8到12个比较合适。因素太少覆盖面不够太多专家打分质量直线下降到了七八十个因素专家基本就是随手勾了那模糊数带宽反而全是噪声。我这次演示取9个底层因素深基坑支护失稳、有限空间中毒窒息、顶管盾构段地表沉降、高处坠落、起重吊装伤害、临时用电触电、模板支架坍塌、地下水突涌、周边既有管线破坏。这个粒度既能覆盖主要风险又不至于让专家打崩溃。2.2 四步链路打分、聚合、转云、定级整套方法的骨架我拆成四步。第一步专家对每个因素的L、E、C分别用语言变量打分每个语言变量对应一个预设的三角模糊数这一步把定性判断变成模糊数。第二步把多位专家的三角模糊数按权重加权平均聚合出每个因素在每个维度上的综合三角模糊数再近似算出D值的三角模糊数这样每个因素就有了一个带带宽的危险值。第三步把每个因素的D值三角模糊数转换成云参数也就是从(a,b,c)映射到Ex、En、He这样每个因素就从模糊数升级成了云。第四步按因素权重把各因素的云合成一个总的综合云再拿这个综合云去和五个标准等级云比对相似度相似度最高的那个等级就是最终的风险等级。这四步是一条链每一环都对应一个具体的痛点。第一步和第二步对付的是专家主观性和个体差异第三步是为云模型做准备第四步对付的是等级边界模糊。整条链路既保留了LEC三个维度相乘的核心思想又把模糊性和随机性这两个在工程判断里躲不开的东西显式地建了模。相比直接上神经网络、支持向量机那类需要大样本的黑箱模型这套方法在管廊施工这种样本量小、强依赖专家经验的场景里反而更实用因为它的每一步都能解释清楚评审专家问起来你能说出为什么。2.3 关键标度和参数的选取逻辑有两个地方特别容易出问题一个是语言变量到三角模糊数的映射表一个是权重的确定。映射表的选择直接影响结果我不建议自己凭空造最好参照经典LEC标度去反推。比如L维度经典LEC里完全可能对应10、相当可能对应6、可能但不经常对应3、可能性小对应1那么我给它配的三角模糊数就围绕这些中心值展开取(8,10,10)、(4,6,8)、(2,3,4)、(0.5,1,2)这样悲观值和乐观值往两边拉一点幅度控制在±30%到50%之间。拉太开模糊性过强结果会失真拉太窄跟直接用精确数没区别。权重这块可以用层次分析法算也可以请专家直接给区间。我倾向于用AHP先算一遍主客观结合的权重再用它来做云的加权合成。要注意权重必须归一化五个八九个因素加起来等于1。还有一个隐藏的坑是量大不同的因素权重不能一刀切比如地质灾害类的因素虽然权重不一定最高但一旦发生后果很重这时候可以在C的标度上把它拉高而不是硬去调权重。这些取舍逻辑我在第四节代码里会对照着再讲一遍避免只看公式不知道为什么要这么配。3. 三角模糊数与云模型的核心数学细节3.1 三角模糊数的表示、运算与去模糊化先明确记号。三角模糊数A(a,b,c)隶属度函数写出来就是当x在a到b之间时等于(x-a)/(b-a)当x在b到c之间时等于(c-x)/(c-b)其余为0。它有两个基本运算需要掌握两个三角模糊数相加结果还是三角模糊数只是三个参数各自相加也就是(a1,b1,c1)(a2,b2,c2)(a1a2, b1b2, c1c2)用一个正数k去乘则是(ka,kb,kc)。多位专家聚合用的加权平均也能保持三角模糊数的形式这也是它比梯形模糊数更受欢迎的原因——运算封闭性好不会越算越复杂。去模糊化是把三角模糊数还原成一个清晰数的过程这一步在计算D值的时候用得上。最简单的是重心法直接取(a2bc)/4或者更粗暴的(abc)/3。前者给最可能值更高的权重更符合专家判断的语义后者计算更快。我个人在工程里倾向用(a2bc)/4因为它强调了最可能值b的地位而b恰恰是专家最有把握的那个数。也有用积分型重心法的把一个三角形做二重积分求重心算出来更精确但工程意义不大一般没必要。要注意的是去模糊化只在需要最终清晰数的时候才做中间过程能保持模糊数就保持这样才不会把好不容易保留的模糊信息提前丢掉。3.2 从三角模糊数到云参数的转换这一步是整套方法里的关键衔接。云模型的正向发生器需要Ex、En、He三个参数而我们手上是D值的三角模糊数(da,db,dc)怎么转我的做法是Ex取最可能值db因为它是这个概念的中心En取(dc-da)/6这个6不是随便来的它来自正态分布的3σ原则——三角模糊数的宽度大致对应不确定范围的6倍标准差所以右端减左端再除以6就得到了合理的熵He作为超熵反映随机性工程上一般取一个很小的常数比如0.01或者取En的5%到10%。这里要提醒一句三角模糊数的底边宽度和云的熵不是同一回事前者是区间宽度后者是标准差量纲所以除以6这个操作本质上是一种经验对齐不是严格等价的数学变换。但它在工程上很好用因为两边都在描述这个判断有多大不确定性量级对得上。如果你发现某个因素的En算出来特别大比如超过了Ex的一半那说明专家意见分歧极大这时候要么回去重新组织打分要么就在报告里明确标注这个因素结论不稳需要补充调研。转云之后每个因素就同时携带了中心和带宽两层信息比单纯的D值信息量大多了。3.3 综合云合成与等级云构造有了每个因素的云下一步就是合成。综合云参数我用的是一种工程上常用的加权线性合成Ex_c等于各因素Ex按权重的加权和En_c等于各因素En的加权和He_c同理。这里其实云模型的合成方式有讲究严格来说有虚拟云的算法比如把多个云并联或者串联公式里会出现En平方和开根号这类形式。但在我这个项目里因为各因素的D值量纲一致、权重之和为1用简单的加权线性合成既稳定又好解释评审的时候不容易被挑刺。等级云就更好办了。把D值的讨论域切成五段对应五个等级。取等级区间的中点做Ex取区间宽度除以6做EnHe取小常数。比如70到160这一段中点115就是Ex宽度90除以6等于15就是En。首尾两段没有自然边界需要人为设定比如最低一级取0到20最高一级取320到400。这里有个小技巧最高段的右边界设多少其实影响不大因为管廊施工里超过400的D值基本已经进入必须停工整改的区间评到这个等级后面的处置动作是一样的设400还是设500对最终定级结果没影响。构造好等级云之后用综合云去和这五个云逐一算相似度相似度最高者胜出。4. MATLAB全流程实现代码可直接抄4.1 专家打分表与三角模糊数聚合先讲数据准备。我这边假设三位专家对9个因素分别打L、E、C的等级等级用1到6的序号表示1代表最低一档。打分矩阵用三维数组存第一维是因素、第二维是L/E/C三个维度、第三维是专家。下面这段代码可以直接跑把等级序号映射成三角模糊数再做加权聚合。注意三角模糊数的映射表是按L、E、C三个维度分别定义的因为三者的经典标度量纲不同不能混用一张表。% 4.1 专家打分聚合 % 3位专家对9个因素的[L,E,C]等级打分(1-6) S cat(3, ... [5 4 4; 4 5 5; 3 3 4; 4 4 3; 3 3 3; 2 4 3; 4 5 4; 3 2 4; 3 3 3], ... % 专家1 [5 5 4; 4 4 5; 3 4 4; 4 3 3; 3 4 3; 3 4 3; 4 4 4; 2 3 4; 3 3 4], ... % 专家2 [4 5 5; 5 5 4; 4 3 4; 5 4 4; 3 3 3; 2 3 3; 5 5 4; 3 3 3; 2 3 3]); % 专家3 nF size(S,1); nE size(S,3); % 每个维度的语言变量到三角模糊数的映射表(6级) L_scale [0.1 0.1 0.2; 0.2 0.3 0.5; 0.5 1 2; 2 3 4; 4 6 8; 8 10 10]; E_scale [0.3 0.5 0.7; 0.5 1 1.5; 1.5 2 3; 3 4 5; 5 6 8; 8 10 10]; C_scale [1 1 3; 1 3 5; 3 7 11; 11 15 25; 25 40 60; 60 100 100]; scales {L_scale, E_scale, C_scale}; % 专家权重(可换成AHP算出的结果) wE [0.4 0.35 0.25]; wE wE / sum(wE); % 聚合得到每个因素每个维度的综合三角模糊数 T_agg zeros(nF, 3, 3); % 因素 x 维度 x 三角参数 for f 1:nF for d 1:3 tmp zeros(1,3); for k 1:nE lev S(f, d, k); tmp tmp wE(k) * scales{d}(lev, :); end T_agg(f, d, :) tmp; end end disp(因素1的L维度综合三角模糊数:); disp(squeeze(T_agg(1,1,:)));这段跑完T_agg(f,d,:)就是第f个因素在第d个维度上聚合后的三角模糊数。我第一次写的时候忘了给权重归一化结果算出来D值整体偏大后来加了wE wE/sum(wE)才对上。这个细节很不起眼但真能坑你半天。4.2 LEC计算与因素云生成接下来算每个因素的D值三角模糊数并转成云。这里我要强调一个近似处理严格的模糊数乘法结果是梯形而不是三角形直接算会越算越乱。工程上普遍用参数对应相乘来近似也就是D的三角参数等于L的a乘E的a乘C的a作为D的a其他两个同理。这个近似在小带宽的时候误差很小值得用。转云的时候Ex取D的最可能值En取(D的c减D的a)除以6。代码接着上面的继续写。% 4.2 计算D值三角模糊数并转云 D_T zeros(nF, 3); % 每个因素的D值三角模糊数 clouds zeros(nF, 3); % [Ex, En, He] He_const 0.01; for f 1:nF La T_agg(f,1,1); Lb T_agg(f,1,2); Lc T_agg(f,1,3); Ea T_agg(f,2,1); Eb T_agg(f,2,2); Ec T_agg(f,2,3); Ca T_agg(f,3,1); Cb T_agg(f,3,2); Cc T_agg(f,3,3); % 参数对应相乘得到D的三角模糊数(近似) D_T(f,:) [La*Ea*Ca, Lb*Eb*Cb, Lc*Ec*Cc]; % 转云 clouds(f,1) D_T(f,2); % Ex 最可能值 clouds(f,2) (D_T(f,3) - D_T(f,1)) / 6; % En 宽度/6 clouds(f,3) He_const; % He 取小常数 end % 打印前三个因素的D值和云参数 for f 1:3 fprintf(因素%d: D(%.1f, %.1f, %.1f), Ex%.2f, En%.2f\n, ... f, D_T(f,1), D_T(f,2), D_T(f,3), clouds(f,1), clouds(f,2)); end跑出来能在命令行看到每个因素的D值区间和它对应的Ex、En。到这一步其实已经能看出门道了带宽大的因素En就大说明这个风险的不确定性高后续合成的时候它的影响会摊得比较开。我实测过一个深基坑因素专家分歧大En算出来接近20而一般因素也就三五这个差异在最终云图上看得非常清楚。4.3 综合云合成、相似度定级与云滴图最后一步是合成综合云、跟五个等级云比相似度、画图。相似度我用两条期望曲线的相关系数来算这个方法比算云滴重叠面积简单代码短结果也稳。等级云的区间按经典LEC分级来最低段补一个[0,20]最高段补到[320,400]。% 4.3 综合云合成与等级判定 % 9个因素对整体安全的权重(归一化可用AHP替换) w [0.18 0.16 0.12 0.14 0.10 0.08 0.09 0.07 0.06]; w w / sum(w); % 加权线性合成综合云 Ex_c w * clouds(:,1); En_c w * clouds(:,2); He_c w * clouds(:,3); fprintf(综合云参数: Ex%.2f, En%.2f, He%.3f\n, Ex_c, En_c, He_c); % 构造5个等级云 lv_range [0 20; 20 70; 70 160; 160 320; 320 400]; lv_name {稍有危险,一般危险,显著危险,高度危险,极其危险}; Ex_l mean(lv_range, 2); En_l (lv_range(:,2) - lv_range(:,1)) / 6; He_l He_const * ones(5,1); % 用期望曲线相关系数算相似度 x linspace(0, 420, 2000); y_c exp(-(x - Ex_c).^2 ./ (2 * En_c^2)); sim zeros(5,1); for i 1:5 y_l exp(-(x - Ex_l(i)).^2 ./ (2 * En_l(i)^2)); R corrcoef(y_c, y_l); sim(i) R(1,2); end [~, best] max(sim); fprintf(最终风险等级: %s (相似度%.4f)\n, lv_name{best}, sim(best)); % 画综合云和等级云对照图 figure(Color,w); hold on; for i 1:5 yy exp(-(x - Ex_l(i)).^2 ./ (2 * En_l(i)^2)); plot(x, yy, --, LineWidth, 1); end plot(x, y_c, k-, LineWidth, 2); xlabel(D值); ylabel(隶属度); legend([lv_name, {综合评估}], Location,best); title(综合管廊施工安全风险云图); grid on;云滴散点图用正向云发生器再补一段就行逻辑是先生成随机化熵En_n En He*randn再生成云滴Ex En_n*randn隶属度按高斯公式算。这里我把正向发生器的实现代码也写出来方便直接出那种一大片云滴的经典图function [xd, yd] fwd_cloud(Ex, En, He, n) En_n En He * randn(n,1); xd Ex En_n .* randn(n,1); yd exp(-(xd - Ex).^2 ./ (2 * En_n.^2)); end主程序里调用[xd,yd]fwd_cloud(Ex_c, En_c, He_c, 5000)就能散出综合云的云滴。整套代码不需要任何特殊工具箱R2016b以上的matlab都能跑因为用到了数组隐式扩展。网上有些人纠结matlab 2026b、2025那些版本的兼容性其实这套代码连统计工具箱都不用corrcoef是内置的正版授权或者常规安装的matlab装好就能直接执行省心。5. 实操中踩过的坑和排查清单5.1 打分冲突、权重异常、结果突变怎么查最常见的翻车是专家打分严重冲突。三位专家对一个因素的可能性一个给5一个给2聚合出来的带宽(c-a)特别大转成云之后En巨大这个因素在云图上就是一团散得没边的雾跟谁比相似度都很低。遇到这种情况别硬算先回去看是谁打的分跟别人差这么远是不是他对这个风险点有特殊的现场认知问清楚再决定是保留还是重打。我一般会设一个阈值如果某个因素的En超过它Ex的60%就标红预警提示需要复核。这不是代码能自动解决的得靠人。权重异常也常遇到。如果权重没归一化综合云的Ex会整体偏移最后定级偏高一到两个档。还有一种隐蔽的情况权重加起来是1但某个因素权重过大比如超过0.3那综合云基本就被它一个人带偏了其他因素再高也拉不动。这种情况要么是AHP矩阵一致性没通过要么是专家对权重理解有偏差。我建议每次算完都打印一下权重向量人工扫一眼有没有异常大的值一眼就能看出来。结果突变则多半是等级边界附近综合云Ex落在两个等级云交叠区相似度前两名很接近这时候别只报第一名把前两名的相似度都列出来让决策者知道这处在过渡带需要结合现场实际再判断。5.2 量纲、参数、出图的避坑清单下面这张表是我整理的高频坑做这个课题的同学照着核对一遍能省不少事。问题现象可能原因排查与解决D值整体偏大L/E/C映射表量纲没分开定义三个维度各用一张标度表别共用综合云En异常大某因素专家意见分歧过大检查该因素打分必要时重新打分相似度全部很低综合云Ex离所有等级云都远检查权重是否归一化、论域是否合理云滴图散得看不出形状He取太大He取0.01或En的5%左右定级结果在边界反复横跳综合云落在两等级交叠区同时报告前两名相似度人工复核代码报错维度不匹配权重向量方向不对权重转成行向量用w*x或列向量用w*x出图这块还有个细节matlab默认的legend多曲线混在一起会很乱建议把等级云用虚线、综合云用粗实线颜色错开评审的时候一眼能分清哪个是哪个。另外论域范围别设得太小如果综合云Ex接近420就会被截断图会很难看把linspace的上限留够余量。注意三角模糊数转云时
返回列表