数学建模竞赛实战:主客观结合综合评价模型在地质灾害评价中的应用
2026/8/27 4:30:07 网站建设 项目流程

1. 项目概述:从竞赛题目到可复现的解决方案

去年带学生参加Mathorcup(妈妈杯)数学建模竞赛,恰好碰到了C题“地质灾害评价的数学模型分析”。这道题很有意思,它把一个非常现实的工程与地质问题,抽象成了一个典型的综合评价与预测建模问题。简单来说,就是给你一片区域的各种地质环境数据,比如坡度、岩性、降雨量、植被覆盖度等等,让你去构建一个数学模型,来评价和预测这个区域发生滑坡、泥石流等地质灾害的危险性有多大。这不仅仅是做一道数学题,更是对数据挖掘、综合评价算法和空间分析能力的一次综合考验。很多队伍,包括一些新手,看到“地质灾害”、“评价模型”这些词可能会有点发怵,觉得是不是需要很深的地质专业知识。其实不然,数学建模的魅力就在于,它关注的是如何用数学工具去描述和解决一个领域问题,核心在于方法论。这道题非常适合有一定编程和数理基础,希望挑战综合评价类赛题的同学们。接下来,我就结合我们当时的解题思路、用到的方法以及赛后复盘的心得,把这个项目的完整脉络、核心技术和实操细节拆解清楚,目标是让你看完之后,不仅能理解这道题在考什么,更能掌握一套处理类似评价预测问题的通用流程和MATLAB实现技巧。

2. 核心思路解析:如何将地质问题转化为数学问题

面对“地质灾害评价”这样一个题目,第一步也是最关键的一步,就是完成问题转化。评委想看到的不是你罗列地质学名词,而是你清晰地将一个实际问题抽象为数学语言的能力。

2.1 问题界定与模型类型选择

题目通常会提供一份数据,包含多个评价单元(比如栅格像元或行政区划)在各个评价指标上的数值。我们的核心任务有两个:第一,建立一套评价体系,给每个单元打出一个“危险度”分数;第二,根据这个分数,对区域进行危险性等级划分(如低、中、高危险区)。

这本质上是一个多指标综合评价问题。综合评价的模型有很多,比如层次分析法(AHP)、模糊综合评价、TOPSIS法、熵权法、神经网络等。选择哪种或哪几种组合,是建模的第一个决策点。我们的思路是:采用“客观赋权+主观修正”的主客观结合思路。为什么?因为地质灾害评价中,不同指标的重要性(权重)既依赖于数据本身的分布规律(客观),也离不开地质学经验的指导(主观)。纯客观方法(如熵权法)可能完全依赖数据,忽略了岩性、断层等关键地质因素的本质重要性;纯主观方法(如AHP)则过于依赖专家打分,在数据量大的情况下稳定性不足。因此,我们决定用熵权法计算客观权重,用AHP获取主观权重,然后通过加权组合得到综合权重。这样既能反映数据信息,又能融入领域知识,模型的说服力更强。

2.2 评价指标体系构建与数据预处理

题目给出的原始指标可能很多,也可能存在量纲不统一、正向/负向不一致等问题。直接丢进模型是不行的。

指标选取与处理:我们首先对原始指标进行筛选。例如,剔除相关性过高的指标(如年均降雨量和雨季降雨量),避免信息重复。接着,进行指标归一化。对于越大越危险的指标(如坡度、降雨强度),采用正向归一化;对于越大越安全的指标(如植被覆盖度),采用负向归一化。常用的方法有极差归一化。这一步的MATLAB实现非常简洁,但至关重要,它保证了所有指标在同一个尺度上比较。

% 假设 data 是 n个样本 × m个指标 的矩阵 % 对于正向指标(越大越危险) normalized_pos = (data - min(data)) ./ (max(data) - min(data)); % 对于负向指标(越大越安全) normalized_neg = (max(data) - data) ./ (max(data) - min(data));

数据检验:在赋权前,我们通常会对归一化后的数据进行一致性检验(如果使用AHP)或计算信息熵(如果使用熵权法),确保数据质量满足方法的前提假设。

3. 模型构建的核心:权重确定与综合评价

这是整个项目的算法心脏。我们分两步走:客观赋权与主观赋权,最后进行综合。

3.1 客观赋权法:熵权法实现详解

熵权法的思想是:某个指标的信息熵越小,其值的变异程度越大,提供的信息量越多,在综合评价中所起的作用越大,权重也应越高。这是一个完全由数据驱动的客观方法。

实操步骤与MATLAB代码

  1. 计算比重:对于归一化后的矩阵P,计算第i个样本在第j个指标下的比重p_ij
  2. 计算信息熵:计算第j个指标的信息熵e_j。这里有一个重要细节,当p_ij为0时,ln(p_ij)无定义,需要做平滑处理,通常给p_ij加上一个极小的正数。
  3. 计算差异系数g_j = 1 - e_j。差异系数越大,指标越重要。
  4. 计算权重:将差异系数归一化,得到熵权w_j = g_j / sum(g_j)
