1. 从“数学好玩”到“数学好用”:一次竞赛的深度复盘

“数学好玩”,这是著名数学家陈省身先生为少年儿童的题词,充满了对数学纯粹之美的欣赏。但当这句话成为2019年亚太地区大学生数学建模竞赛(APMCM)的主题时,它就不再仅仅是一句鼓励,而是一个充满挑战的命题。作为一项面向全球大学生的顶级赛事,APMCM的题目向来以贴近现实、综合性强、开放度高著称。2019年的这场竞赛,正是要求参赛者将“好玩”的数学理论,转化为“好用”的解决方案,去应对一个复杂而迷人的现实世界问题。今天,我想抛开官方总结和获奖论文的光环,从一个深度参与者的视角,复盘这场竞赛的核心脉络、解题心路历程,以及那些在聚光灯之外、却至关重要的实战经验与思维转变。无论你是未来有志于参与数模竞赛的同学,还是对如何运用数学工具解决实际问题感兴趣的从业者,这篇超过五千字的“赛后笔记”,或许能给你带来一些超越标准答案的启发。

2. 赛题本质拆解:当“空气动力学”遇上“数据科学”

2019年APMCM的赛题,具体聚焦于 无人机在复杂山地环境下的高效巡检路径规划问题 。题目给出了山区的地形高程数据、无人机的性能参数(如续航时间、爬升率、巡航速度)、以及需要巡检的多个离散目标点。参赛队伍的核心任务,是建立数学模型,为无人机规划出一条总耗时最短、或总能耗最低、且能覆盖所有目标点的飞行路径。

这听起来像一个经典的“旅行商问题”(TSP)变种,但“好玩”和挑战性就藏在细节里:

  1. 地形不是二维平面 :山区地形意味着飞行高度随时变化,直接使用二维平面距离计算路径长度严重失真。无人机爬升和下降需要消耗额外的能量和时间,且其性能受限于最大爬升/下降率。
  2. 风场是动态干扰 :题目引入了风场数据,风向和风速会影响无人机的实际地速和能耗,逆风飞行更耗能耗时。路径规划必须考虑风场这一不确定因素。
  3. 目标点非均质 :不同目标点可能有不同的巡检优先级或所需停留时间,这增加了问题的复杂性。
  4. 多目标优化 :最短时间、最低能耗、甚至路径平滑度(减少急转弯以节省能耗)之间往往存在矛盾,需要权衡。

因此,这个赛题的底层逻辑,是 空气动力学、地理信息系统(GIS)、运筹学与数据科学的交叉 。它要求我们将物理世界的约束(无人机动力学、地形、风场)转化为数学模型中的参数和方程,再运用优化算法在巨大的解空间中寻找满意解。这完美诠释了“数学好玩”——它不再是书本上抽象的公式,而是连接现实问题与最优决策的桥梁。

2.1 核心模型构建:从物理约束到数学方程

我们的建模工作从定义核心变量开始。设无人机飞行路径由一系列航路点序列构成,每个点包含三维坐标(经度、纬度、高度)。关键步骤在于量化两个连续航路点之间的飞行成本(时间或能耗)。

飞行时间成本模型 : 飞行时间 T_ij 从点 i 到点 j,不能简单地用三维欧氏距离除以空速。必须分解为水平移动和垂直移动。

  1. 水平段 :计算水平投影距离 d_h 。考虑风场影响,无人机的空速向量与风速向量合成得到地速向量。这里需要用到向量运算,求解在地速方向上的实际飞行时间。这是一个典型的运动合成问题。
  2. 垂直段 :计算高度差 Δh 。根据 Δh 的正负和绝对值,判断是爬升、下降还是平飞。然后根据无人机的最大爬升率 V_climb 和最大下降率 V_descend 计算垂直方向所需时间 T_v = |Δh| / V_climb (或 V_descend)
  3. 合成 :水平飞行和垂直飞行是同时进行的,因此从 i 到 j 的飞行时间应取 T_h T_v 中的较大值,因为无人机不能超越其在任一方向上的性能极限。更精细的模型会考虑爬升/下降角与巡航速度的耦合,但作为竞赛模型,我们采用了这种简化的“瓶颈”原则,实践证明是合理且可计算的。

