拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

2021国赛数模真题全解析:建模思路、避坑指南与赛程安排

2021国赛数模真题全解析:建模思路、避坑指南与赛程安排

2021年9月9日傍晚,国赛题目在官网挂出来,各个建模群瞬间刷屏。2021年高教社杯全国大学生数学建模竞赛的五道题,横跨天文工程、化学工艺、供应链管理、钢铁连铸和中药鉴别,难度梯度拉得特别明显。很多人第一眼被A题FAST吸引,觉得"射电望远镜"听着就高端,结果做进去才发现,难点根本不在天文知识,而在于怎么把一个大型球面反射体的调节问题,翻译成一个能算、能求解、能解释的优化模型。

我每年都会带队伍刷国赛真题,这篇文章就把2021年这五道题摊开聊一聊。不打算写成标准答案汇编,而是从"拿到题目之后到底该怎么想"这个角度出发,把每道题的核心难点、建模思路、容易翻车的地方,以及一些通用的赛程安排和论文写作经验,一次性讲透。无论你是准备组队参赛,还是想拿往年赛题练手,这篇文章应该能帮你省下一大段自己摸索的时间。

1. 2021年国赛五道题全景扫描:从FAST到中药材鉴别

先有个整体印象比什么都重要。2021年这五道题,真正体现了一个趋势:国赛已经不爱考"套公式题"了,而是更看重你对真实问题的理解、数据挖掘能力,以及把工程问题抽象成数学模型的能力。我做了一张表,把五道题的信息浓缩在这里,方便你做选题参考。

题号题目简称所属领域核心任务主要切入点
AFAST主动反射面形状调节工程优化把球面反射面调节成工作抛物面几何建模、非线性优化、拟合
B乙醇偶合制备C4烯烃化学工艺找催化剂组合与工艺条件的最优解回归分析、显著性检验、优化
C生产企业原材料的订购与运输供应链管理选供应商、定周订货量、安排转运数据清洗、多目标规划、0-1规划
D连铸切割的优化冶金制造切割计划让损失最小组合优化、整数规划、动态规划
E中药材的鉴别模式识别根据光谱数据识别药材种类特征降维、机器学习分类

这五道题,各有各的"脾气"。A题看起来最硬核,实际上是一个非常典型的工程优化问题,几何关系多,但一旦把模型写清楚,求解路径是明确的;B题是典型的实验数据题,不涉及复杂机理,拼的是统计功底和对工艺逻辑的理解;C题是纯数据决策题,数据量最大,很多队伍第一问还没做完,时间就没了;D题偏算法,适合编程能力强、对组合优化熟悉的队伍;E题对机器学习基础有要求,但数据规模不大,特征工程做得好就能拿到不错的分数。

1.1 A题:FAST主动反射面形状调节——工程优化题

A题的背景是FAST射电望远镜。它的反射面是一个半径300米的球冠,但球面天生不能把平行电磁波汇聚到一个点上,必须通过促动器把反射面调节成抛物面,电磁波才能被聚焦到馈源舱。题目给了大量几何参数和结构数据,要求你建立模型,设计反射面的调节方案,计算理想抛物面参数和偏差。

这题的关键在于:它不是让你设计望远镜,而是让你做"形状控制"。优化变量是每个主索节点的径向位移,约束是促动器行程、面板变形协调,优化目标是让反射面尽可能贴近理想工作抛物面。我后面会专门拆解。

1.2 B题:乙醇偶合制备C4烯烃——实验数据回归题

B题给了不同催化剂组合、不同温度、不同乙醇浓度下的实验数据,要求分析这些因素对C4烯烃收率的影响,并优化工艺条件。它本质上是"实验设计+回归建模+优化"的组合。很多队伍一看到"催化剂""收率"这种化学词就发怵,其实题目并不需要你懂化学机理,它考察的是你能不能从数据中找到规律,并用统计方法验证。

做这道题时,注意别一上来就做复杂神经网络。C4烯烃收率与温度、催化剂配比之间的关系,往往用多项式回归、响应面分析就能解释得很清楚,而且更容易写出可解释的结论。

1.3 C题:生产企业原材料的订购与运输——数据决策题

C题给了5年内的订货量、供货量数据,402家供应商和8家转运商的信息。你要解决三件事:一是评估供应商供货特征并选出一批重要的;二是制定未来24周的订购计划;三是选择转运商并安排运输,让企业以最低成本保障生产。

这题的数据量是五道题里最大的,Excel文件打开都要卡一下。它真实模拟了企业供应链里的"货期不确定"问题——供应商的到货量经常少于订货量。所以光会优化模型远远不够,能不能把数据洗干净、把供应商的"可靠度"算明白,才是拿分的关键。

1.4 D题与E题:连铸切割优化与中药鉴别

D题是连铸切割的优化问题。连铸过程中,钢水凝固成铸坯,要按订单需求切割成不同长度的坯料,切割点选得不好就会产生废料。它本质上是一个离散优化问题,可以用动态规划或整数规划建模。对于熟悉算法竞赛的同学来说,D题反而比A题更容易上手。

E题是中药材鉴别,典型的分类问题。它给了不同药材的近红外光谱数据,要求建立模型识别药材种类。特征降维和分类器选择是核心,PCA、LDA、随机森林、SVM这些常规方法就够用。需要注意的是,光谱数据往往存在共线性,不能直接把几百个波长的数据扔进模型,必须先做主成分分析或偏最小二乘。

2. 拆解A题:为什么抛物面拟合不是一句"最小二乘"就能收工

如果让我只挑一道题细讲,我会选A题。因为每年都有队伍把A题做成了"最小二乘拟合抛物面",然后发现结果惨不忍睹。问题在哪?在于他们忽略了物理约束和几何约束。这一章我把A题从建模到求解的完整思路拆给你看。

2.1 几何模型的本质:球面如何"变成"抛物面

FAST的基准态是球面,但球面反射的电磁波不会汇聚到一个焦点。你可以这样理解:手电筒的反光碗是抛物面的,因为抛物面能把点光源发出的光变成平行光;反过来,平行光打到抛物面上也会被汇聚到焦点。FAST要接收的是来自遥远天体的平行电磁波,所以必须把球面"掰"成抛物面。

但这个"掰"不是随心所欲的。FAST的反射面是由数千块三角形面板拼成的,每块面板的顶点在主索节点上,主索节点通过促动器连接在地面上。促动器伸缩时,节点沿径向移动,面板跟着变形。所以,真正能控制的变量,是每个主索节点的径向位移量,面板的形状是被动跟随的。

建模的核心问题是:给定一个理想的工作抛物面,每条促动器应该伸缩多少,才能让所有节点尽量落在抛物面上,同时不超出物理限制?

关键点在于:理想抛物面的位置和姿态不是随便定的。它的焦点要与馈源舱重合,它的主轴要指向被观测天体的方向。第1问天顶方向入射,主轴就是FAST的对称轴;第2问目标偏离天顶,主轴就得跟着倾斜。很多队伍把主轴方向定错,后面算出的位移全是错的。

2.2 决策变量、目标函数与约束条件的完整写法

为了让你看得更清楚,我把模型写成一个标准优化问题。

设基准球面的球心为 O,半径为 R。建立空间直角坐标系,将 O 放在原点,z 轴指向天顶。每个主索节点的初始位置在球面上,用球坐标 (R, θ_i, φ_i) 表示,转换为直角坐标为:

x_i = R * sin(θ_i) * cos(φ_i) y_i = R * sin(θ_i) * sin(φ_i) z_i = R * cos(θ_i)

促动器沿径向调整后,节点移动到:

P_i' = (R + Δr_i) * (sin(θ_i) * cos(φ_i), sin(θ_i) * sin(φ_i), cos(θ_i))

其中 Δr_i 就是第 i 个节点的径向位移,这是我们的决策变量。

理想工作抛物面可以用顶点坐标、焦距和主轴方向三个要素确定。设主轴方向为 n,顶点为 A,焦点为 F,焦距为 f。抛物面上任意一点 Q 满足"到焦点的距离等于到准平面的距离"。用这个几何定义,可以写出每个节点 P_i' 到理想抛物面的"偏差距离" d_i。

目标函数是:

min Σ (d_i)^2

约束条件至少有两类:

  • 促动器行程约束:|Δr_i| ≤ Δr_max,Δr_max 是允许的最大伸缩量;
  • 面板变形协调约束:同一块三角形面板的三个顶点,位移差不能太大,否则面板内部会产生过大应力。可以写成相邻节点的位移差上限。

这个模型难在哪里?难在 d_i 的计算涉及抛物面参数的隐式表达,而抛物面的参数(顶点、主轴、焦距)也要作为优化变量一起求解。它不是普通的最小二乘,而是一个"外层优化变量和内层优化变量耦合"的非线性规划问题。

2.3 求解时真正卡住人的三个细节

第一个细节:坐标系和量纲。很多人把经纬度直接当成角度代入公式,忘记转弧度,或者把球坐标和直角坐标混在一起用,导致位移算出来全是几千米的离谱值。我的建议是:所有几何计算统一用直角坐标系,先写一个坐标转换函数,再用几个已知节点做校验。比如把球心放原点后,任意节点的模长都应该等于 R,差超过1e-6就是代码有bug。

第二个细节:工作抛物面的参数化。理想抛物面的主轴不是随便取的。第1问目标在天顶,主轴就是 z 轴;第2问目标在天体的某个方位,主轴就是天体的反方向。正确的做法是:根据入射电磁波方向确定主轴方向,再根据馈源舱位置确定焦点,最后用顶点、焦点、主轴三个条件确定抛物面方程。

第三个细节:约束的物理可实现性。最小二乘只管"节点尽量贴近抛物面",不管促动器行程够不够、面板会不会被撕裂。所以模型里必须带上位移范围约束。实操中更稳的做法是"两阶段":先用无约束或弱约束的最小二乘求出理想位移,再检查哪些节点超限,对超限节点做二次调整。这个思路写进论文里,评委一看就知道你考虑过物理可实现性。

求解方向上,如果不想一上来就碰复杂的非线性规划,可以先固定抛物面参数,把内层问题用带约束的二次规划解出来,再用粒子群或网格搜索在抛物面参数空间里寻找最优解。如果你用的是Python,scipy.optimize.minimize的 SLSQP 方法比较适合处理这类问题。下面是内层求解的大致代码框架:

import numpy as np from scipy.optimize import minimize def displacement_objective(dr, nodes, p): # dr: 节点径向位移向量 # nodes: 节点球坐标 # p: 抛物面参数 (顶点, 焦点, 主轴方向) # 返回所有节点到抛物面的偏差平方和 p_nodes = nodes_shift(nodes, dr) # 计算位移后的节点坐标 dists = paraboloid_distance(p_nodes, p) return np.sum(dists ** 2) def constraint_travel(dr): # 促动器行程约束 return max_travel - np.abs(dr).max() cons = [{'type': 'ineq', 'fun': constraint_travel}] res = minimize( lambda dr: displacement_objective(dr, nodes, p), x0=np.zeros(n_nodes), method='SLSQP', constraints=cons )

外层对抛物面参数用网格搜索或粒子群更新,不断重复"更新抛物面参数→内层求最优位移"这个过程,直到收敛。这个方法思路清晰,第三天写论文时也容易讲明白。

3. 拆解C题:供应链数据题拼的不是算法,而是数据清洗和目标取舍

C题是我个人觉得最贴近真实工作场景的一道题。你以后进企业、做供应链优化,遇到的基本就是这类问题——数据又脏又碎,目标互相冲突,供应商还不老实。这一章我重点讲三个环节:供应商画像、订购转运联合优化、灵敏度分析。

3.1 从零散的48周数据里找到供应商的"可靠度"

C题给的数据,是企业过去5年每周对每家供应商的订货量、实际供货量,以及原材料分类和转运商信息。很多队伍拿到数据就开始想复杂模型,结果连"重要供应商有哪些"都没说清楚。其实第一步要做的是供应商画像,也就是用几个关键指标,把每一家供应商的"靠谱程度"算出来。

我建议至少统计四类指标:

  • 供货完成率:总实际供货量除以总订货量,反映供应商"说多少给多少"的程度;
  • 供货稳定性:每周供货量的变异系数,变异系数越小,供货越稳定,说明供应商的生产能力有保障;
  • 原材料质量:A类、B类、C类原材料的占比,这直接关系到企业产品的质量;
  • 合作持续性:供应商在5年数据里出现多少周,偶尔出现和持续合作的供应商,信任程度完全不同。

把这些指标用熵权法或者简单的加权平均合成一个综合评分,按评分把402家供应商分成核心供应商、备选供应商和淘汰供应商三档。这个分档结果,是后续所有问题的基础。

这里有一个容易被忽略的点:原始数据里有很多周供货量为0的记录。0有两种含义,一种是"没订货",一种是"订了但没送到"。这两种情况必须分开处理,否则统计出来的供货完成率会被严重扭曲。我处理时会把"订货量为0"的记录直接剔除,只保留"订货量>0且实际供货量>=0"的记录来算供货特征。

3.2 订购+转运联合优化:目标函数该列几项

第二问要求制定未来24周的订购计划,并选择转运商。这个问题的本质是一只多目标优化。你至少要同时考虑采购成本、转运成本、缺货风险和库存容量。

我把目标函数写成了这样:

min Z = α * 采购成本 + β * 转运成本 + γ * 缺货惩罚 + δ * 库存超限惩罚

其中 α、β、γ、δ 是权重系数,用来表达企业对不同目标的重视程度。采购成本是每家供应商的原材料单价乘以订购量;转运成本取决于选哪家转运商,以及每周运输数量;缺货惩罚是当周实际到货量低于生产需求时产生的损失;库存超限惩罚是库存量超过了仓库容量时的惩罚费用。

约束条件里,必须包含以下几个方面:

  • 供应商供货能力:每家供应商每周的最大供货量从历史数据里取分位数估计,不能无限订货;
  • 转运商运力上限:每家转运商每周能运的总量有限,不可能全压在一家身上;
  • 库存容量约束:企业仓库容量有限,库存不能超过上限;
  • 供需平衡约束:每周到货量加上期初库存,减去生产消耗,等于期末库存。

这个模型是一个混合整数规划。是否选择某家转运商是0-1变量,每家每周的订货量是连续变量。如果你用Python,可以用PuLP或scipy.optimize.milp求解。我自己的经验是:先把模型规模写小一点,比如先只考虑10家核心供应商、3家转运商,跑通之后再把所有核心供应商加进去,这样排查建模错误会快很多。

3.3 评分模型、灵敏度分析和论文呈现

第三问通常要求你把方案做得更"聪明"一些,比如优化转运损耗、或者考虑供应商的风险。这时候评分模型就派上用场了。供应商评分可以用来设置订货量的优先级:评分高的供应商,可以多下订单;评分低的供应商,只作为补充。转运商的选择同理,可以把"平均损耗率"和"单位运输成本"两个指标做一个平衡。

灵敏度分析是我要特别强调的部分。供应链问题的数据质量并不高,供应商供货波动很大,你的最优方案在数据稍微变化之后是否还成立,这非常关键。我通常的做法是:把供应商平均供货能力下调10%重新求解,把某家转运商的损耗率上调5%重新求解,看目标函数值的变化幅度。如果变化在可接受范围内,说明方案是稳健的;如果稍微一扰动结果就崩了,那这个方案就不够可靠。

论文呈现上,你不需要把24周、几十家供应商的订货量全部列成表格。评委最关心的是三张图:每周总订购量折线图、每周实际到货量和库存量柱状图、各转运商的运量分配堆叠图。这三张图摆出来,你的方案一目了然,剩下的是公式和文字解释。

4. 三天赛程怎么分配:从读题到交卷的高效节奏

很多队伍不是输在模型上,而是输在时间管理上。第一天晚上还在换题,第二天下午还在争论建模框架,第三天晚上开始疯狂赶论文。这种节奏基本等于放弃国奖。下面是我自己带队时惯用的时间表,你可以直接拿去做模板。

4.1 第一天:读题、定题、把数据摸清

上午8点到10点,全员独立浏览五道题,每个人记下自己第一感觉好做的题和难点。10点到12点,团队讨论定题。这里我有一条硬规矩:最晚当天下午2点前必须定题,之后不允许再换。换题的隐性成本极大,看似重新选了一条容易的路,实际上前面所有读题投入全部归零。

