Robocode 深度剖析.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Robocode 深度剖析

Robocode 深度剖析 07302010015 周磊 一、Robocode 的 doc 文档中说明的包层次 从这张图上可以很清楚的看出其包内部类的继承关系和类实现的接口(implements 后的东西就是该 类实现的接口) ,还可以看到robocode._RobotBase ,robocode._Robot ,robocode._AdvancedRobot , robocode._AdvancedRadiansRobot 这种类名以下划线开头的类为作者定义的抽象类。robocode.Robot 类 是非抽象类,但其子类 robocode._AdvancedRobot 为抽象类,通过对 Robocode 内部类结构的研究可以印 证书上很多理论的东西。大家一定能发现, AdvancedRobot 类是继承自 Robot 类的,因此推荐大家继承 AdvancedRobot 类,因为 Robot 类里有的方法 AdvancedRobot 会继承下来,而且多了许多有用的方法。 二、几种比较好的 AI 算法 不要以为 AI 算法是离我们很遥远的东西,其实智能算法无处不在,从你吃午饭选择排哪一列队可以 先买到饭到企业用最优投资策略大把的捞钱,很多平时被我们忽略的东西其实内部也多多少少包含了一 些智能的算法,而我们要做的就是把平时做决策时的感觉转化成机器能读懂的算术公式。其中不可避免 的要用到很多数学以及统计方面的知识,还要使用很多变量来描述影响结果的不确定因素。 Robocode 中的得分高低并不取决于你赢了几局,而在于你有没有有效的躲避敌人的子弹并实行精确 的打击,所以大部分的智能坦克都会有自己独特的躲子弹和预测敌人走向的算法,比较常见的有以下几 种: 躲子弹: 1. 因为坦克在开火后自己会消耗 【0.1,3 】的能量,我们可以检测对方的能量变化来进行欺骗性的 躲藏(因为开火后子弹的弹道就不会改变,它会朝你原来的位置前进,但你此时已经不在那个地 方了)。这个技巧还存在问题。子弹一发射,机器人就移动,所以它最终可能会移回炮弹轨迹之 内。最好是在估计子弹要到达时再移动。 2. 据说网上还有一种算法比较繁琐,但有效率比前一种高很多,就是捕获当前界面上的所有子弹并 按能量级加权,计算出它们的质心,并远离它,由于没有见过代码,所以我不太了解具体的算法, 有兴趣的同学可以上网查找一下。 3. 通过复杂的运动让敌人无从下手。有的机器人采用了快速的有规律的运动方式,如Walls ,Spinbot 等,但敌人用直线瞄准能轻松搞定Walls ,用圆周瞄准枪枪命中Spinbot,当然这是在单挑的时候, 群殴时的条件很复杂。但从多场Walls和Spinbot与高级机器人的群殴较量中,Walls和Spinbot还是 会被别人做掉,原因很简单,它们的运动方式太简单,太有规律了。 关于机器人运动方式的分析请见 Robocode机器人的四大运动方式分析.pdf 4. 使自身不停的摇摆来避开子弹,因为自身的摆动能够很好的减少暴露在敌人枪口下的目标大小。 ZelluX 前辈就使用了这一招,单挑时非常的有效,群殴的话貌似会使第三方很容易地打到自己。 预测敌人下一步的位置: 1 .直线预判 通过取两次敌人的位置,间隔时间以及子弹从发射到到达目标的时间按直线进行预判,即取 两个位置连线的延长线上的一点。 2 .圆周瞄准 计算做圆周运动的机器人的 change in x (x 方向上的变化)和 change in y (y 方向上的变 化)的伪码相当简单,假定您以弧度为单位进行计算: change in x = cos(initialheading) * radius - cos(initialheading + changeinheading) * radius change in y = sin(initialheading + changeinheading) * radius - sin(initialheading) * radius 式中 init

您可能关注的文档

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档