数模经验分享

数模经验分享

这篇文章主要包括以下内容:

  • 如何半个月“速成” /li>
  • idea是如何产生的/li>
  • 如何准备写作/li>
  • 代码能力不强怎么办/li>
  • idea很合理,跑出来不对劲怎么办/li>
  • 大杀器—vscode

概况

很幸运地,我们在今年美赛的C题中,获得了的F奖。这个结果是喜出望外的,毕竟我们都是大二的学生,有两名队员未参加过数模竞赛,我也仅仅在大一参加了国赛。我们分别来自腾班、数金、大数据班,大概是2021年10月组队,寒假前学业比较繁忙,并没有花很多时间准备,主要是在寒假1月中旬开始准备到2月初春节休息了一周,之后在美赛前一周做了一次模拟,稍微总结休息了一下,便比赛了。

我认为参加美赛取得不错成绩的必要条件是:

  • 合理的队伍安排:专业的要求不高,但是需要每个人能够有足够信心担当起自己应该负责的部分。
  • 较强的自学能力:包括有赛前对一些经典算法自学能力和比赛中面对陌生问题自学查阅资料、确定解决方案的能力。(说实话,这一点是最难的也是最为可贵的,勇于走出舒适区接受陌生知识并不容易。)
  • 良好的心态:既不非要获奖,又不会因为遇到困难而摆烂(参加过的人都知道建模毫无头绪有多痛苦)。

赛前准备

我们当时是上学期间陆陆续续地准备过一些,到了寒假的时候大概全力准备了大半个月。

系统准备

这主要分为建模、写作和编程三大方面,在这里,建模部分应该最为繁杂,下面从建模算法的学习与编程实现、写作与作图三大方面介绍。

建模算法的学习与编程实现
1.建模算法的学习

这已经是最基本的要求了,但是传统算法的内容多而繁杂,因此更好的是有选择性地学习,针对相应选题选择相应算法,而在算法的学习中,不应该局限于书本,且需要多注意一些侧重点。
对于每一个算法的理解,可以从下面方向思考:

  • 这个算法解决了什么问题/li>
  • 它是如何解决的/li>
  • 它有何长处与缺陷/li>

这三个问题是层层递进的

  • 首先,算法的应用场景是重中之重,这也决定了一个建模者是否能产生解决问题的思路:例如PCA(主成分分析)能够解决的问题便是数据降维、以及依据特征值来评价降维后的主成分的重要程度。(个人以为,一些论文使用PCA的特征值来评价降维前的主成分的重要程度是不严谨的)。此外,数据的输入和输出是什么,其实际含义是什么,这也是十分重要的一点。
  • 其次,了解完应用场景后,便需要理解算法是如何解决问题的。这里不是需要看懂书上的推导,也非复述书上概括性很高,但是读了难以领悟的话。而是尝试通过自己的话概述算法的思想,例如,PCA的思想便是通过寻找方差最大的若干个方向,并将数据投影到这些方向上,使得数据投影后尽可能地分散从而达到降维的目的,特征值便是衡量方差大小的指标。虽然这不完全正确,但是每一次具体地概括与讨论会加深理解进而速通一些更先进的算法,如LDA(最小化类内方差,最大化类间方差)、KPCA(引入核函数)……而这些算法,往往在相应场景比传统算法更有应用价值,也会成为加分项。

接着,可以对算法进行分类,在建模中,大体步骤都是,预处理数据、针对问题(回归、分类、聚类等)设计解决方案、评价方案。因此,在解决问题中,我们可以将一些算法进行分类,并横向比较优劣。
例如,搜索算法中,有BFS、DFS、A*、UCS、遗传算法、模拟退火算法、局部搜索……而BFS、DFS、A*算法中仅仅是搜索的优先度不同,而模拟退火则是给一定的概率先接受一个不那么好的解以避免陷入局部最优解,其概率随迭代次数递减,这样设计算法是因为一开始陷入局部最优的概率更大,而算法迭代到后面陷入局部最优的概率则会变小。(仅仅出于个人理解)。了解到这些之后,利用这些思想甚至可以自己改进一些算法,这远比了解算法具体每一步步骤重要得多。