function weights = entropy_weight(data) % data: 归一化后的数据矩阵 (n×m), 所有指标应为正向 [n, m] = size(data); % 1. 计算比重 P = data ./ sum(data); % 按列求和 % 避免log(0)的情况 P(P == 0) = 1e-10; % 2. 计算信息熵 k = 1 / log(n); e = -k * sum(P .* log(P), 1); % 3. 计算差异系数 d = 1 - e; % 4. 计算权重 weights = d ./ sum(d); weights = weights'; % 转为列向量 end

注意:熵权法对原始数据的归一化方式非常敏感。务必确保所有指标在归一化后方向一致(通常都处理为正向指标,即数值越大表示地质灾害风险越高)。如果原始数据中存在负向指标,必须在归一化阶段进行正向化处理。

3.2 主观赋权法:层次分析法(AHP)的谨慎应用

AHP通过构造判断矩阵,让专家对指标间的重要性进行两两比较。其核心在于判断矩阵的一致性检验。

实操要点

  1. 构造判断矩阵:根据地质学常识或文献,对m个指标进行两两比较,使用1-9标度法。这是一个需要谨慎对待的步骤,需要一定的领域知识或充分的文献调研作为支撑。
  2. 计算权重与一致性检验:计算判断矩阵的最大特征值及其对应的特征向量(即权重向量)。然后计算一致性比率CR。CR < 0.1是判断矩阵可接受的黄金标准。如果CR超标,必须调整判断矩阵,直到满足一致性要求。很多队伍在这里丢分,就是因为直接用了随意构造的、未通过检验的判断矩阵。
function [weights, CR] = ahp_weight(judgementMatrix) % judgementMatrix: 判断矩阵 (m×m) [V, D] = eig(judgementMatrix); [max_eigval, idx] = max(diag(D)); weights = V(:, idx); weights = weights / sum(weights); % 归一化得到权重向量 n = size(judgementMatrix,1); CI = (max_eigval - n) / (n - 1); RI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49]; % 平均随机一致性指标 CR = CI / RI(n); if CR >= 0.1 warning('一致性检验未通过(CR=%.4f),权重结果不可靠,请调整判断矩阵。', CR); end end

3.3 权重融合与综合评价得分计算

获得客观权重W_entropy和主观权重W_ahp后,我们采用线性加权的方式进行融合:W_combined = α * W_entropy + (1-α) * W_ahp。其中α是一个调节参数,通常可以设为0.5表示同等重要,也可以通过优化确定。

最后,计算每个评价单元的综合得分:Score = Normalized_Data * W_combined。得分越高,表示地质灾害危险性越高。

% 假设 normalized_data 是归一化且同向化的数据矩阵 alpha = 0.5; W_combined = alpha * W_entropy + (1-alpha) * W_ahp; % 确保权重和为1 W_combined = W_combined / sum(W_combined); % 计算综合得分 comprehensive_score = normalized_data * W_combined;

4. 模型验证与结果可视化:让评价结果可信、可观

模型建好了,得分算出来了,但这还不够。你怎么证明你的模型是合理的?你的结果如何直观呈现?

4.1 模型验证策略

在数学建模竞赛中,常见的验证方法有:

  • 灵敏度分析:微调关键指标(如融合权重α)或某个指标的权重,观察综合得分排序是否发生剧烈变化。如果模型稳健,排名应保持相对稳定。
  • 对比分析法:用你的模型和其他单一方法(如纯熵权法、纯AHP法)分别评价,对比结果的空间分布格局。如果主客观结合模型的结果与地质常识或历史灾害点分布吻合得更好,那就证明了其优越性。
  • 回代检验:如果赛题数据中提供了部分已知的历史灾害点,可以将这些点作为“高危样本”,看你的模型给这些点的打分是否普遍高于安全区域。这是一种非常有力的验证。

4.2 结果分级与可视化

得到连续的综合得分后,需要将其划分为“低、中、高”等有限的危险等级。常用方法有:

  • 自然断点法:基于数据本身的分布,寻找分类间隔,使得类内差异最小,类间差异最大。在MATLAB中可以通过histcounts或自定义算法实现。
  • 等间隔法:将得分范围等分为若干区间。这种方法简单,但可能不符合数据实际分布。
  • 分位数法:按样本数量的比例划分,例如将得分从低到高排序,后30%为高风险,中间40%为中风险,前30%为低风险。

可视化是论文的亮点。一定要绘制地质灾害危险性区划图。

