作者:xreborner 来源:中山大学BBS   酷勤网收集 2007-08-18

摘要
  在这次百度之星比赛中,百度对选手的住宿、饮食和日程活动都是安排得非常好的,可见百度在这次比赛中投入了很大的人力物力,这是非常值得称赞的。然而,毕竟比赛内容才是比赛的重点。希望百度在以后的比赛中在增加题目的趣味性的同时,更多地关注题目的质量。如果百度只
本文所有内容均是以事实为基础的,我所讨论的也是我个人所认为的比赛明显存在的问题与意见。如果大家有不同的反对意见,或者觉得存在不正确的地方,欢迎提出自己的见解进行讨论。本文原本发在百度之星贴吧中,但被吧主多次删除。本文已经多次在删贴后按照吧主的要求修改重发,但最后仍被吧主无故删贴,并不被给与任何解释。因而,我决定发在各高校bbs上。

纵观百度之星三年决赛题目,去年的最好,今年的最差,成绩好坏全凭运气,很显然,出题的人没有足够的经验担此重任。

今年的题目是完善一个cs1.5的bot AI程序,并以互相对战的形式决出名次,主要采用淘汰赛的赛制。不可否认的是,从类ACM/OI的短时间编程实现的比赛类型的角度来说,这的确是一种比较新型的题目(其实去年我就建议过百度决赛可以尝试出一些对弈性的题目),也是一个不错的发展方向。然而,由于出题人严重缺乏经验,考虑不周,导致今年的题目沦为一个垃圾题目,毫无公平性和算法性可言,完全不能体现出选手的真正能
力。从趣味性和质量等角度综合来说,去年的题目出得最好的(刘汝佳出题还是不错的),跟去年相比,今年的比赛已经沦为一个娱乐性的比赛了(虽说刘汝佳也是出题人之一,但他实际上只参与了后期协助,对题目的许多细节一无所知,真正的出题人应该只有一个)。具体而言,这次比赛至少存在以下主要问题:

1、选手bot的利害与否严重依赖于选手对cs的了解,懂cs的人与不懂cs的人相比有明显优势。如果知道什么枪的性能好,知道瞄准敌人身体的什么位置最能伤害敌人,就能够使bot的杀伤力更大。而不了解cs的人甚至连什么是炸弹图都不知道,他们需要花费更长时间来了解cs的游戏过程和bot程序各处代码的意思。又如,懂cs的人会知道cs中的子弹发射是瞬时的,速度无限大,而不懂cs的人则不会知道,而这与瞄准的优化也是很有关
系的。虽然比赛前一晚百度组织了一场一小时的cs娱乐比赛,但那时选手根本不知道这与决赛题目有关,一个新手只是随便玩了一个小时的cs是不可能了解到cs的各个关键地方的。比赛时出题人也简单介绍了一下cs的游戏过程,但不懂cs的人只是听了几句简单的介绍而不经过亲身体验是不可能完全了解的。

2、题目毫无算法性可言。题目要求选手在5小时内从一个包含十来个源文件(如果把HalfLife SDK的源程序也算进去,就至少是几十个了)的bot程序中分析出其基本框架和几 个关键的地方,然后完善它以实现一个更好的bot。实际上,题目仅允许选手修改两个源程序中的全部8个接口函数的实现,其中T和CT的功能是分隔成两个同构接口集的,所以实际要实现的只是4个接口函数,分别是购枪功能、瞄准功能、手榴弹瞄准功能以及一个
求最短路的功能。bot的其他任何行为与实现选手都无法修改。由于题目给出的bot程序已提供了A*算法的函数实现,所以最短路功能只要直接使用A*算法的函数就行了,唯一要设置的就是两个很简单的费用函数g和h。另外提供最短路的实现并没有意义,因为只要程序能够求出正确的最短路,些微的效率差别对结果没有影响,也不值得为此花费时间。而够枪功能则要选手根据对cs的了解程度购买合适的枪支、子弹和其他装备就行了。bot很少使用手榴弹,实现手榴弹瞄准没有太大意义,而且这需要大量时间来分析bot使用手榴弹的机理,也不可能做到能考虑碰墙的反弹的程度。瞄准函数由于已经提供了敌人的坐标,本质上来说只要把瞄准坐标上移以攻击其头部就可以了,偏移量则需要细致调整以最大化爆头率。出题人曾提示说瞄准可能需要预估运动中敌人的下个位置,但如果瞄准函数真的如出题人所说每秒内会被调用几十次,那么预估根本没有必要,因为cs中的子弹发射是瞬时的,0.0x秒的时间偏差带来的瞄准误差其实是微不足道的。如果真的需要预估,那么预估的瞄准提前量则是另一个需要微调的参数了。因此,实际上选手不需要懂任何算法,只需要分析bot程序以了解各个行为的实现,并微调bot的各个行为(买什么枪,瞄准时上移多少偏移量等)以使bot威力最大化。

3、出题人在比赛过程中随意透露各种信息提示帮助选手,这使得原本已花费时间分析代码得知此信息的人之前的时间白白浪费了,而不知道该信息的人则从中获利,导致了不公平性。这个行为不仅仅是看上去的那样缩小强手与弱手之间的差距,即使在相同水平的选手之间,由于做题策略的不同而有不同的信息分析获取次序,透露信息的行为使得运气好的选手能够更快地达成目标。出题人在透露信息时也没有考虑到可能有些选手没有听见(譬如去了洗手间)。一般来说,一切必要信息都应该在比赛开始时提供。

4、选手大量的比赛时间都是花费在对bot程序的分析与对各种行为实现的测试验证上。出题人以为选手只需要少量的时间便可获取必要的信息并了解自己所要做的工作,但实际上,对bot程序的分析将比出题人所以为的更加耗费时间。由于题目所给的信息量过少,选手需要很多时间来了解程序的组织架构、毫无目标地浏览bot程序代码增加熟悉感、找到与所需修改代码相关的部分、仔细分析然后再使目标逐渐清晰。对于每一个行为的
实现方法(如买枪、买子弹等),选手都需要进行测试以进行验证,每次测试都需要重新编译整个bot程序再运行cs创建游戏观察结果,这会耗费很多时间(也可以先写好较完整的代码再进行统一测试,但一旦出现错误将需要更多时间来查找问题根源,因为没有调试器可用)。而能否很快找到问题的解决方法也依赖于选手的运气。而出题人由于已经长期熟读bot程序,其主观印象使其以为一个毫无准备的人可以很快地根据少量提示便
能找到目标并进行bot程序完善工作。除此之外,对购枪、瞄准的微调测试也需要很多时间,例如购枪可能需要考虑用M4还是冲锋枪?要多少bot买awp?买不买其它装备?瞄准时要不要预估?瞄准上移偏移量和预估的瞄准提前量分别是多少?每次测试都需要重新运行cs观察、比较bot的行为结果。在5个小时内选手一般不会有多少额外时间来进行真正的策略设计工作。

5、比赛中途休息半个小时进行午餐,并且午餐时允许选手之间互相交流讨论……人源如何也是比赛的考察要素之一么???既然规则不允许选手上网,也不允许选手与别人通讯、作弊,那么就应该禁止选手之间的互相讨论。有人解释说这是考虑到选手的体力问题,但如果不是出题人错估了这种题目所需的时间,又怎么会使比赛延长那么久以至于需要中途休息进行午餐呢?

6、以淘汰赛为主的评测形式也使得比赛结果更多的依赖于运气。各个ai之间互有相克,一个好的程序可能因为碰巧遇到克星而垫底。由于是人工评测,两个bot之间的对战局数较少,也使得结果很不稳定。这不是每盘对战都需要耗费大量时间的体育观赏类比赛,完全可以进行更多的对战次数来更好地评价bot的性能。不过这并不是这次比赛的主要问题,可以先放一边。

这样一个问题重重的题目导致了比赛完全是碰运气的,运气好的人可以较快地把bot的各种行为调整到最佳组合,写出一个相对比较厉害的bot,但他们也未必知道自己的bot为什么比别人厉害。运气不好的人则可能走错方向(例如如果不知道cs的子弹是瞬时发射的,就可能以为预估提前量需要考虑敌人的距离),浪费时间。不少高手都因而失利,如前两届的冠军楼天成,还有唐文斌等(不过不包括我,我犯了一个非常低级的错误导致第二轮的时候程序就crash了,这是我长期没有进行练习的自然结果,不能全归咎于比赛题目)。也许有人认为选手的实力如果真的足够强,那么还是能够取得好成绩的,因而不能说比赛成绩好坏全凭运气。但是,比赛并不是为理论上足够强的人而设的,而是为参赛选手而设的。比赛题目应该让满足比赛考察所要求的能力(如算法能力)的选手能够相比其它选手获得更好的成绩,从而呈现一定的区分度。但很遗憾,这次比赛题目并不具有任何明显的考察点,对于参赛选手来说,成绩好坏实际上全凭运气。

顺便也说一下复赛中所谓的工程性题目。实际上,工程能力根本不可能通过短短数小时的编程实现类比赛中考察出来。在这样的比赛中选手写出的程序只可能是他们在尽可能短的时间内完成的能够正确地通过测试数据的程序,根本不可能遵循什么工程规范、编码标准,也不可能考虑工程所要求的容错性、灵活性、扩展性、可读性和可维护性等等。而工程能力也不要求程序员必须非常快地完成正确的程序,真正有工程能力的人实际
上并不会擅于做复赛中所谓的工程性题目。所以说,复赛所谓的工程性题目只不过是一个笑话而已。

有人认为百度之星不需要办成类似ACM/OI的比赛,ACM竞赛选手也不一定就是顶尖人才,这固然是正确的。然而,竞赛的基本要求就是要公平,但很显然,这次竞赛是非常缺乏公平性的。其次,竞赛的考察点应该与事先所说明的相符(见竞赛概述),而不是随便出了一道题目然后就说别人做不好是因为该题目有别的考察点。很明显,这次决赛题目毫无公平性与算法性,而且,它其实也并不那么符合工程性。在颁奖晚会中,某位百度
人员(某个女工程师还是技术总监?忘了)觉得该题目具有很好的公平性与算法性,也说明百度是想以算法性作为主要考察点的。但从实际效果上来说,该决赛题目并不具有任何明显的考察点,选手的能力难以发挥出来,运气不好的选手即使再厉害也难以获得名次。也有人说题目不是关键,但如果这样,比赛本身的存在意义就失去了。

在这次百度之星比赛中,百度对选手的住宿、饮食和日程活动都是安排得非常好的,可见百度在这次比赛中投入了很大的人力物力,这是非常值得称赞的。然而,毕竟比赛内容才是比赛的重点。希望百度在以后的比赛中在增加题目的趣味性的同时,更多地关注题目的质量。如果百度只考虑增加比赛题目的趣味性,取悦大众,宣扬自己的特色,而不考虑到比赛的质量,那么,百度将始终难以得到顶尖人才的青睐。


下附Sumhat的blog中的一篇比较温和的关于决赛的评论,以供大家参考:


到达宾馆的当天晚上就有试机时间,坐定之后我赫然发现桌面上有CS1.6和CS1.5的图标=.=,然后就在我开始找有哪些IDE和可用资源的时候,主持人说:接下来我们开始分组打CS吧。巨寒……然后我们就按分组打CS了,我所在的1组由于实力非常牛,轻轻松松割掉了对面的2组。玩的时候有几个其它的客人在WTommy后面讨论:“你说他们这是在干什么那”,“游戏比赛嘛”,“不对,门口的牌子上面写的是‘程序设计比赛’”,“哦,他们在编程打CS”…… 由下文看来,这段话印证了一条古语:旁观者清,当事者迷。


第二天早上,比赛正式开始,题目上写着:实现一个CS1.5的Bot。于是大家都明白了,第一天的比赛是有原因的……然后下载了一个压缩包,包括 MinGW的编译器、一个make程序、Half Life和Podbot的SDK,压缩包有27M,其中可以修改Podbot中的两个文件,每个文件包含5个函数,用于T和CT的买枪、枪械瞄准、手雷瞄准和一个基于A*的寻路算法(只允许改其中的g、h函数)。玩过CS的人都知道,这5个函数并不能实现CS的常规策略。对T而言,最简单的策略是全部冲向一个雷区,由于CT要分守两边,以多打少的胜率会相当大,实现这个策略需要对那个寻路算法和CS的路点机制非常了解,在比赛时间内做到这一点基本不可能;对CT而言,面对T的冲击,需要队员之间的通讯才能更好地防守,而CS的通讯机制我基本没看懂=.=