飞行能耗模型 : 能耗模型更为复杂,我们将其简化为与飞行时间、爬升功以及风阻相关的函数。 E_ij = P_cruise * T_ij + k * Δh + f(Wind_ij) 其中:

  • P_cruise 是无人机平飞巡航时的平均功率。
  • k * Δh 项表示克服重力爬升所做的功( Δh>0 )或利用重力下降回收的能量( Δh<0 ,此项为负),k 是转换系数。
  • f(Wind_ij) 是风阻引起的额外能耗,我们将其建模为与逆风分量大小成正比的项。

通过这两个核心模型,我们将一个连续的物理飞行过程,离散化并量化为一组可计算的边权值,为后续的路径优化打下了坚实的基础。

2.2 算法选型与迭代:在“最优”与“可行”间权衡

面对这样一个NP-Hard的组合优化问题(带有复杂约束的TSP变种),追求绝对最优解是不现实的。我们的策略是分层优化,结合启发式算法与局部搜索。

第一阶段:构造初始可行解 我们放弃了传统的最近邻法,因为其完全忽略了地形和高度。我们采用了一种 基于“势能”的启发式方法 。将每个目标点视为一个“电荷”,其“势能”由该点的高度和其与未访问点之间的综合成本(预估)决定。无人机总是倾向于飞向“势能”更低(即综合飞行成本更低)的下一个点。这种方法生成的初始路径,虽然不一定最短,但能有效避免一开始就规划出需要剧烈反复爬升下降的“愚蠢”路径。

第二阶段:智能优化与局部搜索 我们采用了 模拟退火算法(SA) 作为主框架。其优点在于能跳出局部最优,适用于我们的复杂成本函数。邻域操作我们设计了三种:

  1. 2-opt交换 :随机选择路径中不相交的两条边进行交换,是TSP问题的经典优化操作。
  2. 节点重插入 :随机选择一个目标点,将其从路径中取出,插入到另一个随机位置。
  3. 片段反转 :随机选择路径中的一段,将其顺序反转。

每一次迭代,新路径的成本由我们前述的飞行时间/能耗模型快速计算。模拟退火中的“温度”参数控制着接受劣解的概率,初期允许“瞎逛”以探索解空间,后期则趋于“贪婪”以收敛。

第三阶段:后处理与精细化 通过模拟退火得到一个较优路径后,我们并未停止。我们引入了一个 关键的后处理步骤:航路点高度平滑 。检查路径中每一个“山峰-山谷-山峰”的片段,如果无人机先爬升到一个高点,紧接着又下降到低点,然后再次爬升,这显然是低效的。我们尝试在满足无人机最大爬升/下降率约束的前提下,微调中间点的飞行高度,使其飞行剖面更加平滑,从而直接降低垂直方向的飞行时间与能耗。这个步骤往往能带来5%-10%的额外收益,是容易被忽略的“甜点”。

3. 数据处理与可视化:让模型“看见”地形

题目提供的地形数据通常是网格化的高程数据(DEM)。如何高效处理并融入模型至关重要。

我们使用Python的 rasterio 库读取DEM数据,并用 numpy 进行矩阵运算。对于任意一个(经度,纬度)点,通过双线性插值快速获取其高程值。这比直接读取最近网格点的高程要精确得多,尤其是当网格分辨率不高时。

风场处理 更具挑战。风场数据可能是网格化的矢量场(U, V分量)。我们采用了相对简化的处理:对于路径中的一条边,取其起点和终点风场的平均值作为该段路径的近似风场。更精细的做法是沿路径积分,但计算开销巨大,在竞赛时间限制下性价比不高。这里体现了建模中的一个重要取舍: 在模型精确度与计算复杂度之间找到平衡

可视化是理解和沟通的利器 。我们使用 matplotlib plotly 生成了三维地形图,并将优化前后的无人机飞行路径叠加其上。用颜色梯度表示飞行高度,用箭头表示飞行方向,风场用流线图示意。一幅清晰的可视化图,不仅能帮助我们自己验证路径的合理性(比如有没有“穿山而过”),更能在论文中极大地增强说服力,让评委一眼看懂你的解决方案在物理世界中的样子。我强烈建议在数模竞赛中投入一定时间进行高质量的可视化,这往往是区分优秀论文和普通论文的关键。

4. 团队协作与时间管理:一场72小时的极限挑战

APMCM是72小时连续作战。如何分工协作,直接决定成败。我们队采用了“螺旋推进式”工作流,而非简单的线性分工。