% 假设有每个评价单元的中心坐标 (X, Y) 和其等级 Z (1,2,3分别代表低、中、高) % 使用 scatter 绘制分级色彩散点图,可近似模拟分区效果 figure; hold on; scatter(X(Z==1), Y(Z==1), 20, 'g', 'filled'); % 低风险-绿色 scatter(X(Z==2), Y(Z==2), 20, 'y', 'filled'); % 中风险-黄色 scatter(X(Z==3), Y(Z==3), 20, 'r', 'filled'); % 高风险-红色 xlabel('经度'); ylabel('纬度'); title('地质灾害危险性评价分区图'); legend('低危险区', '中危险区', '高危险区'); grid on; hold off;

如果数据是栅格格式,可以使用imagescgeoshow(如需地理坐标)来绘制更专业的专题图。一张色彩分明、图例清晰的风险区划图,能极大提升论文的直观性和专业性。

5. 赛题实战中的深度拓展与优化

在基础模型之上进行合理的拓展,是获得高奖的关键。我们当时从以下几个方向进行了深化:

5.1 引入空间自相关分析

地质灾害的发生在空间上往往不是独立的,高风险点容易聚集(正相关)。我们可以用莫兰指数(Moran‘s I)来分析综合得分的空间聚集性。如果莫兰指数显著为正,说明我们的评价结果确实识别出了风险聚集区,这从侧面验证了模型的合理性。MATLAB的Spatial Statistics Toolbox提供了相关函数,也可以手动实现。

5.2 耦合机器学习模型进行预测

综合评价模型给出了静态的危险性“底图”。我们可以进一步思考:如何预测未来风险?一个思路是,将综合得分作为基础特征,耦合时序数据(如逐年降雨量、地震活动数据),使用时间序列分析机器学习模型(如支持向量机回归SVR、随机森林回归)来预测未来几年危险性的变化趋势。这需要额外的时序数据,但如果赛题背景允许或数据充足,这将是一个巨大的亮点。

5.3 模型不确定性探讨

任何模型都有不确定性。我们可以通过蒙特卡洛模拟来量化这种不确定性。具体做法是:在AHP判断矩阵的标度值允许范围内随机扰动,或者在熵权法计算中引入随机噪声,重复运行模型成百上千次,得到每个评价单元得分的概率分布(均值和方差)。这样,我们不仅能给出“高风险区”,还能给出“该区域有90%的概率属于高风险区”这样的不确定性描述,使分析更加科学和严谨。

6. 参赛实操心得与避坑指南

结合我们参赛和后期辅导的经验,这里分享几条至关重要的心得,这些在标准教程里往往不会细说:

  1. 论文写作先于代码完成:不要等所有代码都跑通、所有图都画好才开始写论文。建模第一天,就应该把论文框架(问题重述、假设、符号说明、模型准备)搭起来。代码和写作并行,每天将已完成的模型部分、结果和分析写成初稿。最后一天一定是用来打磨摘要、检查全文、调整格式的,而不是用来补核心内容的。

  2. 灵敏度分析不是走过场:很多队伍知道要做灵敏度分析,但只是简单地改变某个参数,说一句“结果变化不大,因此模型稳健”。这是不够的。要做定量分析。例如,改变融合权重α从0到1,步长0.1,计算每次模型输出结果与基准结果(如α=0.5时)的斯皮尔曼等级相关系数。用图表展示相关系数随α的变化,并指出在多大范围内模型是稳定的。这样的分析才深入、有说服力。

  3. MATLAB代码的整洁与注释:评委可能会查看附录的代码。混乱、无注释的代码会扣分。养成好习惯:为每个主要函数写一个清晰的注释头,说明功能、输入、输出;关键计算步骤加上行注释。这不仅是为了评委,更是为了你们自己在调试时能快速定位问题。

  4. 警惕“维度灾难”与指标共线性:当初始指标非常多时(比如超过20个),直接全部放入评价模型可能导致信息冗余、权重分散,且计算复杂度高。在预处理阶段,建议先进行主成分分析(PCA)因子分析,用少数几个不相关的主成分来替代原始的多指标,既能降维,又能消除共线性。在MATLAB中,pca函数可以轻松实现。

  5. 结果解读要结合“地理”:你的最终输出是一张风险区划图。在分析时,不能只说“A区高风险,B区低风险”。要尝试结合题目中给出的或你自己查找的简易地理背景(如:A区是山区、陡坡多,B区是平原)进行解释。说明你的模型结果与实际地理常识是吻合的,这体现了你对问题的深入理解,而不是机械地套用模型。

地质灾害评价模型是一个经典的数学建模赛题,它融合了数据处理、算法构建、编程实现和地理可视化等多个环节。通过这个项目,你真正掌握的是一套解决“多指标综合评价”类问题的标准化流程和思维方法。从指标处理、权重确定到模型验证,每一步都有其技术内涵和实现细节。希望这份结合了实战经验的拆解,能帮助你不仅看懂一篇获奖论文,更能独立地、创造性地解决下一个新的评价问题。记住,好的建模不是套用模板,而是在理解问题本质的基础上,合理地选择、组合并优化工具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询