1. 赛题核心与破题思路拆解
刚拿到2025年高教社杯数学建模国赛B题,很多同学的第一反应可能是“题目好长”、“数据好多”、“感觉无从下手”。这很正常,国赛B题历来以综合性、开放性和数据量大著称,考察的不仅仅是建模能力,更是从海量信息中快速提炼核心、构建逻辑框架的系统性思维。今年的B题,延续了关注社会实际问题的传统,聚焦于一个与城市发展、民生服务紧密相关的领域。题目通常会给出一个具体的背景(例如城市交通优化、资源调度、环境评估等),并提供多源、异构的数据集,要求参赛队在三天内完成问题分析、模型建立、求解和论文撰写。
这道题的核心,绝不仅仅是让你套用一个现成的算法。它的难点在于“定义问题”。题目描述往往是一个复杂的现实场景,充满了相互关联的制约因素和模糊的目标。你的首要任务,是像一名真正的咨询顾问或系统分析师一样,将这个庞杂的现实问题,转化成一个或多个清晰、可量化、可求解的数学问题。这中间需要做大量的合理假设、变量定义和目标函数构建。很多队伍折戟沉沙,不是因为模型不够高级,而是在第一步“问题转化”上就出现了偏差,导致后续所有工作都建立在错误的基础上。
因此,面对B题,我的建议是:用至少4-6个小时,不碰任何代码和公式,只做“纸上谈兵”。全队一起,反复精读题目,逐字逐句地分析,用白板或思维导图画出所有涉及的实体(如车辆、站点、人群、时间)、它们之间的关系(如流动、服务、等待)、已知条件、约束条件和最终要优化的目标。这个阶段的目标是产出一份清晰的“问题重述”和“模型框架图”,确保团队对问题的理解完全一致。这是整个比赛中最关键、最值得投入时间的一步。
2. 数据处理与特征工程实战要点
B题提供的数据,往往是“脏”的、不完整的、尺度不一的。直接把这些原始数据扔进模型,效果大概率不会好。数据处理和特征工程,是连接现实问题与数学模型的桥梁,其质量直接决定了模型的上限。
2.1 数据清洗:不仅仅是处理缺失值
拿到数据后的第一步是“诊断”。除了常规的检查缺失值、异常值、重复值外,对于B题这类时空数据或行为数据,要特别关注以下几点:
- 时间序列的连续性:检查时间戳是否有跳跃、是否在合理范围内。例如,某条记录的时间是“2025-02-30”,这显然是无效数据。
- 逻辑一致性:不同表格间的数据能否相互印证?例如,一张表记录某车辆从A点出发,另一张表记录其到达B点,那么行程时间是否合理?距离与速度是否匹配?
- 业务常识校验:某些数值虽然在数学上合理,但不符合业务逻辑。比如,一个人的年龄记录为200岁,一个站点的瞬时客流量超过其物理容量极限。这类异常需要用业务规则进行过滤或修正。
注意:对于缺失值的处理,切忌无脑删除或填充。要分析缺失的机制:是随机缺失,还是系统缺失(例如,某个传感器在特定时间段全部失效)?对于随机缺失,可以考虑用均值、中位数或基于其他特征的预测值填充。对于系统缺失,可能需要将这段时间的数据视为一个特殊状态,或者利用时间序列方法进行插值。在论文中,必须明确说明你处理每一种缺失值所采用的方法及理由。
2.2 特征构建:从原始数据中“创造”价值
这是特征工程的核心,也是最体现创造力的地方。你需要根据对问题的理解,从原始字段中衍生出对模型预测或优化更有用的新特征。
- 时间特征:如果数据包含时间戳,可以提取出“小时”、“是否工作日”、“是否节假日”、“一天中的时段(如早高峰、午间、晚高峰、夜间)”、“周几”等。对于周期性行为,甚至可以计算“距离某个重要日期的天数”。
- 统计聚合特征:这是B题中最常用的方法。例如,针对某个站点,可以计算“历史同期(如上周同一天同一小时)的平均客流量”、“过去一小时的客流变化趋势(斜率)”、“当日累计客流量”等。针对区域,可以计算“密度类特征”(如单位面积内的设施数量)。
- 交互特征:将不同特征进行组合。例如,“当前时刻”与“站点类型”组合,可以刻画不同类型站点在不同时刻的活跃模式。“天气状况”与“工作日”组合,可以分析天气对通勤和非通勤出行的影响差异。
- 编码特征:对于类别型变量,如站点ID、区域名称,不能直接代入模型。常用的编码方式有标签编码(Label Encoding)和独热编码(One-Hot Encoding)。对于高基数类别特征(如成千上万个站点ID),独热编码会导致维度爆炸,此时可以考虑使用目标编码(Target Encoding),即用该类别下目标变量的统计量(如均值)来作为编码值,但需小心过拟合。
2.3 特征选择:避免维度灾难与过拟合
当特征数量膨胀后,必须进行特征选择,剔除冗余和无关的特征,提高模型效率和泛化能力。
- 过滤法:计算每个特征与目标变量的相关性(如皮尔逊相关系数、互信息)。这种方法计算快,但与后续要用的模型无关。
- 包裹法:如递归特征消除(RFE)。它使用一个特定的模型(如线性回归、随机森林)来评估特征子集的好坏,效果通常比过滤法好,但计算成本高。
- 嵌入法:模型训练过程本身会自动进行特征选择。例如,Lasso回归的系数会使不重要的特征系数趋于零;树模型(如随机森林、XGBoost)可以输出特征重要性评分。在国赛实践中,我强烈推荐使用树模型的特征重要性作为特征筛选的主要依据,因为它能捕捉非线性关系,且结果直观易懂,非常适合写在论文里展示你的工作。
3. 模型构建与算法选型策略
B题的模型部分,通常不是单一模型就能解决的,往往需要“组合拳”。模型选型没有绝对的最优,只有最适合当前问题定义和数据特征的。
3.1 预测类模型:洞察未来趋势
如果题目要求预测未来某段时间的需求量、客流量等,常用的模型有:
- 传统时间序列模型:如ARIMA、SARIMA(季节性ARIMA)。它们适用于具有明显趋势和季节性的单变量时间序列。优点是理论成熟,可解释性强。缺点是对数据平稳性要求高,且难以融入多变量特征(如天气、事件)。在预处理时,需要进行差分、对数变换等操作使其平稳。
- 机器学习回归模型:如线性回归、支持向量回归(SVR)、随机森林回归、XGBoost/LightGBM回归。当你有丰富的特征时,这类模型往往比纯时间序列模型更强大。XGBoost/LightGBM因其卓越的性能、对缺失值的鲁棒性和训练速度,已成为近年国赛预测问题的事实标准。使用时,需要仔细调参(如学习率、树深度、叶子节点数),并利用交叉验证防止过拟合。
- 深度学习模型:如LSTM(长短期记忆网络)、GRU。它们特别擅长处理长序列依赖关系。如果你的数据是长时间跨度的序列,且前后依赖关系复杂,可以尝试LSTM。但请注意:深度学习模型需要大量的数据、更长的训练时间和更复杂的调参,在三天比赛中风险较高。除非队伍中有成员对此非常熟悉,否则不建议作为主力模型,但可以作为对比模型或融合模型的一部分。
3.2 优化类模型:寻找最佳方案
如果题目要求在满足一系列约束下,最大化或最小化某个目标(如成本最低、效率最高、覆盖最广),这就是优化问题。
- 线性/整数规划:当目标函数和约束条件都是决策变量的线性表达式,且决策变量是连续或整数时使用。例如,经典的运输问题、排班问题。可以用PuLP(Python库)或MATLAB的linprog/intlinprog求解。关键在于准确地将文字描述的约束转化为数学不等式。
- 网络优化:如果问题可以抽象为图(节点和边),如最短路径、最大流、最小费用流、车辆路径问题(VRP),那么就属于网络优化。Dijkstra、Floyd算法用于最短路径;VRP及其变体(带时间窗的VRP、多配送中心VRP)是国赛常客,可以使用OR-Tools(Google开源优化工具包)或模拟退火、遗传算法等启发式方法求解。
- 启发式与元启发式算法:当问题规模很大,属于NP-Hard问题,无法在短时间内求得精确最优解时,就需要用启发式算法求一个高质量的近似解。模拟退火(SA)、遗传算法(GA)、蚁群算法(ACO)是国赛论文中的“常客”。它们的优点是原理相对直观,可以处理复杂的约束和非线性目标,且论文中容易画出迭代收敛图,视觉效果很好。实操心得:实现一个基本的遗传算法框架并不难,关键在于设计好的“染色体”编码方式(如何用一串数字表示一个解决方案)、适应度函数(如何评价解决方案的好坏)以及交叉、变异算子。网上有很多模板,但一定要根据你的具体问题进行调整,不能生搬硬套。
3.3 评价与决策类模型:综合比较与选择
当题目要求对多个方案、多个区域或多个指标进行综合评价或排序时,会用到评价模型。
- 层次分析法(AHP):用于处理定性与定量相结合的多准则决策。通过构造判断矩阵,计算各层元素的权重。它的优点是能将决策者的主观判断进行量化,非常适合国赛这种需要“自圆其说”的场景。但要注意,判断矩阵必须通过一致性检验,否则结果不可信。
- 熵权法(EWM):一种客观赋权法。它根据各指标数据的离散程度(熵)来确定权重,数据差异越大,权重越高。通常与TOPSIS法联用:先用熵权法确定各评价指标的权重,再用TOPSIS法计算各方案与理想解的贴近度进行排序。
- TOPSIS法(逼近理想解排序法):直观易懂,计算简便。核心思想是同时考虑方案与正理想解的距离和与负理想解的距离。在论文中,要清晰地写出原始数据矩阵、归一化后的矩阵、加权规范化矩阵、正负理想解、距离计算和贴近度公式,步骤分明。
重要提示:在国赛论文中,千万不要只用一个模型。至少应该设计一个“主模型”和一个“对比模型”或“基准模型”。例如,用你精心设计的组合模型作为主模型,用一个简单的线性回归或历史均值法作为基准模型,通过对比预测误差(如MAE, RMSE, MAPE)或优化目标值,来证明你的模型确实有效。这体现了建模的严谨性。
4. 论文写作与可视化呈现核心技巧
国赛最终提交的是论文,评委通过论文来评判你们三天的工作。模型再好,表达不清也是徒劳。论文写作是另一场至关重要的战斗。
4.1 摘要:浓缩的精华,决定第一印象
摘要必须在最后一天,所有工作完成后,集中精力反复打磨。它要独立成篇,让评委在不看正文的情况下就能完全理解你们做了什么、怎么做的、结果如何。
- 结构:采用“问题重述—>模型思路—>求解方法—>主要结论—>创新点”的逻辑链。用简练的语言说清楚针对每个问题,你们建立了什么模型,用了什么方法求解,得到了什么关键结果(一定要有具体数值!),最后简要提一下模型的优点或特色。
- 禁忌:摘要里不要出现公式、图表引用、自我评价(如“我们建立了优秀的模型”)。全部使用客观陈述。
4.2 模型建立部分:逻辑清晰,层层递进
这是论文的技术核心,要体现思考过程。
- 符号说明:在模型章节开头,用三线表清晰列出所有变量的定义、单位和取值范围。这是专业性的体现。
- 模型假设:假设要合理、必要,且能为后续模型简化提供依据。通常包括对数据噪声的假设、对系统边界的假设、对行为规律的假设等。每一条假设最好能简要说明理由。
- 模型推导:不要直接甩出最终公式。应该从最简单的情况开始,逐步增加约束和复杂性,引导评委跟上你的思路。例如,“首先,我们不考虑时间因素,将问题简化为一个静态分配模型……然后,引入时间窗约束……进一步,考虑需求的不确定性……”。对于引用的经典模型(如Floyd算法),可以简述原理并直接给出公式,但必须说明你如何将其适配到本问题中。
- 流程图:绘制一张清晰的模型整体框架或算法流程图,能让评委在短时间内把握你们的全局思路。可以使用Visio、draw.io或PPT绘制,务必清晰美观。
4.3 结果分析与可视化:用图表说话
枯燥的数字堆砌是论文大忌。必须将核心结果用图表生动地展示出来。
- 表格:用于呈现精确的数值结果、对比数据、参数设置等。使用三线表,注明单位。
- 折线图/柱状图:用于展示趋势、对比和分布。例如,预测值与真实值的对比折线图、不同方案目标值的柱状图对比、特征重要性排序条形图。
- 热力图:非常适合展示矩阵数据或空间密度,例如相关性矩阵、区域需求热度分布。
- 地图可视化:如果问题涉及地理空间(如站点、区域),一定要想方设法画一张地图!可以用Python的Basemap、Folium库,或者MATLAB的Mapping Toolbox。将你们的结果(如路径、资源分配、热点区域)在地图上标注出来,直观效果碾压千言万语。即使编程实现有困难,用软件(如ArcGIS, QGIS)处理好后截图放入论文,也是极大的加分项。
- 敏感性分析:这是体现模型稳健性和你们思考深度的关键一环。选择模型中的关键参数(如遗传算法的种群大小、交叉概率;预测模型中的某个权重),在小范围内变动,观察目标函数或输出结果的变化情况。用图表展示这种变化,并分析原因,说明你们的模型在参数扰动下是否稳定。
4.4 模型检验与评价:自证其效
不能只说结果好,要证明它为什么好、有多好。
- 误差分析:对于预测模型,必须计算并汇报多种误差指标,如均方误差(MSE)、平均绝对误差(MAE)、平均绝对百分比误差(MAPE)。解释这些误差的含义,并分析误差主要来源于哪些时段或哪些情况。
- 对比实验:如前所述,与基准模型或简单模型对比。也可以尝试不同的特征组合、不同的算法,通过对比结果来说明你们最终选择的优越性。
- 合理性分析:将模型输出的结果,放回原问题的现实背景中,检查是否合理。例如,优化出的配送路线是否出现了明显的绕远?预测的夜间客流量是否异常高?对不合理的地方要进行讨论和解释。
5. 团队协作、时间管理与常见避坑指南
三天三夜的比赛,是对智力、体力和团队协作能力的极限考验。合理的策略能让你事半功倍。
5.1 时间规划表(参考)
第一天(Day 1):
- 上午(8:00-12:00):全员集中,彻底读懂题目,讨论至少2-3轮。确定问题的核心、边界、可能用到的模型大类。完成“问题重述”部分的初步写作。
- 下午(13:00-18:00):分工进行数据探查和清洗。一人负责编写数据清洗的通用脚本,其他人分别分析不同数据文件的结构和问题。晚上前,团队要共享清洗后的干净数据。
- 晚上(19:00-24:00):基于干净数据,讨论并确定具体的模型技术路线。完成“模型假设”和“符号说明”。开始特征工程和初步的探索性数据分析(EDA),画一些基本的统计图表。
第二天(Day 2):
- 上午(8:00-12:00):集中火力进行模型构建、编程实现和初步求解。负责建模编程的同学深入编码;负责论文的同学开始撰写“模型建立”部分,将昨天讨论的模型思路转化为文字和公式。
- 下午(13:00-18:00):调试模型,跑出第一版结果。无论结果好坏,都要进行分析。如果结果不理想,快速开会讨论是调整模型还是调整特征。
- 晚上(19:00-次日2:00):关键冲刺期。力争得到一组可用的、相对稳定的结果。论文同学将初步结果和图表整合进论文。团队一起检查结果的合理性。
第三天(Day 3):
- 上午(8:00-12:00):进行模型优化、敏感性分析、对比实验。完善所有图表。论文同学撰写“结果分析”和“模型检验”部分。
- 下午(13:00-20:00):全文整合与修改。这是最重要的阶段。一人主笔,其他两人一人负责检查数学公式、符号、图表编号是否正确,一人负责检查文字流畅性、语法错误和逻辑漏洞。反复通读,确保从摘要到附录,论文是一个连贯的整体。
- 晚上(20:00-提交前):集中精力打磨摘要、关键词和检查格式。最终定稿,转换为PDF,检查无误后提交。
5.2 常见“天坑”与应对策略
坑:盲目追求复杂模型。
- 对策:牢记“简单的模型+优秀的特征工程+合理的解释”往往比“复杂的模型+粗糙的处理”得分更高。先用一个简单的基准模型跑通流程,确保结果合理,再考虑升级模型复杂度。
坑:编程与论文完全脱节。
- 对策:从第一天起,论文写作就要同步进行。编程同学每完成一个模块,就要将核心代码逻辑、输出结果和图表告知论文同学。论文同学不是最后的“誊写员”,而是过程的记录者和梳理者。
坑:结果异常却强行解释。
- 对策:当模型输出一个明显不符合常识的结果时(比如预测出负数需求),第一反应不应该是“在论文里圆过去”,而应该是“回头检查数据、特征或模型逻辑”。大概率是数据预处理有误,或者目标函数/约束条件写错了。正视问题,快速回溯排查。
坑:摘要和结论空洞无物。
- 对策:摘要和结论里必须包含具体的、量化的结果。不要说“我们得到了较好的预测效果”,要说“模型预测的MAPE为5.2%,较基准模型提升了30%”。数字最有说服力。
坑:最后时刻匆忙提交,格式混乱。
- 对策:在第二天晚上,就应该用LaTeX或Word建立一个符合比赛格式要求的论文模板(包括页边距、字体、标题样式、图表格式、参考文献格式)。所有内容都往模板里填充。最后留出至少2小时专门进行格式检查和排版美化。
国赛是一场马拉松,拼的不仅是知识储备,更是心态、规划和执行力。保持沟通,及时调整,相信团队的力量。最后,无论结果如何,这三天高强度的思考、协作与创造,本身就是一段极其宝贵的财富。把你们解决问题的完整逻辑和思考过程,清晰、自信地展现在论文中,这就是成功。