比赛中没有提供任何的API文档和说明,程序框架只能自己看代码,核心代码至少有几千行,我研究了2小时左右发现看懂框架不是5小时能完成的任务,于是放弃,只找有用的API。而且测试起来非常麻烦,一个完整的测试过程是:先把源代码make成dll,然后覆盖掉原来的文件,启动CS,开一个新游戏,加bot,观察bot行为,结束之后完全关闭CS。基本上主要的时间不是用在写代码上,而是在看bot打架和开关CS上。

原始压缩包中的代码是可以通过编译并且正常运行的,只不过运行出来的bot比较傻,但是只要在代码上修改一个参数,就可以使bot在三枪之内杀死一个人(某些威力极小的枪除外),由于CS的对战原理,这样的bot在1v1的情况下,谁先开枪谁赢,而且根据CS对bot的控制,“谁先开枪”是随机的。另外,评测的三个地图中有两个是埋雷地图,由于CT近乎弱智的拆雷AI,导致了CT唯一的赢面是在T没埋雷之前把带雷包的T干掉,然后守
雷包,而CT能不能和带雷包的T相遇,基本上也是随机的。综上,评测的结果带有很大的随机性,多运行几次测试结果就很有可能改变,换句话说,决赛是拼RP的比赛。

比赛过程中最不爽的一点是主持人在不停地讲解比赛规则和透露代码细节,使我不得不边写代码边竖起耳朵听,还不能去洗手间,生怕漏掉点什么。比赛规则显然是可以在赛前就公开的,没必要放在比赛过程中说,貌似比赛组织者认为比赛毫无秘密可言,各种细节可以被选手猜出来,从初赛开始,很多问题都无法在赛前获得定论,比如STL的使用问题。而在比赛过程中透露代码细节,更是莫名其妙,比赛一开始主持人就说:这次比
赛,阅读代码的能力也是考察范围之一。但是之后又不断的透露关键代码内容,看上去潜台词就是“一定要按我的思路走”。

颁奖典礼被放在了第三天的晚上,冠军是来自SJTU的某同学,据说是复赛第50名=.=。颁奖典礼除了颁奖就没其它的了,连个决赛的录像都没,难道选择CS做为比赛平台不是为了演示?只是在典礼结束的时候应广大选手的要求重新模拟了几场比赛,而比赛的结果也证实了其不可预料性。比赛之外的活动还是相当不错的,滑雪、高尔夫、游泳,虽然我一个都不会=.=。滑雪的教练不错,很详细地讲解了各种细节,基本上滑雪过程中没出
什么大问题。高尔夫就比较挫了,电视里看别人打高尔夫是非常休闲的运动,我们一上去就变成了体力活,要么打空,要么打到地上,相当地=.=。游泳就不提了,说是说XX海洋世界,本以为会像热带风暴那样,结果就是一个水池,玩的东西都没有=.=。

第三天的时候还去参观了百度公司,见到了老Boss李彦宏。我不常用百度的产品,也就没提出什么有新意的问题,不过百度在中国的人气是不言而喻的, Google在中国的市场一时半会还无法和百度抗衡,曾经听说有人上百度之前先要上Google搜百度的网址,然后再去用百度搜索。不过百度的外文搜索能力比较差,就我个人而言,经常要搜索一些英文资料,百度显然是不能胜任的,而且大多数专业都是英文文献比较多,所以百度要想占领高端市场的话,还是要加强外语的搜索能力。

总体而言,决赛的组织和安排工作做得很周全,看得出一些细节方面是经过研究的,只不过经常拖时间,有点印度的感觉=.=。明年争取继续进决赛,争取拿熊^_^

分类: IT竞赛比赛 培训考证



关于酷勤 | 联系方式 | 免责声明 | 友情链接