2.编程实现

这个比赛本质上并不是计软的比赛,许多获奖者也非计算机相关专业学生,因此这一部分似乎并没有这么重要(尽管我本人是计软的学生)。但是验证算法的效果又是重中之重,我的解决方法拥抱开源库。
当然,这并非是要让大家去博客平台改代码。例如python语言,有很多强大的开源的 区,而数模的传统算法,大多数很经典的已经有开源库实现的,这些在官 都是有相关的demo的,只需要了解传入的参数是什么(这也是为什么学习算法的时候要明确解决了什么问题)即可。
例如在sklearn 区中,里面几乎囊括了传统的机器学习算法,并且分类得很好了,也可以以此为纲要进行学习。此外,matlab的工具包更加强大,可以利用官方的文档进行学习。并不需要重复造轮子或是借用博客造的轮子(开源库的可靠性、可移植性远胜于个人博客)。

写作

最后,latex是一个非常不错的写作工具,不需要注意word中的一些小格式要求。搭配vscode熟练使用后,写作速度可以比word快一些(英文写作搭配vscode中的vim插件将更快)。

作图

作图的话,主要包括有表文章结构帮助读者理解的图与数据可视化的图。这些具体的工具,会在后面介绍。需要记住两点的是

  • 不推荐使用默认模板,而比赛期间在python和matlab中调整图的颜色、透明度、形状这些也不现实,可以使用python、matlab中的一些demo的模版。
  • 多学习优秀论文的作图,包括其安排和表现形式。

速成备战

三个人全力以赴半个月也是能够取得比较好的成绩的:

  1. 确定选题,并收集近三年相关论文。
  2. 依据相关论文确定重要的算法。
  3. 尝试复现论文。
  4. 学习写作方法与复刻图。

实战状况

  • 如何产生与确定ideabr> 我认为建模对专业知识的要求其实不是很高,毕竟美赛极少内容是必须相关专业去做的。例如这次的C题是量化投资的题,但是即使我在大一的时候学过量化投资的课程、队伍中有金融背景的同学,我们也是基本上相当于从零开始,查阅相关论文,了解当前一些比较合适的方法(反而,用已学课内的知识去做,很大概率是会失败的,首先,课内知识是一些比较成熟的方法,并不是当前比较好的方法;其次,课内知识很少能较为贴合地解决这个问题,大多是是沾边,倘若生搬硬套,则会得到非常不利的结果)。
    因此,基本上80%的内容都是现学现卖的,作为一个除了当老韭菜就没接触过金融的人,当时查了十几篇金融相关论文,找了一系列量化指标,确定关键词,读了一整天论文,博采众长确定(bian)出了一套交易流程。读论文时也要多注意,先看相关结论,再判断是否需要读,假如很难读懂,直接放弃,但是假如很多篇相关论文都指向同一种方法,那么往往就是解题关键。当然,这期间也会出现很多的,读完才发现,原来是看上去有帮助,实际上没啥用的文章,也要有一颗坚强的大心脏。

  • 实验结果不对劲怎么办br> 只能尝试调整参数了,换一个算法显然代价太大。另外,我发现绝大多数的美赛论文的可复现性并不高,嗯。

一些小干货

轻量一些,直接开一个vscode即可完成编程、作图与写作。

作图软件

  • 收费:亿图
  • 开源:drawio(!裂墙推荐,功能真的不输亿图,关键是!能放在vscode中
  • 数据可视化:matlab、亿图、echarts、pyecharts

编程相关

  • matlab强大的工具包、python的各种库(pandas、sklearn、pytorch

算法相关

谷歌、必应

写作相关

《正确写作美国大学生数学建模竞赛论文》、vscode搭配latex;

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