第一天(0-24小时):问题共识与初步建模 全员集中精力读题、讨论,确保每个人对问题的理解完全一致。然后,我们并行开展:

  • 队员A:负责核心数学模型构建,推导飞行时间、能耗公式。
  • 队员B:负责数据处理与工具链搭建,编写读取地形、风场数据,计算两点间成本的函数。
  • 队员C:负责文献调研与算法调研,寻找适合的优化算法框架,并开始撰写论文的“问题重述”和“模型假设”部分。 第一天结束前,我们必须完成一个 最小可行模型(MVP) :即能用最简化的假设(如忽略风场,地形平坦),跑通从数据输入到生成一条路径的完整流程。这建立了全队的信心和后续迭代的基础。

第二天(24-48小时):模型迭代与算法实现 基于MVP,我们开始迭代:

  • 队员A和B协作,将复杂的飞行成本模型、风场影响逐步集成到MVP中,更新成本计算函数。
  • 队员C将选定的模拟退火算法框架实现,并与A、B提供的成本函数对接。
  • 同时,队员A开始撰写模型的详细描述部分,队员C撰写算法部分。 第二天是攻坚期,会遇到各种bug和模型不合理之处。我们约定每4小时进行一次简短同步,快速调整方向。关键是要 保持代码的可复现性 ,所有参数和实验记录都详细存档。

第三天(48-72小时):全面实验、论文撰写与整合

  • 队员B负责运行一系列对比实验:不同初始解生成方法、模拟退火的不同参数(初始温度、冷却速率等)对结果的影响。用图表展示优化过程收敛性和结果对比。
  • 队员A和C全力投入论文撰写。A负责模型、实验设计部分的深化,C负责摘要、灵敏度分析、结论部分的撰写。
  • 最后12小时,全员共同进行论文的整合、校对、图表美化、格式调整。摘要需要反复打磨,确保在500字内清晰阐述问题、方法、模型、算法、主要结果和结论。

我们的血泪教训

  1. 备份!备份!备份! 我们曾因一次程序异常退出,丢失了半天的实验结果,幸亏有定时备份的习惯。
  2. 沟通成本函数 :负责建模和负责编程的队员必须对每一个公式、每一个变量的含义理解一致。我们曾因对“飞行时间”定义理解有细微偏差,导致后续所有结果错误,浪费数小时。
  3. 留足论文时间 :模型再漂亮,表达不出来也白搭。最后一天一定要留出足够的时间用于撰写和润色论文,特别是摘要和结论。

5. 从竞赛到现实:数学建模思维的迁移价值

回顾2019 APMCM,其价值远不止于一纸证书。它训练的是一种 用数学语言描述和解决复杂系统问题的能力 。这种能力在当今的数据驱动时代极具价值。

在工作中,我多次遇到类似“无人机路径规划”的问题,例如:

  • 物流配送优化 :为车队规划配送路线,需要考虑实时交通(类似风场)、车辆载重和速度(类似无人机性能)、客户时间窗(类似巡检优先级)。
  • 网络资源调度 :在数据中心间调度计算任务,需要考虑网络带宽(类似地形起伏)、节点负载(类似风场干扰)、任务依赖关系(类似访问顺序)。
  • 金融投资组合 :在风险(类似飞行能耗)和收益(类似覆盖目标点)之间寻找平衡,本质上也是一个多目标优化问题。

解决这些问题的框架是相通的: 定义目标与约束 -> 量化成本/收益 -> 设计或采用合适的(启发式)算法进行搜索 -> 评估与验证结果 。APMCM这样的竞赛,提供了一个高强度的沙箱环境,让我们在短时间内完整地实践这个框架,并深刻理解其中每一个环节的陷阱与技巧。

“数学好玩”,在于它揭示了世界运行的简洁规律;“数学好用”,在于我们能将这些规律转化为改造世界的工具。2019年那个在机房鏖战三昼夜的冬天,我们不仅是在求解一道赛题,更是在学习如何让数学“活”过来,去对话、去分析、去优化那个我们身处其中的、纷繁复杂的现实世界。这份经历,以及其中收获的思维模式与实战技能,才是比赛留给我们的、最持久的礼物。如果你也准备踏上数模竞赛的旅程,我的建议是:享受“玩”数学的过程,但更要专注于锤炼“用”数学解决真问题的能力。当你看到自己构建的模型,在计算机的辅助下,吐出一条条优雅高效的路径或方案时,那种成就感,或许就是对“数学好玩”最生动的诠释。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