前言 #
这篇文章主要是对于 CUMCM 2024 的比赛全过程进行一个梳理和总结。
我们的队伍是在 2023 年的冬天组起来的,CUMCM 2024 也是我们第一次参与“数学建模”比赛。经过了大大小小的模拟赛,最终进入了全国的比赛。在提交最终论文之后获得省级一等奖并推荐国家级一等奖,最终获得国家级二等奖。
整个过程有振奋惊喜,也有失落遗憾;我们在比赛中应该是做对了一部分事情,因此我们初次参赛就获得了国家级奖项;但不足肯定是有的,毕竟从“推荐国家级一等奖”变成“国家级二等奖”总是有理由的。
总之,这次经历着实是令人难忘,更加值得梳理和总结经验,为明年的比赛作准备。
用词说明 #
用词 | 说明 |
---|---|
计算系统 | 传统意义上的建模过程,即封装一个超大的函数 |
优化系统 | 用于优化计算系统中可调参数的系统,生成最优参数配置 |
计算流 | 计算系统中输入数据的处理过程 |
计算流结点 | 工作流中关键性的中间步骤 |
优化流 | 优化系统的主体逻辑 |
论文主体内容 | 包括摘要、重述、计算流和优化流的描述、结果展示与分析,也就是论文收尾之前的所有内容 |
论文收尾 | 包括灵敏度分析和模型推广 |
客观情况 #
任务分工 #
虽然比赛有很多个选题可供选择,但是我们小组选择专攻优化类问题,也就是 A 题。
- 我:建模 + 代码 + 部分论文撰写
- CL:建模 + 论文撰写 + 部分代码
- HWJ:论文美化
工作流程 #
整个 A 题的代码部分大致可以分为两个系统:
- 计算系统:
- 功能:接受输入数据与参数,返回需要的结果
- 性质:直接由题目决定,不同题目有不同的计算系统,需要临时构建
- 优化系统:
- 功能: 接受计算系统并将其作为可优化的目标函数,执行自身的优化逻辑,最后返回计算结果
- 性质:方法体系较为成熟,可以在比赛前就进行多种优化系统的准备
论文撰写部分分为:
- 整体框架:由 LaTeX 模板决定
- 主体内容填充:对工作流和优化流的清晰描述
- 排版和美化:调整各个部分的详略,搭配说明性的图片(流程图,示意图)
- 收尾内容
预建模 #
-
目标:在精确理解题目的前提条件下,迅速进行初步的建模,基本确定建模方向、计算方法;
-
预计用时:3h
-
工作:队伍所有成员都进行全网资料查询,看看有没有基本命中题目的文献资料
- 命中成功:最理想的情况,这个时候直接研读论文,收集思路即可;
- 命中失败:虽然没有现成的资料可供参考,但是在查阅文献的过程中或多或少也积累了一定的思路
建模初期 #
-
总目标:构建足够精确的、适配优化方法的计算系统
- 建模:明确输入数据在各个计算流结点之间的操作
- 代码:用代码实现计算流,实现数据可视化
- 论文:填充第一个小问的内容,并初步排版
-
预计用时:30h
-
工作:
- 所有队员一起进行建模,优先明确建模思路,给出完整的数学推导过程
- 我和 CL:代码实现与论文内容填充同步进行
- HWJ:绘制无法用代码生成的更加生动的示意图
建模中期 #
-
总目标:构建合适的优化系统
- 建模:根据计算系统的特殊性,选择最为匹配的优化系统
- 代码:在实现优化系统的过程中进行微小改动,匹配计算系统
- 论文:完成论文的主体部分,开始进行局部细节微调
-
预计用时:20h
-
工作:与前面类似只不过工作的中心从代码编写转到了论文撰写
- 精简论文,此时的论文非常臃肿
- 微调论文的逻辑,使得上下文关联度更高
- 美化排版,减少文字,增加图片
建模后期 #
- 基本建模完成了,全员进行漏洞的检查:
- 错别字、不准确的表述、公式拼写错误等常规检查
- 优化代码中的注释,让其更加易读
- 重点检查个人信息
C:\Users\Morethan
;保留个人信息是非常严重的错误!
实战效果 #
当我们将上述策略应用于实战过程中,也就是 CUMCM 2024 的正式比赛中,得到的效果如下:
- 有效用时:
- 比赛总时长三天,共计 72 小时
- 队伍从早上七点到晚上八点,除开吃饭用时,一天的有效时间为 12 个小时
- 时间利用率为 \(50\%\)(对比之下很低🤔)
- 最终完成工作:
- 论文主体 28 页 A4 纸
- 代码部分 35 页 A4 纸,除开每一个小题之间的复用代码,应该有 20 页左右
- 全文配图共计 25 张
- 以上数据是论文精简之后的,初稿论文将近 50 页
- 未完成工作:
- 最终结果的计算,由于计算量过大(代码效率并不高),最终提前两个小时写完所有代码,但并没有足够的时间运算出结果😭😭
- 模型的计算精度不够,精度为
1s
没有达到标准答案给出的精度 - 论文的收尾部分其实并没有完成
优点 #
选题 #
-
专注于 A 题,在模拟赛中积累了充分的经验,磨合出了一套高效的工作流程
-
对于 A 题的方法论构建比较完善
工作流程 #
-
工作流程相对清晰,效率较高
-
以最终论文为导向,建模、论文、代码三线同时进行,保证了论文内容的充足
分工 #
-
采用模糊分工,每个队员都有一个主要分工和次要分工,在各自的主要分工上能够独立工作,在其他的次要分工上面也能够完成一定的工作,大大提高了时间利用率
-
队员很给力,因为同时兼顾两个分工任务意味着更多的学习成本
不足 #
工作流程 #
-
计划很完美,但是在实践中还是有些必要的环节没有做好
-
有效时间占比:晚上八点收工太早了!应该占用更多的时间来进行建模试错,保证模型的正确性和精确性
分工 #
-
代码的编写、代码的调试、代码的可视化、结果的计算、结果的可视化所涉及的代码量太大,一人难以搞定;
-
因为模糊分工所引起的任务重叠,增加了协同成本
建模 #
- 题目理解准确度:这次我们对于题目的理解出现了较大的偏差,导致我们浪费了挺多时间在模型修正上面;
代码 #
-
代码的效率:之前由于没有时间的限制,导致对于“超长”代码的准备不足,没有代码并行的经验;
-
结果精度:一开始建模过于粗糙,并且用了一个不好的特性:将时间步长设置为 1 ,并且将作为数组索引,导致后期难以将时间的步长减小,导致最后结果的精确度不够
改进方案 #
- 精心挑选场地,增加有效时间✨是最重要的✨
分工 #
-
略微改动人员分工,增加代码方面的人力投入
-
在各自的主要分工和次要分工上增加学习投入,增加工作效率
建模 #
- 更专注于题目的理解,不能太着急;建模错误再修正是得不偿失的
代码 #
-
构建一套行之有效的代码协同方案,增强代码编写速度
-
着手构建代码编写规范:
- 变量命名
- 文件开头的说明文档
- 代码编写流程规范
-
代码并行化:在代码中添加一些可并行的代码,提高运行速度
- 落实后的方案:代码协同方案
论文 #
-
研究优秀论文
- 关注其论文框架
- 关注其语言风格、文本可读性、详略、配图逻辑、图片可读性
-
改进自身
- 优化论文主体逻辑框架,细化每一块的内容
- 语言风格、文本可读性、详略、配图逻辑、图片可读性等等细节的改进
总结 #
一份没有满分的答卷比一份满分的答卷更有收获!
积累应用数学的知识,增强论文撰写能力,提高发现问题的能力,这是比比赛本身更有意义的东西🫡
CUMCM,每一个数模人都能从中受益🤗