Skip to content

WangHongshuo/2018HuaWeiCodeCraft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

2018华为软件精英挑战赛

分支介绍:

  • whs-base: 基本输入和输出
  • whs-ES-chicken: 一阶指数平滑+组合贪心分配
  • whs-2DES-chicken: 二阶指数平滑+组合贪心分配
  • whs-3DES-chicken: 三阶指数平滑+组合贪心分配
  • whs-321DES-chicken: 多种预测方法加权平均+组合贪心分配
  • whs-L-GRU-chicken: GRU神经网络预测方法+组合贪心分配
  • whs-fixedChicken: 初赛修正后的分配模型
  • whs-newChicken: 新分配模型
  • whs-Linear-combChicken: 一维线性卷积模型+组合贪心分配

在开发过程中分支比较乱,不详细介绍了,建议用Git GUI软件去看分支和过往版本。

主要思想:

  • 预测:

预测是玄学,初赛一开始用最简单的平均数就能达到不错的成绩。感觉比较重要的是对输入数据的处理,因为输入数据离散性较大,所以采取了两种方式使原始数据相对平滑一些:

  1. 按照某个大小进行打包,比如1-7天累加起来作为第一个数据,2-8天累加起来作为第二个数据。
  2. 直接累加,第一个数据是第一天的数据,第二个数据是前两天的和,第三个数据是前三天的和。

也可以用一阶指数平滑进行二次平滑一些。

初赛是用一二三阶指数平滑和一个一维线性卷积模型四种预测方法进行预测的,根据单个方法的表现情况对四种预测方法的权值进行调整。

复赛由于预测不和训练相邻,导致指数平滑预测全部失效,只剩下一个一维线性卷积预测模型,需要调整的参数有三个,但是由于找不到这三个参数和不同用例参数之间的关系,使得这种预测方法不具有普适性。

GRU效果最差,因为对神经网络了解不深,只是单纯的把matlab版本的GRU翻译成C++,具体的训练包括输出输出的初始化还是不能很好的把握,最终复赛在GRU上浪费了三次提交机会。神经网络应该是预测效果最好的,训练好了具有很好的算法普适性,传统的预测模型需要寻找参数之间的关系,但是我们没有找到很合适的关系。

  • 分配:

分配应该是不难的,在分配方面没有那么多不同的方法,其中的分配的思想都是以贪心为核心的,分配的具体变动如下:

  1. 最初的分配方法是先根据优化目标的不同,对flavor进行一个排序,先放大的,大的放不下去再放小的,直到最小的也放不下了开新服务器。
  2. 优化后的分配方法是把所有的flavor种类一个一个先试着放进去服务器,计算cpu和mem的占用率差值,找到最小的那个差值对应的flavor,然后放进去该flavor。

在复赛中增加了三种不同规格的物理服务器,移除了优化目标,要cpu和mem同时利用率最高,所以分配的思想是没有变的,只是策略方面发生了变化:

  1. fixedChicken的策略是同时开启三种物理服务器,把所有flavor种类一个一个先试着放入三种物理服务器,找最小的cpu和mem占用率差值所对应的flavor种类和物理服务器种类,然后放进去。
  2. newChicken的策略是每次只单独开一种服务器,按优化后的分配方法进行放,计算三种不同物理服务器哪种资源利用率最大,就保留哪种分配方法。

其实在正常情况下分配是很难到100%的利用率的,也可以用反向调整的方法,对预测数据进行微调,使分配部分分数尽可能高,但是这样也会影响预测的精度,需要把握。

About

HuaWei CodeCraft 2018

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •