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问目标在天体的某个方位主轴就是天体的反方向。正确的做法是根据入射电磁波方向确定主轴方向再根据馈源舱位置确定焦点最后用顶点、焦点、主轴三个条件确定抛物面方程。第三个细节约束的物理可实现性。最小二乘只管节点尽量贴近抛物面不管促动器行程够不够、面板会不会被撕裂。所以模型里必须带上位移范围约束。实操中更稳的做法是两阶段先用无约束或弱约束的最小二乘求出理想位移再检查哪些节点超限对超限节点做二次调整。这个思路写进论文里评委一看就知道你考虑过物理可实现性。求解方向上如果不想一上来就碰复杂的非线性规划可以先固定抛物面参数把内层问题用带约束的二次规划解出来再用粒子群或网格搜索在抛物面参数空间里寻找最优解。如果你用的是Pythonscipy.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), x0np.zeros(n_nodes), methodSLSQP, constraintscons )外层对抛物面参数用网格搜索或粒子群更新不断重复更新抛物面参数→内层求最优位移这个过程直到收敛。这个方法思路清晰第三天写论文时也容易讲明白。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月的夜晚都能交出一份自己满意的答卷。
返回列表