世界robocode机器人的四大运动方式分析 - 编程入门网
nBot的射击方法后,你是否又 觉得Sample里面的Crazy也是个令人头疼的家伙?你用分别用对付 Corner,Walls 和SpinBot的射击方法跟他对战,你会发现这三种方法都能打中他,但是命中率 都没有打Corner,Walls和 SpinBot他们高,这里我做了个测试:分别用三种方法 来对付Crazy,测试结果如下表1:
世界robocode机器人的四大运动方式分析(3)时间:2010-11-29 IBM iiley他虽然总是做弧线运动,但是这次弧线运动停 止后又会开始另一个方向的弧线运动。可能你看了Crazy的源代码后你会怀疑, 代码里面一个类似 Math.random()的语句都没有,怎么称这种运动是随机性很强 的运动呢?这里的随机性是相对于你的机器人的运动分析程序的:由于他总是时 而转动,时而停止换一个方向,时而向前,时而向后,撞到墙又会改变方向。一 般的机器人都难以分辨这种改变,所以通常也称它为随机的运动。 虽然 他的随机性很强,但是用对付SpinBot的圆周提前量射击方法也达到%29.16的好 成绩,显然这样的运动也不是很理想。更明显的随机运动是在代码里加入了类似 ahead(Math.random()*200),turnLeft(Math.random()*360)这样的代码,这样随 机性就更强,连此机器人的作者也不知道它的下一步会采取怎样的运动,你又如 何提前预知呢?那么……这样运动的机器人是否就打不中呢?你从 对付Crazy的射击命中率表可以看出,虽然我采取对付另一种有规律运动方式的 的射击策略来对付一种我不知道的运动方式是不合理的,但是我却往往也能打中 它,而且命中率并不低。为什么呢?我举个例子吧,假设我采取对付Wall的直线 提前量射击方法射击Crazy,如图4: 图4 图5 我认为它走的是直线,这显然是错误的,但是在我离它比较近的时候 ,虽然射击的是如图的B’点而R1运动到了C点,考虑到机器人有一定的高 宽度,R2也仍然能打到它。 对于另外一种直线随机距离来回运动的机器 人(前面提到过的一个建议Random),你可以看图5。你计算到如果你射击B的话 ,子弹到达B点的时候敌人R1也恰好到达B点处,但是R1随时都有可能改变方向返 回,这取决于random()方法。如果刚开始ahead(Math.random()*200)中 Math.random()返回一个很大的值,大到足以使R1运动到B点甚至超过B点,那 么你将击中敌人;如果这个返回值很小,使R1还没到达B处就返回了,这样你这 发子弹就浪费了。所以说你仍然有机会击中它,它并不是难以掌握的,只是什么 时候能击中什么时候不能击中,谁都说不清楚。 世界robocode机器人的四大运动方式分析(4)时间:2010-11-29 IBM iiley对瞄准有干扰性的主动 运动 看了上面两种运动方式的分析,也许在你心头有这样的想法,我先 以一种很明显的规律运动,等敌人误认为我是那种方式运动后立刻改变为另一种 规律,然后等敌人意识到现在的运动规律后我又改变为原来那种,这样敌人是否 就被我迷惑了呢?呵呵,的确,这样是一种很不错的方法,许多优秀的机器人的 运动有不同程度的干扰迷惑性。我还是先举个例子来说说吧。假如一个机器人一 开始不动,你会采取怎样的射击方法呢?一般都会用对付Corner的当前位置射击 方法吧?但是当你发射子弹后,它又开始直 |
||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |