2022华为软件精英挑战赛比赛经历

提示:本文为本博主与@QianjunYunyu共同创作


前言

本文主要是介绍本人与队友在参加2022年的华为软件精英软件挑战赛(后续内容简称软挑)的比赛过程与思路,前后共历时累计一个半月的时间,拿到了初赛阶段粤港澳赛区第8名,复赛阶段粤港澳赛区第4名,全球总决赛阶段第27名的成绩,并获得了华为公司所有软件相关岗位的主管面直通资格。正文先是介绍软挑的基本比赛形式,以及2022软挑的基本比赛内容,然后再分别对初赛、复赛以及决赛的比赛内容与代码方案进行介绍,最后总结整个比赛的经验与教训。由于初赛、复赛、决赛的赛题是层层递进的,所以我们会比较详细的介绍初赛的赛题与思路,然后复赛阶段和决赛阶段的赛题与思路仅仅针对变更点进行详细阐述。
代码点击参见github链接:https://github.com/Little9CUI/2022CodeCraft/tree/master


一、软挑的基本形式与内容

  • 赛制:软挑的整个比赛形式分为初赛、复赛、决赛三个阶段;每个阶段先是进行10天左右的训练赛,选手可以线上提交代码,然后根据官方的判题器进行评分并排名(训练赛阶段的排名仅仅作为参考,可以方便选手知道自己代码方案的优劣从而合理选择代码迭代方向);正式赛阶段时间较短(初赛阶段的正式赛为3天,复赛与决赛均为3小时),相较于训练赛,会进行小的题目变更,选手需要在短时间内调整代码方案并进行有效的版本迭代。
  • 奖励:2022年的软挑共分了8大赛区,共3291支队伍。初赛阶段,每个赛区的前32名可以获得进入复赛的机会,并拿到华为的机试绿卡(免除机试),前64名可以获得参赛证书;复赛阶段,每个赛区的前4名(因为意外情况,今年临时增加了复活赛,每个赛区额外增加了2个决赛名额)可以进入决赛,并可获得华为的面试绿卡(免除华为两轮技术面试)与一部华为手机;决赛阶段,前8名可以获得奖金。
  • 赛题:此次赛题以华为云视频直播服务流量调度问题为基础,并进行一定的抽象调整和简化,关注如何实现云上资源的最优规划和调度问题。赛题的核心类似于边缘计算的任务卸载问题,需要尽量降低任务计算成本。赛题要素主要包含:N个边缘计算节点,以及M个用户节点;时间离散化为T个时刻;每个时刻中,不同用户有多个不同的任务需求;成本计算主要围绕“95分位”这一概念进行梯度计算,因为计算规则比较复杂,所以后续再对这一点具体展开介绍。

二、初赛阶段的赛题与方案介绍

1. 赛题介绍

(1) 题目介绍

假设共有M个客户节点与N个边缘节点,现按照时间线进行流量调度。每个时刻,客户都会有不同大小的流量需求。现需要给出一种流量调度策略,在每个时刻给出一种流量分配方案,在满足给定限制条件下,总的边缘节点代价最小。在任意一个时刻,每个客户节点的需求可以分配到任意多个边缘节点上。同时,每个边缘节点也可以满足多个客户节点的需求。
下图为题目示意图。
Alt

(2) 约束条件

a. 客户节点方面的限制:每个客户节点在每个时刻都有固定的流量需求,给出的分配方案必须刚好满足该客户在对应时刻的流量需求。
b. 边缘节点方面的限制:每个边缘节点都有自己的带宽上限,要求分配方案中,每个时刻,分配到该边缘节点的总流量不能超过其流量上限。
c. 客户节点与边缘节点之间的限制:每个客户节点与每个边缘节点之间都有固定的时延。在制定流量调度分配的策略时,为某个客户节点选择某个边缘节点分配流量时,他们之间的时延不能超过给定的时延上限。

(3) 优化目标

a. 定义95百分位带宽:对一个边缘节点所提供的的带宽的值序列进行升序排序,以其95%位置(向上取整)的带宽值作为该节点的95百分位带宽。
示例:假设一个节点的带宽序列长度为8928。首先对这8928个带宽值升序排列。其95%位置是8481.6,向上取整为8482。则以排序序列中第8482个点的带宽值,作为这个节点的95百分位带宽 ( Ps:这里的带宽序列中的每一个值都是对应时刻边缘节点的总带宽请求)
b. 优化目标为:使所有边缘节点的95百分位带宽之和最小。

2. 方案介绍

该方案获得了粤港澳赛区第8的成绩,并进入复赛。初赛的整体方案为,先充分利用零成本时刻进行分配尽量多的数据流 ,然后第二阶段对于剩余的未分配的数据流,按照从大到小的顺序,尽可能的使得所有边缘节点中分配的数据流总量相近。第三阶段,对初始方案进行优化调整,通过降低95分位对应的数值,以及置换零成本时刻,获得较大的的优化效果。

(1) 思路分析

  1. 对赛题的理解:我们需要在每个时刻给出一个流量分配的方案,满足所有的限制条件,并且尽可能的使边缘节点的开销最小。
  2. baseline思路:只需要给出一个解即可,在满足限制条件的情况下,给出每个客户节点的流量去向。能想到的解法有:制定一个固定的分配策略、最大网络流算法分配策略、粒子群优化算法。
  3. 后续优化思路:优化思路主要是想着要朝着如何利用95计费这一点来考虑,具体的方案演进会在后续的方案验证与分析那里考虑。

(2) 初步方案设计

1. 排水法

此版本为我们的baseline思路,目的是求出一个解。
该策略在不考虑降低成本的情况下,为每一时刻的所有客户节点分配流量。分配策略为:按照连接的边缘节点顺序开始分配,如果一个边缘节点分配满了就换下一个边缘节点。
如果所有连接的边缘节点都达到了流量上限,启动“排水”算法,把流量看成水流,服务器看做是水桶,将满了的边缘节点里的水(流量),经过该流量所属的客户节点排到该客户节点所连接的其他桶(边缘节点)里。
这种策略可以保证能求得一个解,但是不保证优化效果。

2. 网络流

此问题可以建模为一个经典的网络流问题,

  1. 假设有一个无限流量的源节点和一个目标节点,中间为客户节点和边缘节点。将源节点和所有客户节点之间建边,目标节点与所有边缘节点建边,每个客户节点与时延小于时延限制的边缘节点之间建边。
  2. 源节点与客户节点之间的边容量为当前时刻的客户节点的流量需求,客户节点与目标节点之间的边容量无上限,目标节点与边缘节点之间的边上限为对应边缘节点的带宽上限。
  3. 使用最大网络流算法,同时记录每条边分配的流量,这样客户节点与边缘节点之间的边上分配的流量进行输出,就是所得的分配方案。

最大网络流算法参考学习笔记:

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值