2017华为软件精英挑战赛总结

2017华为软件精英挑战赛总结


  接触到这个比赛是在今年的3月20号左右,当时比赛以及开始两个礼拜了,不过因为之前也没有参加过类似的算法比赛。我是搞机器学习的,感觉这两类比赛还是有蛮大的区别,一个专注于算法,一个更多的需要处理数据,当然算法也同样重要。更重要的是这次比赛必须用C++和Java来写,对平常用惯了python的人来说真是……也没学过数据结构,所以总的来说整个过程非常的难。简单总结以下几点吧:

1 赛题

  有一个无向网络,网路的每条路径有一个带宽容量限制和单位带宽的花费,网路中有一些消费节点,每个消费节点有一个容量需求,现在让你在网络中布置一些服务器给消费节点提供带宽,每个服务器有固定的费用,让你设计一种服务器的布置方案使得费用尽量少并输出服务器给消费节点提供带宽的路径

2 简单的思路和分析

这道题是一道NP-hard问题,可以归为优化选址一类的问题中去。

  • 数学角度:我们三个人都是数学系的,尤其我们师兄专门搞算法的,所以他一眼就看出来这是一个混合整数规划(MIP)问题,不过鉴于平常解这类问题都直接用的Matlab,而且这次比赛不允许用开源代码,因此自己写一个LP求解器就很难(我们后来尝试了两天然后看到排名蹭蹭蹭的往下掉然后就放弃了……)。从数学角度很容易把整个问题进行建模得到一个模型,据说这种规模的问题matlab也要解很久才能得到全局最优解,而比赛的时间限制是90s,所以后来决定先用贪婪算法得到分数再说。
  • 计算机角度:由于都是数学系的,这部分的思路都是在做的过程中网上查到的,这个求解的核心,也就是cost函数是一个最小费用最大流问题,可以通过建立一个超级源点和一个超级汇点来进行连接求解。据说这个算法叫做SPFA,比赛结束后需要好好学一下数据结构了(当时啥都不会……)。还有Dijkstra算法非常适合用于求任意两点间的最短路,我们组最开始的做法就是这个。至于服务器的选择,最容易想到的就是启发式算法,我们中间尝试了各种算法,包括模拟退火,遗传算法,粒子群算法,效果都不好,后来总结发现自己的底层结构根本没搭好,别人跑1000次我们只能跑100次,哎,没学过数据结构的锅啊……

3 思路简洁版

  • 混合整数规划
  • LP + 启发式
  • 贪婪 + 贪婪
  • 贪婪 + 启发式
  • LP + 贪婪
      写了很久最终能实现的也就3和4,所以最终排名在区域50,64强也还算可以吧,毕竟第一次参赛而且数据结构啥的都不会……补一补基础来年再战!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值