2018华为软件精英挑战赛总结及代码

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

2019复赛结束,成渝季军,深圳决赛见

//////////////////////////////////////////////////////////////////   我是分割线君   ////////////////////////////////////////////////////////////////////////////////////////

先贴上我们的名次,我们是成渝赛区的【OB观光团】队,在下是队长【无力吐槽的典哥】。初赛23名,复赛14名,就此止步。

////////////////////////       参赛原因篇      ////////////////////////////////

其实已经是二战华为软挑,之前实验室师兄作为那一年唯一进入复赛的队伍,最后秋招进了华为,分享下来,说这个比赛对于最后的offer起了决定作用,所以就在去年组队参加了第一次,无向图网络费用流的图论问题,由于缺乏经验,且队伍里对于编程算法都比较菜鸟,最后折戟。比赛后半个月去面了一次京东的实习生招聘,很多基本的简单问题都不清楚,给了自己很大触动,于是开启了一年的C++/算法学习之路,基本上按照了这个网易的大神的学习流程来,有兴趣的也可以参考。链接:https://blog.csdn.net/luckyxiaoqiang/article/details/13000431

(主要还是说这次的比赛,学习路线方面有兴趣私聊)

///////////////////////////        组队篇       ///////////////////////////////////////////

正式比赛在3月9日开始,官网发布初赛题目,因为想着早些做准备,所以过年只在家里待了五天就回来了(42小时火车)。首先是组队的问题,因为知道比赛后期对于编程能力的要求会比较高,对手也都是实力强劲,所以广泛发动身边人脉,寻找同学来组队,也有在学校的bbs发帖,最后还是这个帖子起了决定性的作用,拉到了两个强力队友老王和老李,也认识了后期一起交流的很多同学。

/////////////////////////          初赛篇    //////////////////////

今年的赛题和前几年相比是相对比较容易入手的,比较容易理解题意,简单来讲就是:根据多用户请求云端弹性服务器资源个数的时间序列历史数据,来对未来一段时间的用户请求情况进行预测,最后通过装箱(背包)对预测资源进行分配。详细赛题移步:http://codecraft.devcloud.huaweicloud.com/home/detail

拿到赛题后,官方的指导文件给了一个简单的基于多元线性回归预测的方法,不过考虑到在程序上稳扎稳打,逐步提高的战术前提,先不处理预测,每一种资源个数都赋值为一个,这样输出也相对容易,俗称的“直连大法”。搞定了这个,只拿到了0.155分,,,第二天在这个基础上不断增加个数,同时采用贪心法,按顺序分配装箱。分数涨到了好几十,不过考虑到只是权宜之计,为了调通输出逻辑而已,所以还是要考虑算法模型来进行预测工作。指数平滑和线性回归是两种不错的方法,我们组选择了基于最小二乘的线性回归(主要还是开始编指数平滑的时候有个地方看错了,才导致了没分),这样调了一天时间,从4分暴涨到82.117.。遇到了第一次的分数瓶颈,交流下来了解到对线性回归加正则化可以提高,于是查了L2正则化相关的资料,推了一波公式,搞定了这一块,又涨到了84分。

队友中期对分配算法上进行了一波优化,并且用java重新写了一版程序,分数直接到了90左右,不过其他区也是竞争非常凶残,在东北的【沈阳老雪花】刷出95分之后,官方终于修改了判分(亦或是其他神马的),使得所有人的分数普降7、8分,不过这个时候大多数人的方法都已经差不多确定,所以一直到初赛正式赛之前一段时间都没有再弄。初赛正式赛一共一天半,每天5次提交机会,而且是封榜,提交后只能看到分数,看不到排名,由于是限制提交次数,所以排名啥的还是挺重要的,这个时候有人建了一个qq群,群主提议把各自的提交分数发给他,统计后来形成一个私下的榜单,后来复赛时候才知道群主就是我同屋的同学,这里表示有劳啦,∠(°ゝ°)

第一次的分数有244左右,加了一次随机数大法涨了1分,后来想着能不能提交之后再涨点儿,结果越来越低,,最后还是用了第一版的程序,忐忑中度过了最后的截止时间,本来是晚上就应该发布榜单,结果官方说因为程序查重的问题,导致放榜时间延后。所幸最后还算不错,进入了复赛。

/////////////////////         复赛篇         ///////////////////////////////

不出所料,复赛题目对于用来分配资源的“背包”进行了条件划分,设置了三种不同CPU和MEM值的服务器,这一块主要是对预测后的装箱影响较大,预测上,还是各种调,后面也终于领悟到了来针对每一种资源进行单独的参数调整,预测方法上,线性,指数平滑,也都来进行测试,去噪不去躁也都进行尝试,勉强上到了80分之后,也差不多到了去参加现场复赛的时间。

复赛是去成都华为研究所那边进行,提前一天坐高铁过去,下车后直接拉到了五星级酒店,也就是正式的复赛场地,上图:

不得不说,就冲着环境,实在是要给好评,住的房间都是1000块左右的标准间,吃个早餐都要128,-_-||   

到酒店的当天晚上就要封榜了,所以还是抓紧时间又调了一下,晚上10点放出了正式用例的跑分,结果只有219.。。第一的队有250+ 。。。第二天只有五次调试提交机会,,,所以就凉凉了。。。。最后最高也就只有224.。。。。。也就没能进入最后的决赛去深圳啦。。。。

////////////////////     总结篇       /////////////////////////////

个人认为没能进入最终的决赛,硬实力是一方面,比赛过程中策略上也有不少失误的地方,包括初赛时候的数组下标偏移问题,复赛前期对于分配这一块考虑过多导致在预测上没有下足够的功夫提高,最后临场太依赖交流,老想着参考下高分的人怎么弄的导致了自己的核心方法太大的瓶颈。。。

可以说对于软件程序这一块,华为软挑赛可以说是带我入行的,在第一次的失败后通过系统的学习提高实力最后杀入复赛拿到秋招绿卡对自己也是非常大的鼓励,对于有兴趣加入华为做软件方面工作的同学是非常有好处的。认识到的一些这次进入决赛的同学,不少都是已经研三了的,研究生阶段参加三次,最后终于杀入决赛,自己也是有兴趣明年再来啊,嘿嘿。。。

初赛和复赛的代码都在此,有细节啥的想交流的随时欢迎,博文中对比赛细节方面也许没有说的那么细,只是我感觉这次的题目真的更考验的是模型好用性和最后限制提交次数下的应变能力,很多像神经网络,arima之类的在实测中效果并不是很好(最后复赛均值法也能有不少分,运气也实在是占了一部分,都知道是开奖嘛,-_-||)

https://download.csdn.net/download/u012677715/10388871
https://download.csdn.net/download/u012677715/10389523

///////////////////      感谢篇     ///////////////////////////

首先还是感谢两位队友一路一起坚持下来,不断的交流模型算法,不断的调试参数,编程能力也都是非常给力,希望以后能够有希望再次合作。

比赛过程中和其他赛区的同学也都有很多交流,包括西北的牌哥,金银,~,上合的HYSON,武长的阿耀,成电的胜,sun,重邮的同屋的刘恒兄,等等等等太多了。。。都是非常厉害的选手,向你们学习。

也许我会再来一次的呦。。。。。

点这里可以跳转到人工智能网站

发表评论