来自Robocode中华联盟前辈iiley的回忆录

来源:互联网 发布:澳大利亚海关数据查询 编辑:程序博客网 时间:2024/04/28 06:17

本文转自iiley个人博客http://www.rgenerat.org/iileyblog/?p=68,请转载时征得他本人同意哦。

最近有一些国内的玩家给我发邮件询问和讨论一些robocode的信息,勾起了我当年的回忆,因此在给Aspirin的回信中一发不可收拾,写下了整个回忆录,发到这里,希望对喜欢robocode的朋友有所帮助,或者权当作一篇玩家故事小品文,一笑了之。

此信如下(稍有修改):

Aspirin,

    如果我们早认识几年,我们可能会在一起并肩作战。:)

 

    我已经差不多2年没有再玩过robocode了,最后一次,也就是差不多我离开PASoft的时候。

 

    从我的robocode生涯的开始说起吧,大概在我大二快过完的时候,也就是大概2002年的样子,我和班上几个同学遇上了robocode,刚开始大家都很感兴趣,都在玩,也就是拿例子机器人改几个参数然后编译运行一下,这东西真正入门其实并不容易,那些离散的概念对于新手来说,不容易理解并掌握(比如firesetFire的区别),最后坚持下来的,只有我和同班的Xiemin两人(这也是为什么我和他的机器人用cx包名的原因,c即是Chen Jing,我的真名,x即是Xiemin),我在robocode上花的时间最长,有时候是整个一个多月每天8个小时甚至有时候10多个小时的编写和调试程序,有时候晚上很晚上床睡了,睡着突然想到了改进方法,于是下床编写,编写好了肯定忍不住调试,肯定就要弄到天亮才会继续爬上床了:)。终于在大概半年多以后,我们学习到了很多技巧(当然很多是通过国外优秀机器人的源代码分析学习的),在第一次IBM全世界大赛的时候,我们的技术还很初级,没有任何高超的运动/瞄准算法,但是我们合作的机器人Chick还是获得了1v111名,没能晋级8强,很是遗憾。就在那次比赛之后不久,我们一次无意中的对国外一个小机器人的分析,学习到了模式匹配(Pattern Matching,见http://robowiki.net/cgi-bin/robowiki?PatternMatching)算法,这种方法对于robocode的瞄准及其有用,其实在这之前Xiemin就研究出了模式匹配算法,它能几乎百发百中的射击Circle机器人,让我很是羡慕。他做的是全匹配方法,因此只对简单模式的机器人有用,比如直线,绕圈,固定S型运动模式的机器人,对于稍有变化的机器人(大多数机器都会有变化),效果不好。我认识到了模式匹配的威力,慢慢研究,Xiemin那时候有段时间没有玩了,我在继续,在一天晚上一个人在学校外的出租屋里抽烟的时候,我从嘴里吐出的烟圈突然想到一个算法,兴奋得我几乎没睡着觉,这个算法采用Wave(波,即眼圈,见http://robowiki.net/cgi-bin/robowiki?Wave)进行模式匹配并得到瞄准角度的算法,由此诞生了Cigarethttp://robowiki.net/cgi-bin/robowiki?Cigaret),我把这个算法精简,用很少的代码把它写成了一个mini-bothttp://robowiki.net/cgi-bin/robowiki?MiniBots),Cigaret一出来就在eternal-rumble上取得的不错的成绩,大概10多名,我持续调试,调试机器人是最费时间的,有时候改个小参数,就要跟若干个敌人各调试几百场,才能断定这个参数比原来的参数好还是坏,不长时间,Cigaret就跻身到了第二名,第一名是当时很出名的SandboxDThttp://robowiki.net/cgi-bin/robowiki?SandboxDT),Cigaretmini-bot的身份持续在第二名的位置(mini-bot中排第一)大概有一年左右的时间,并且在一次运动算法升级的时候,排到过第一名,但是很快就又降到了第二名。因为SandboxDT实在太强了,他的机器人是不开源的,因此很少人知道他具体的算法。我们的大部分机器人一直保持开源,当时Cigaret引起了世界各地玩家的关注,我们也参与到国外的讨论组和世界各地的玩家讨论,就是这里http://robowiki.net ,这个wiki现在还运行着,还有不少玩家活跃在上面,因此你可以上去看看,上面也有排行榜。你们可以参与进去。几乎所有的robocode信息,算法技巧,排名历史,甚至robocode的发展历史,各阶段取得优良成绩的机器人历史,都在上面有记载。这里是目前全世界robocode玩家的聚集地:)

 

    对了,这里要提一下RoboChina,(www.robochina.org) 是天翼·李建立的中国robocode网站和论坛,一度火热,并有比赛排行榜。PASoft的前身也是他发起,我和Xiemin加入成为开发人员。,那时候国内热心的玩家Arbow,Liuyang也写了不少不错的机器人,后来robochina域名过期没来得及续费,被国外无聊的域名公司抢注了,我们资金有限,没能买回来。后来用了ai-code.org域名,大量玩家流失。后来慢慢……没人了,哈哈,现在也想不清楚具体怎么回事了,反正就那样慢慢robochina在国内玩家心中淡漠消失了,robochina的玩家似乎也随即消失了……

 

    说到robowiki,那是另一个时期的来临,那个时候eternal-rumble已经不再更新了,你可以看到eternal-rumble最后一次的比赛是遥远的2003年。到了robowiki时期,机器人技巧经历了两次大的突破,在eternal-rumble时期,最牛的辉煌的广为人知的技术是模式匹配+随机运动(http://robowiki.net/cgi-bin/robowiki?RandomMovement),很多优秀的机器人都采自的这种技巧(Cigaret是其中之一),之后,由于模式匹配算法的种种缺点,比如运算速度慢,所以不能分析太多的数据,否则机器人太慢会被disabled,太慢也造成调试很费时间,效率不高。后来SandboxDT的作者公布了他的minibot SandBoxMinihttp://robowiki.net/cgi-bin/robowiki?SandboxMini)机器人的算法,大家学习到了统计学算法,当时称为guess factorhttp://robowiki.net/cgi-bin/robowiki?GuessFactor)技术,我也开始尝试此项技术,enternal-rumble快关闭的时候我出的CigarteST就是对此的一种尝试,你从它最后一次比赛排行第二可以看出,效果很不错。后来就出现了david alves的经典机器人,一举打败了SandBoxDT的统治。在后来kawigi也推出了不少优秀机器人,很长一段时间,大家都是在这种机器人上不断的调优,由于robocode世界,大家都崇尚相互学习,大多机器人都是开源的,所以当前最好的技术,老玩家大家都熟悉,因此也就是比拼一些小的改进,一些实现方式的不同,所造成的不同成绩,大的思路大家都是相同的(当然很多新手也是停留在很初级的技巧上),robowiki的维护者瑞典的PEZ也推出了不少优秀的机器人,还有很多,我现在不能一一记起来。当然,在这个时期,还有一些不得不提的技术,比如Virtual Gunshttp://robowiki.net/cgi-bin/robowiki?VirtualGuns)技术,因为流行的好的瞄准算法是模式匹配和统计学,大多机器人都是要么采用模式匹配,要么采用统计学,Virtual Guns技术就是,具体用一种方法的设计的时候,同时还虚拟(假设)用另外一种,由此统计,对于当前的敌人,哪种效果更好,因此下一次瞄准就采用哪种。我和Xiemin合作开发的Princess好像就用了这个技术,但是效果不是很好,PEZ大量使用了此技术,取得了不错的效果。但是,终究不是大的突破,所以很难有突出的机器人诞生。不久后,一个哪个国家的作者我忘记了,通过修改我和另一个国外人合作开发的机器人Sedan的源代码,发布了一个机器人,一举排到了排行的前几名,由于新手很难会有如此成绩的,所以引起了大家的关注,大家发现了他是通过修改Sedan而来,并且没有遵守开源协议(他的机器人修改自我们的开源机器人,但他没有开源,http://robowiki.net/cgi-bin/robowiki?RWPCL),受到了大家的谴责,我也比较气愤,因为他是通过我们的机器人改来的,我反编译他的代码,并发现了一个可能会有重大突破的改进思路,就是通过自己中弹的信息来调整自己的运动,因为在此前的时间里,大家都关注在瞄准算法上,运动算法没有什么突破,还是随机运动占主流,也是最好的运动,一个调优的好的随机运动,效果很好,既能让模式匹配难以匹配,也能让统计学统计的每个角度概率都差不多。但是随机运动毕竟是死的,它不能自我调节,不能像瞄准算法的模式匹配或者统计学那样的根据敌人的情况学习。由此,我试验出了Lacrimas,采用反统计学的思路,就是当自己中弹的时候,就认为中弹的那个角度,被敌人统计为最高概率的角度,因此调整这个运动概率,再次运动。一出来,取得了很好的效果,甚至可以打败SandBoxDTSandBoxDT的作者Paul Evans很快推出了新版SandboxDT,维持住了他的统治地位。由此Lacrimas受到关注,但当时由于什么原因我现在忘记了,一段时间没有再继续改进。后来,我再上robowiki的时候,发现大家讨论起了WaveSurfer技术。此技术的思路和Lacrimas一样,就是反统计学,此技术的倡导者abc推出了得到巨大成绩突破的机器人Shadow,引起了大家的极大兴趣,并且abc公布了此技术的思路,于是Wavesurfer迅速得到推广,很快SandboxDT被推下了统治地位,并一去不复返,再也未能像以前那样每次被大败都能很快爬起来。我后悔自己当初放出Lacrimas的时候没有开源,当时想保密思路,改进得更牛逼了能稳居第一了再分享,因此没有人讨论,没能像abc那样发展成Wavesurfer,由此看来,在对待技术上,一定要开放,不要闭塞,否则自己发展很慢,我由于自己的狭隘,错失了一次坐上冠军宝座的机会,当时怎么就没能像当初开发出CigaretWave技术时那样开放呢,我很为自己的封闭狭隘而遗憾了一段时间。Wavesurfer的思路和Lacrimas的运动是一样的,但是Wavesurfer的实现方法很科学,这也是WaveSufer这个名称的由来,它把敌人击中自己的信息统计下来,根据概率形成一个个角度范围颜色深度大小不同Wave波浪,在敌人发射炮当时,假设敌人发出了这样一个Wave,让自己的机器人在Wave上根据颜色深度而作冲浪运动(我们大多都采用一些辅助工具,比如RobocodeGL来实时绘制出这些图像信息,便于实时的观察和分析Wave变化, 后来还有更方便的可以替代RobocodeGL的工具我忘了叫什么了),也就是不断往颜色深度低的地方滑动,这点改进非常有效,比起Lacrimas的点到点运动(直线往颜色深度最低的点运动),优秀很多,因为它总表现为绕敌人圆周来回运动,因此敌人的模式匹配相当于也简化为统计学了,由此同时也有效的反了模式匹配。后来我和Xiemin合作开发了Pearhttp://robowiki.net/cgi-bin/robowiki?pear)机器人,采用此技术,由于此技术实现起来难度不小,我们用了差不多2个月时间开发和调优完成,代码量已经可以算是一个小程序项目大小,总共大概40多个类,Pear取得了不错的成绩,现在你到robowiki排行榜上还能看到它,已经是几年前的机器人了,现在还排在比较靠前的位置。直到现在,WaveSurfer仍是最好的运动策略,统计学瞄准,仍是最好的瞄准策略,目前排行榜前十的机器人大概都是采用的这两种技术,呵呵,后者是统计学,而前者是反统计学,虽然后来也出现了Anti-WaveSurfer瞄准策略,但是并不是什么革命性的突破,我想,老在统计学上面反来反去,不是什么好的方向,下一次重大突破,有待后来者们的努力,记住,要想登上冠军宝座,革命新的突破是唯一道路(以往的例子已证明)。

 

    之后,我就再也没能玩robocode了,由于工作的繁忙,由于robocode机器人技术已经如此高深,现在要写一个能排到前十的机器人,就算是一个老手,没有两个月时间日以继夜的努力,也很难成功。

 

    我们一直在等待IBM的下一次国际大赛,或者在中国举行大赛(其他很多国家都举行过),但是IBM一直没举行。

 

    之前我介绍的,算是1v1的技术和历史,对于Melee还有Team的比赛,在我认为,从来没有过像1v1的模式匹配,统计学,WaveSufer(我和Xiemin称为反统计学)那样的辉煌技术突破,因此没有详细介绍,可以提到一些比较优秀并很有益的技术,比如反重力Anti-Gravitation,很有趣的技术,它的思路是这样的,由于在Melee混战中,你越跟大多数敌人混在一块,越死的快,因此跑到人烟稀少的区域,从远处射击人烟密集的地方,越能取得好成绩,因此Anti-Gravitation假设每个机器人都有排斥的力量,墙壁也是(避免装墙),每个tick都分析自己周围那个方向的磁力最低,因此往那个方向运动,由此,自己总能往人烟稀少的地方跑,这很有效。很多优秀的Melee机器人都采用了这种思路,虽然具体实现方式可能不同,但是都能取得不错的效果。此种思路,非常启发人,你可以从这个技术和WaveSurfer技术看到,模拟一个现实的物理现象(重力/磁力,波,冲浪),是多么的优美和有趣啊,并且总能获得很好的实战效果。还有更多的例子,我这里就不一一追述了。从生活中领悟,乃是技术突破的关键。在你编码和思考疲劳的时候,或许出去走走,你就会有更多的发现。

 

    Team的话,我没有深究,虽然也尝试写过,但是都仅限于一些是人都想得到的简单方式把几个Melee机器人和在一起组成一个团队而已。并且,其他玩家也很少有人深入发展Team,因此,也没有什么可值得提的好思路。

 

    由于时间仓促,事先也没有准备,就介绍到这里,时隔我最后一次写机器人,也大概2年多了,很多以前知道的东西,现在也很模糊了,因此未能全面而详细,请见谅。更详细的各种信息,你可以通过浏览http://robowiki.net 而得到。

 

    最后,我不得不提一下在我毕业后和Xiemin还有Cairong创立的公司,PASosthttp://www.ai-code.com),后来天翼·李也加入了,我们开发了类似robocode这样的游戏平台,功能更强大,支持Java,C/C++,Delphi…多种语言编写机器人,并且提供了很好的机器人编写/调试环境。我们还开发了机器人足球平台,跟国内外现有的仿真平台不同,我们没有走完全仿真的思路,而是像robocode那样的简单有趣的模拟方式。但是由于市场推广困难,我们几人在去年和今年相继离开。此产品现在由投资我们的公司继续持有并运营。对于国内玩家,如果有兴趣组织发起此类游戏比赛的朋友,我非常推荐采用我们的平台,因为它用起来更简单,功能更强大,并且有完善的工具,支持更多的语言。非常希望看到国内能有此类活动的发展,可惜无奈,我已无能再投身此业。

至发报时间,iileytide.pear.Pear 0.62.1cx.Lacrimas 1.36cx.BlestPain 1.41cx.CigaretBH 1.03cx.mini.Cigaret 1.31cx.Princess 1.06部坦克还排到了世界前100名哦(http://rumble.fervir.com/rumble/Rankings?version=1&game=roborumble)。

tide.pear.Pear 0.62.1排在21位,可见Pear功底很足啊。还在等什么呢,快把自己的坦克上传吧。

原创粉丝点击