2021华为软件精英挑战赛(粤港澳赛区复赛第八)

一、序言

        总结一下四月份参加的华为软挑赛,距离现在已经结束了四个多月,终于有时间抽空写写总结了(小作文),我们是粤港澳赛区的620&619-F3队,第一次参加这次比赛,本想尝试一下,但没想到也挤进了复赛,而且还拿到粤港澳赛区复赛第八的成绩。BTW,我们实验室就有三队进复赛了,另外两队分别是少吃零食多睡觉队和对队,两队都是大佬级人物orz,对队还进了总决赛(膜.

2021华为软件精英挑战赛(粤港澳赛区复赛第八)
        具体算法用C++语言编写,用到的数据结构如下:
2021华为软件精英挑战赛(粤港澳赛区复赛第八)

②部署策略

        我们的部署策略为每次部署虚拟机在服务器时,遍历所有服务器,计算loss,loss的定义为若分配此虚拟机后服务器的剩余CPU*0.75+内存*0.25;然后找出当中最小loss的服务器,然后部署虚拟机在服务器上。核心思想也是尽可能让服务器的剩余资源小。

③迁移策略

        与初赛version1一样,暂不考虑迁移策略。

        这里补充一点:也就是我们上面提到的滑动窗口,因为复赛要求从初赛的给出全部T天的数据变更为只给出前K天的数据,当你的程序完整输出了第一天的决策信息后,你将会读取到第 K+1 天的请求序列数据。然后你需要输出第二天的决策信息,并且读取第 K+2 天的请求序列,以此类推。因此,我们考虑到使用滑动窗口,也就是在一开始统计前K天的虚拟机所需的全部CPU和内存(当中如果有虚拟机释放的话,则对应的CPU和内存也要减去),然后给出第K+1、K+2…天后,依次计算对应的滑动窗口大小。

Vesion2–Final-version

①购买策略不变

②部署策略

        在计算原来的loss基础上,添加了一个负载均衡的判断,若部署该虚拟机到服务器时,A/B结点的剩余资源出现一个特别大或者一个特别小的情况时,loss+=1e5,也就是loss会特别大,即算法会尽量不满足这种极端情况的出现。

③迁移策略

         我们发现迁移策略的思想可以从部署策略中借鉴,也就是同样都是计算loss,遍历所有服务器,loss的定义为若分配此虚拟机后服务器的剩余CPU*0.75+内存*0.25;然后找出当中最小loss的服务器;然后迁移虚拟机到最小loss的服务器上。核心思想也是与部署策略一样,尽可能让服务器的剩余资源小。这里有个细节就是,我们添加了一个参数:使用率rate,由于比赛有限制运行时间,所以我们规定,使用率这里再补充一个trick:我们原本的运行时间是达到了150秒左右,但是使用了C++的引用特性后(也就是在函数形参前加&引用),即从值传递变为引用传递,大大减少了函数的拷贝成本,运行时间直降100秒,于是我们才能把腾出之后的时间全部用于迁移策略,所以使用率rate才能设置到0.93这么高。

复赛当天

主办方在复赛当天变更了需求,如下:

2021华为软件精英挑战赛(粤港澳赛区复赛第八)

Github开源地址:https://github.com/VirgilG72/CodeCraft-2021

来源:VirgilG72

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月26日
下一篇 2021年7月26日

相关推荐