Code Craft告一段落,前前后后忙活了一个多月,最终以武长赛区27名告终。其实,事先没有想到自己可以进入复赛,因为初赛的成绩并不理想,从来没有上过80分,也不知道是不是老天爷眷顾,初赛提交成绩居然破天荒的好,所以顺利进入复赛。非常非常感谢队友浩浩,不嫌弃不放弃,带着小白我打比赛。帮我解决各种疑难杂症。这次的题目大概分为两个部分,一部分为虚拟机的预测,另一部分是虚拟机的放置,初赛以预测为主,因为放置只用了一种物理机。不过复赛就明显侧重于放置了,从原来的一种虚拟机上升为三种,这也是导致我们没有进入决赛的原因,因为我们的放置效果并不好。
对于初赛,我们写了数十种预测方法,多项式回归(效果差到让我不想再看到它)、指数平滑、arima、移动时间轴,最后我们提交的方法是arima,这个预测方法主要和三个参数有关,p、q、d,其中d的作用是用于平滑整个时间序列。放置选择的是bestfit、动态规划以及模拟退火中选择最高分进行放置,最后我们进行了一个小处理,就是放置效果低于15%,我们就抛弃虚拟机,就是以降低预测效果来提高放置效果,这主要是根据他的得分公式来的。
复赛一开始,我们就提交了初赛的代码,很不幸,只有50多分。我和浩浩很是郁闷,为什么之前的模型都不能用了呢,初赛随便提交也能上70多,然而复赛直接下降20分。于是叫上晗哥,着手lstm的编写,打算来一波新的算法。我们的LSTM采用的是SGD,每训练一个样本就要进行一次参数更新,这是导致我们最终时间不够的主要原因,但是由于无知,我们对于时长的消耗也是一头雾水。对于放置,由于它选用了三种虚拟机,所以我们选择的方式是启发式算法,自然而然我们就想到了GA,但是同样是GA,别人的可以拿到97,而我们可能最多也就80分,因为我们采用的解都是随机的,并不是经过筛选的,听到另一队的同学说,他的放置算法是遗传加贪心的结合。而且,我们的队的算法经常是超时,这点其实是非常不应该的,我们应该设置一个时间,限定时长,然后break出,这样才是最安全的。
本次比赛,收获颇满。大致有以下几点:1.对于写代码,不再感觉那么害怕,写了多了,就会形成惯性思维。以后也要多写代码,只有将算法用代码写出来,才能说自己真正理解它了 2.对于算法,要真正了解,不能光靠百度几个概念,需要看论文,特别是这些经典的算法,肯定会有很多人给他们进行优化的,应用于不同的方面。3.一个团队,大家要相互理解,相互包容。每个人都是这个团队不可缺少的一部分,所有人的目标都是一样的,只有大家心情都好了,我们的分数才会更高。总之,和别人的差距还是很大,所以需要不断的努力,算法+代码=应用 以前不曾理解算法的重要性,现在终于感受到它的妙以及功能强大。当然,在学习算法的同时,也要学会创新,在原来的基础上,对其进行扩展。