下午的时间用来做三件事:一是确认题目的每一条要求,列出"问题一、问题二、问题三"分别要输出什么结果;二是把数据完整读入,统计数据量、缺失值、异常值,画出初步的分布图;三是把题目里的专业术语翻译成建模语言。这个过程最好把关键结论记录在共享文档里,写论文的时候能直接引用。

4.2 第二天:建模求解和"跑出第一版结果"

第二天上午,模型假设要定下来,至少问题一要有初步模型。下午开始编程求解,务必在傍晚前跑出第一版结果。这一版可以粗糙一些,参数先取粗略值,目标函数先保留主要项。我要强调的是:先有一个"能跑通的结果",比什么都重要。哪怕这个结果还不够好,它可以验证你的模型有没有逻辑错误、代码有没有bug、求解器能不能收敛。

很多队伍第二天晚上还在无限细化模型,我特别不建议这样。正确做法是:第二天晚上就把论文框架搭好,把"引言""模型假设""符号说明"这些不太受数值结果影响的部分写起来,让写作的人先动笔。否则第三天你会发现,论文根本写不完。

4.3 第三天:论文写作、灵敏度分析和最终检查

第三天上午,补充模型细节,把灵敏度分析跑完。关于灵敏度分析,我建议挑1到2个最有说服力的参数来扰动,比如成本系数、供应商供货系数,分别增加和减少5%到10%,记录目标函数值的变化情况。这样既能让评委看到你的模型经得起检验,又不会把自己累垮。

中午开始写摘要。摘要的重要程度怎么强调都不过分,我见过太多队伍在最后两小时草草写摘要,结果文章质量高也拿不到好成绩。下午2点到4点,全面检查公式编号、图表标题、单位、参考文献格式,然后花最后的时间把摘要改到每个字都删不掉为止。

5. 评阅视角下的加分项与失分点:我反复踩过的坑

最后聊一聊评阅视角。这些年我看了不少国赛论文,也跟一些评委交流过,有些规律是一再出现的。

5.1 摘要:评委可能只看这一页

国赛论文的评阅时间非常有限,摘要几乎是决定第一印象的唯一内容。摘要里必须包含四件事:问题是什么、你建立了什么模型、用什么方法求解、得到了什么关键结果。不要用"本文介绍了"这种废话开头,第一句就点明问题。数字要有,但要写关键数字,比如"优化后反射面偏差降低至0.7毫米",这比"明显改善"有说服力得多。

5.2 图表和结果呈现的细节

图表质量直接体现你的认真程度。每张图必须有图号、图题、坐标轴标签和单位,每张表必须有表号、表题、表头单位和必要的注释。公式要用编号,模型假设要逐条列清楚。这些细节看起来琐碎,但在评阅阶段非常拉好感。我还见过有队伍把Excel里的坐标轴标题都忘了删,这种错误一出现,论文档次立刻就下来了。

5.3 灵敏度分析与模型检验:为什么一定要写

有些参赛队把模型建立和求解做得很漂亮,但缺少灵敏度分析,导致评委无法判断模型的鲁棒性。其实灵敏度分析并不难,难的是你有没有这个意识。任何一个有参数、有权重的模型,都可以做扰动分析。你只要在论文里设一个"参数变化范围",再给出目标函数值随参数变化的表格或曲线,这一部分就完成了。对于评价类模型,还可以做一致性检验或交叉验证,这类内容同样能在评阅时体现出模型的严谨性。

根据我个人经验,拿国奖的队伍,通常不是算法最高级的,而是"模型合理、求解靠谱、写得清楚"的。算法的炫技往往是一把双刃剑,用得好是亮点,用不好反而暴露短板。

最后再分享一个我带队伍时常说的话:建模比赛最迷人的地方,不是那个获奖证书,而是你在72小时里被迫学会从一堆乱糟糟的信息里抓住本质。2021年的赛题五道题风格各异,但内核都在考察同一件事——你面对一个真实世界的问题时,能不能用数学的语言把它说清楚。2024年的国赛马上又要开始了,如果你正在纠结怎么准备,从这篇拆解里的任何一道题开始动手,都比翻十篇经验帖有用。祝你和你的队友,在下一个9月的夜晚,都能交出一份自己满意的答卷。

返回列表