2018年华为软件精英挑战赛总结与经验交流

    今年研一,我和两位师兄组队报了名,最后以240.288分,44名次收场,获得江山赛区入围奖,距离进入复赛差0.899分,可以说是非常遗憾了,主要的原因出在一共只有10次机会,而我们用了6次机会来调BUG,导致调参次数太少,分数提高有限,遗憾退场。写下此片博文,算是对这一个月来努力的总结。

2018年华为软件精英挑战赛总结与经验交流_第1张图片

总体思路:

    赛题大概分为两部分,一是时间序列预测问题,二是背包装箱问题。

    预测部分我们尝试了均值法,一、二、三次指数平滑,LSTM,自适应过滤法。结果却发现最花费我们时间的机器学习LSTM分数最低,开始只有50分,调参后也只有70多分,而XJB预测比如取均值,取末尾7天的和,什么结果乘以1.2等等骚操作分数却能轻易到80分,百思不得其解!最后在练习赛中的最好预测方法是自适应过滤法,调参后能上到86分(系统BUG未修复前的分数),有关自适应过滤法我另外写一篇博文详细介绍以及代码实现: 2018华为软挑预测算法--自适应过滤法【C++实现】。

    装箱部分一开始是比较常见的FFD贪心算法装箱,参考的这篇博文:贪心算法之装箱问题。在预测部分遇到瓶颈之后我们就全力优化装箱部分,明显贪心算法是一个局部最优解,而装箱问题又是一个NP完全的问题,所以就需要用到启发式算法来辅助求解近似全局最优解,我们选择了模拟退火+FF的方法来解决装箱问题,参考了:求解装箱问题的一种模拟退火算法_李素萍,模拟退火算法在装箱问题中的应用_贾向权等文献,写出来效果还不错,比之前的FFD装箱分数提高了2分,有关模拟退火我另外写一篇博文详细介绍以及代码实现:2018华为软挑--模拟退火+FF解决装箱问题【C++代码】。

骚操作:

    上面说的是正常操作,接下来说点骚操作,实际我们最后提交的代码的预测部分是一次指数平滑、自适应过滤、均值三种方法分别乘上权值的和,通过三种方法的叠加有效的减轻了一种方法适应性差的问题。

    而在装箱部分,发现通过预测出来的虚拟机个数来装箱几乎不可能出现物理服务器全部装满的情况,也就是说无论怎么做,装箱部分都不可能满分,所以我们又增加了一个环节,在装箱后遍历每一个物理服务器,如果没装满则凭空添加虚拟机,直到再也装不下为止,这样做会反过来影响预测数量,虽然使预测精度变差了(其实本来就很差),但是装箱部分的分数可以拿满分,提交后分数再次提高1分左右。



你可能感兴趣的:(竞赛)