@Dmaxiya
2020-08-25T00:45:59.000000Z
字数 4089
阅读 1239
杂记
回想自己加入这个项目组已经有大约半年的时间,因为是中途加入的项目组,所以在这之前还是花费了一些时间对这个项目进行了解。这个项目组只有两个人,所以任务并不轻松,加之辅修的课程以及各种比赛,参与这个项目之后明显感觉到有一定的压力。
我刚进来的时候,老师让我去学一下时间序列分析相关的知识,希望能用时间序列分析的方法,从我们已有的数据里,分析出一些东西来。那时候我想,咦,这不就是一个数学建模吗?就是从限定的三天的比赛时间,延长到了一年,学一个时间序列分析的算法算一算结果就出来了,好轻松啊,因为我不会 语言,老师让我前期先把 语言学了,用 语言来分析数据,又简单,效果又好。
因为我加进来的时间离结项时间还有半年的时间,所以不慌,让我去学一下 就先去学 吧。我们本来定好每周日晚上晚点名结束后,到 9411 工作到九点,这样保证每周能腾两个小时时间出来做科研立项,于是我就每周只在这两个小时的时间里学 语言了。我下载了一本讲 的 书籍,看了大概一个月,每次两小时,能看进去的东西也就一点点,感觉非常头疼,感觉 的语法非常玄学,很难看懂,就像 一样,记得之前第一次参加数学建模的时候,阴小波老师说数学建模最常用的两种语言就是 和 ,我学完 就去学 ,发现 好简单啊, 的语法就非常难学,就是看着书上的会抄代码,自己写的时候,又完全不知道怎么写了。我感觉 和 是两种我学过的最难学的语言了 最终我请求,放弃 语言,我用 一样可以写出来的,就这样,我进来的第一部分,学习 语言,在挣扎了一个月后,放弃了。
接着我就开始用之前写得相当熟练的 (数模华中赛分析数据就是用 来写的,要画图的时候才用 写几个语句,读一下文件,画个结果出来)以及比较熟练的 来正式参与到科研立项的工作当中了。
科研立项时间从开题到我加入的那段时间也快半年了,所以数据比较旧,老师就让之前那个学长再把用 写的,从那个网站上重新爬一遍数据,数据的时间截止到 2017 年 4 月份,爬下来之后发现数据格式就不齐,然后先把这些文件的格式整理一遍,看着数据格式那么漂亮,就觉得可以开始分析数据了吧,结果刚写第一个程序,开始跑,就直接 了,根本不知道怎么回事 ,再回去从数据里挑几个文件打开来看看,发现数据的格式看起来整齐了,内容上却乱七八糟,于是乎还要接着整理数据,我们大概花了两个月的时间来整理数据(不是整整两个月,只有每周两小时),整理数据肯定是写程序来弄的,不会人工一个文件一个文件地检查过去的,细节就不多说了,烦得很,大概就是:
最后数据已经整齐了,就是对于任意一天,要么所有的城市都有这一天的数据,要么都没有,最后写一个程序,用等差数列的形式来补上这些公共缺少的数据;
没想到就整理一个数据就要这么长的时间,还这么烦,因为之前搞数模的时候,数据都是题目里面直接已经给好的,没碰到过这么难办的数据。
数据整理好了,总算可以开始计算了,老师接着就给了我们一篇论文,让我们先把这篇论文看懂了,然后按照这个论文上面给出的方法去算。好,对于看到英文就头大的我,这篇英文论文我愣是一个单词都没看进去,就这样,两周时间过去了,老师来跟我们讨论一下这篇论文里面的内容,基本上就是那个博士生学长来解释了一下这篇论文,说了一下这个是怎么算的,那天之后,我才知道论文原来讲了这么多东西,要算很多东西,接着后面两个月的时间,我就在那里写论文里说的,按照论文上的分析数据的算法,来分析这些数据。
最开始要算的 是皮尔斯关联系数,写完程序发现,这个程序居然要跑几百秒,一算程序的时间复杂度,真的要那么久,接着我就用各种姿势来减少这个皮尔斯关联系数的时间复杂度,最常用的就是前缀和,这样可以通过一次求和预处理,后面可以 计算得到区间 上的所有数字的和,最后程序还是要跑几十秒。后来发现,原来这些是不用管的,因为科研立项只要得出计算结果就行了,不用管程序要跑多久,有的甚至程序要跑几天几夜的,也不管时间复杂度,直接扔到服务器上跑就行了。
后面构出了一张图,然后算这张图的平均最短路、聚集系数之类的,因为我原来在 负责过一段时间图论,这方面就是我比较擅长的了,所以构出网络后的计算,应该就是得心应手的,没有像之前那么烦了。再往后,又要算不同的 和不同的 的取值下的这些值,然后画它们的热图(两个变量,一个函数值),画完之后,我以为我们的科研立项可以分析出一些结果了,我们开始准备写论文吧!接着我们再进行了一次讨论后发现 我还要继续算其他东西,还没结束
后面发现,在我们构图的部分有一些问题,因为是要构一个扁平的图(边不重叠),如果我们直接按照取排名前 条边权的边的话,是不能直接构成扁平图的,这一点也是我们在看论文的时候存有疑惑的地方,就是不清楚,为什么取出前 条边,我们就能得到扁平图呢?博士生学长发现,原来是取前 条不重叠的边来构成扁平图。于是构图这一部分就重新算了。
好,这些东西我们终于画完了,在我以为就要结束的时候,我们又进行了一次讨论,老师还是希望我们能够从时间序列分析的角度,来分析一下这些数据,暂时来说,我们计算得出的结果,不好直接得出什么结论。好嘛,每次讨论,我都有新的东西要算,老师又给我们发了一篇论文,还是英文的
这时候我就急需下一场讨论了,感觉没有讨论,我就根本没办法看懂这篇时间序列分析,真的是非常感谢带我们的博士生学长,要是没有他,我觉得光凭我们俩,一个可能看得懂公式,看不懂英文,一个看得懂英文,看不懂公式,感觉我们看论文,全靠学长
分析完怎么做时间序列分析,就开始写程序了,最开始是要根据五个点来构造可见图,发现五个点可以构成的可见图的模式总共有26种,但是杨会杰老师的 PPT 上却说有 25 种模式,我以为可能发现了老师 PPT 上的科学性错误,我还很激动。学长还是觉得老师 PPT 上出错的可能性不大,让我把自己生成的 26 种可见图模式,和 PPT 上给出的 25 种可见图的模式一个一个对比一下,看一下我多了哪些模式。后来发现,PPT 上的可见图模式比我的多了一种,我的可见图模式比 PPT 上的多了两种,我们把这三种可见图单独拿出来画一下,看看能不能构造出这样的可见图的数据,发现我的那两种可见图的数据没办法构造出来,再认真一想,发现原来是自己写的构造可见图的函数出了问题,应该是,如果每个点要往后面的点来连边的话,必须要保证,我这两个之间的斜率,要大于原来的最大斜率,而我的程序写成了只要大于前一个点的斜率就行了。
接着后面的程序就比较顺利了,因为时间序列分析就是把每种模式作为一个节点,然后按时间顺序向后连边,构造出 25 个节点的图,仍然是在一个图上去跑去分析,跑出结果后,再回到原序列上做一些计算,得出 的值,对 和 分别取 再拟合 直线,求斜率得到赫斯特指数,这一部分相对来说都比较简单,只要两三周就完成了(当然也和结项时间快到了有关)。
我对数学建模兴趣不大,很少主动参加数模,都是别的同学拉我参加的,一般是两种情况,一种是拉我参加的那个同学比较强势,我就听他的,他让我写什么程序我就写给他,一般用 或者 就已经足够解决那些问题了,另一种情况是,拉我参加的同学很水,我就兼任建模和编程,虽然是我主导,但是我兴趣仍不是很大,就学一下和这次的题目相关的一些算法(几乎都是中文的),写一下代码瞎扯扯,说我们分析出了什么,也不管分析出来的结果好不好,如果不好,就在论文里面扯一扯就好了。反正是没我他们更不会,我分析出东西来了,总比什么都分析不出来好,有时候就这样也能拿奖,我这种态度也没有遭到什么反对,当然这种态度也和其他的那种水队差不多,算不出来什么东西就在论文里面瞎扯。
最开始也是被同学拉来做科研立项的,因为那时候另外两个退出了,我加进来后就两个人,我负责程序部分,而且老师也已经给我一个明确的方向,就是做时间序列分析了,所以这不就像极了数模组队,别人拉我写程序的那种模式吗,加上时间又多,没有数模那么紧张,所有我就觉得很轻松,算出来后在论文里分析分析,这个科研立项就结项了。
后来做着做着,发现这个科研立项要花的时间比我想象的要多很多,而且除了周日晚点名之后,平时老师也组织我们来讨论,看一下我们的进展,讨论一下下一步怎么做,而且每次都讨论出了一些东西,也确定了接下来我的任务,一步一步往下走。现在想来,还是很感谢老师让我们每周日固定两个小时的工作时间,以及不定时的讨论,如果没有每周日的这两个小时,我们可能做个半年也就搞个时间序列分析,套个算法了事了,不会有什么实质性的进展。也很感谢带我们的博士生学长,他的观点、见识和看法,都远比我们要强,要说让我写程序计算可以,但是让我分析这个计算结果,我只能随便说说了;而如果没有李柬瑶的话,像我们学院的每周签到啊,科研经费报销啊,填表啊写东西啊这些需要走动或者涉及到文案的事情,很可能会一团糟。总的来说,我们这个三人小组合作还是很愉快,而且有实质性成果的,很高兴能够和他们一起合作科研立项。
2017.12.26