这篇技巧文章发表在2002年5月的IBM developerWorks期刊的“披风和炮塔:向Robocode大师学习秘密”一文中。
角斗联盟
当我发现Robocode时,没有定期的比赛表明哪种机器人是最好的。 随着新版本机器人的发布,任何存在的比赛都很快过时了。 我为开发自己的机器人所做的测试比任何公开的竞争数据都更加完整和最新。 然后,克里斯蒂安·施奈尔(Christian Schnell)发布了RoboLeague,从而使比赛自动化,而我开始进行自己的基于联赛的比赛。 在测试自己的机器人时,我下载了50多个其他人已上传到Robocode存储库的机器人。 我将这些机器人分为10个师。接下来,我以Gladiator风格为每个师进行了100回合的战斗。 每个部门的前两个机器人将在下个赛季升级和降级。 将生成HTML结果上传到一个简单的网站很容易,在这个网站上,不断增长的Robocode社区可以看到他们的机器人与那里的许多其他机器人相比。 因此, 角斗联盟诞生了。
基于联盟的格式具有两个积极的特点。 首先,这是一种使用大量具有相对较少数量的机器人的比赛进行比赛的方法,因为运行这些机器人可能很耗时。 其次,具有类似标准的机器人最终可以处于同一个联盟中。 因此,刚起步的机器人创造者可以与类似的标准机器人竞争,并且竞争激烈,而不是被比其早期创造更进化的机器人所杀。
运动策略
以下是移动策略的级别:
- 别动 容易打。 通常是个坏主意。
- 直线移动 。 避免被固定式定位击中。
- 沿圆形曲线移动 。 避免被固定和线性定位击中。
- 以摆动的方式前后移动 。 使用线性和圆形定位很难达到目标,但固定定位在这里可以很好地发挥作用。
- 向随机方向移动 。 可以有效降低所有级别的定位目标的点击率,但通常很难做到不被击中。
- 先进的运动 。 使用有关其他机器人的各种数据来选择最佳的移动位置。 到目前为止,这是机器人策略中最大,最难了解的领域。 这是最好的机器人和不太好的机器人之间的主要区别因素之一。
射击
以下是定位级别:
- 固定式 。 在目标机器人的当前位置射击。 这是最简单,最无效的瞄准策略,因为机器人的任何移动都会导致子弹丢失。
- 线性的 。 假设目标物以恒定的速度沿直线移动,则在目标物的位置进行拍摄。 这种瞄准方法非常有效,尤其是当目标相对较近时。 在短时间内,所有机器人运动都可以通过直线近似。 但是,这种近似很快变得不可靠。
- 通告 。 假设目标以恒定的速度和恒定的角速度运动,则在目标将要拍摄的位置拍摄。 比线性定位好一点。 可以通过快速更改速度(例如停止和开始以及快速前后移动)来避免此目标。
- 震荡的 。 该策略假定目标机器人在不断地来回移动。 这种定位对具有这种运动的机器人非常有效,因为只有少数几个机器人使用这种定位。
- 运动模式匹配 。 该方法记录了机器人的过去运动,并假定机器人将以可重复的方式运动。 在预测的未来位置上射击。 这种针对性是任何以前方法中最大的潜力。 潜在的缺点是详尽搜索所需的处理时间。
收集信息
以下是扫描级别:
- 很简单 。 只需将雷达指向与枪支相同的方向即可。
- 通告 。 保持雷达不断转动。
- 跟踪 。 保持雷达锁定在单个目标上。
- 最佳 。 移动雷达,以使其尽快扫描所有机器人。
在更先进的机器人中,可以为战场上其他机器人收集的数据对于制定复杂的移动和射击策略至关重要。 以下列出了可以从其他机器人获得的一些数据:
- 位置
- 标题
- 速度
- 角速度
- 能源
- 您对它们造成了多大的伤害-可用于比较战场上的其他机器人,并瞄准您似乎最容易(最多或最少)命中的机器人
- 他们对你造成了多少损失
- 他们死了多少次
- 当他们发射子弹时(使用能量差的微妙技术)
这份策略清单绝不是完整的。 角斗士联赛中的顶级机器人在某种程度上使用了上述大多数策略。 但是,时不时有人提出新概念或简单策略,迫使其他所有机器人提出反策略。 即使是最简单的想法也可以非常成功。
翻译自: https://www.ibm.com/developerworks/java/library/j-tipstrats/index.html