罗庆佳
摘要:该文是基于IBM公司开发的Robocode的JAVA机器人仿真引擎,分析并探索基于此平台的智能机器人方案。在子弹跟踪,反重力运动,以及模式匹配瞄准等人工计算智能技术的基础上,比较并改进策略,然后以onedan1.0机器人为例完成一个可行的智能方案,并编程实现部分机器人代码。最后还做了效果测试。
关键词:人工智能;机器人仿真引擎;智能算法;Robocode
中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2016)08-0160-02
1 概述
本文先对IBM公司研制开发的Robocode智能机器人仿真平台进行系统介绍。然后结合人工智能的应用领域,对过去和现在流行的机器人智能算法进行总结,比较其优劣。最后结合自己的理解,对如何提高机器人智能化水平进行探讨,以Onedan1.0机器人为例,选择其中的一些算法用java语言进行实现。
本文对于智能机器人的应用研究领域,比赛机器人应用领域,特别是在射击类战略类游戏编程领域有一定的价值。
2 Robocode系统简介
Robocode编程平台简介:Robocode 是由IBM公司开发的一套虚拟机器人仿真引擎。其中包括机器人运行平台Robocode,代码编辑器Robot Editor等组件。程序员可以在Robocode中创建自己的机器人,利用系统提供的编程接口以编程的方式对机器人进行控制。简单的说,Robocode就是一个用java语言编写机器人的工具,同时也是机器人比赛的场地和实现机器人智能算法思想的良好平台。
3 onedan1.0的瞄准策略
3.1 常见瞄准策略比较分析
一个好的机器人除了良好的移动策略外,另一个不可缺少的特征就是打击移动目标的能力,并且能达到精确的效果。下面我就对各种瞄准策略做一个系统的分析。
3.1.1 单一瞄准
单一瞄准是那些专门为某一种运动方式而设计的瞄准算法。大致分为以下几种:1)向当前目标的位置开火:是一个最简单也是效果最差的瞄准算法,只要目标稍微移动都将导致子弹打偏。2)线性预测瞄准:向目标将去的地方开火,前提是目标以一定速率沿着直线前进。尤其是当目标离自己很近时,这个算法相当的有效。在短时间内机器人的所有运动都可近似为直线运动。不过,这种算法对于钟摆运动,随机很强的运动以及一些高级移动算法几乎无能为力。
3.2 onedan1.0的瞄准策略(模式识别)
模式是指对象的表示形式,也可以叫做样本。在Robocode中通常是指机器人的状态属性,比如说坐标,方向,速度等。要进行模式匹配,首先得记录模式,也就是记录机器人的状态。在进行匹配判断的时候把当前的状态和记录下来的状态进行比较,找出记录中非常相似的一段状态,则认为目前的状态和那段状态相匹配。
但是对于onedan1.0机器人,我尝试使用模式识别技术。模式识别是尝试指出敌方机器人是否在使用任何一种预定义的模式的过程,然后基于假定它将继续使用那个模式来瞄准敌人。但是需要注意的是,这个技术不同于能适应目标使用任何重复模式的模式分析。
3.3 模式识别瞄准的智能改进
模式识别瞄准的识别能力应该可以通过以下的几方面得到改进:
1)更多的模式:这是最显然的扩充。增加更多的复杂的基于速度的模式。
2)分析朝向的变化:能在速度识别时分析朝向的变化。这个分析要比速度模式分析更复杂,但花上一些努力能产生非常强大有力的瞄准系统。
3)模式分析:比较适用一对一的比赛,它能快速地学习新的模式,但是缺点是对CPU有强烈的要求。如果实现了这个,将拥有一个难以对付的机器人。
4 onedan1.0机器人部分代码实现和测试
4.1 onedan1.0机器人的结构
在进行实现时,第一个robot只写成了一个类文件。开始时,这种作法还可行,但如果试图给robot增加更多的智能的时候,这就导致了难以管理的缺点。因此必须得做一个更好的结构化设计。
较好的解决方法是把robot分成模块,每一块都可重用,并且分别管理robot行为的每一部分。为移动、雷达、火炮和瞄准控制各写了一个类。并且把对敌人信息的跟踪和存储也写成类。
Onedan类:该类继承AdvansedRobot类,提供了整个机器人的大框架。
Util类:所有基本的数据表示和操作。
Enemy类:用来储存敌人数据。
Radar类:雷达策略类。
Movement类:移动策略类。
Fire类:各种开火方法,枪口调整,火力调整都不独立出去,包括在这个类中。
接下来,编写Onedan1.0机器人瞄准模块的代码,由于代码比较简短,只需要写在了一个类文件中。
4.2 瞄准模块代码
通过在本文之前介绍的模式匹配算法中进行一些改进,使其还可以分析直线前进和静止的机器人,并根据代码的需要做了一些调整。以下就是Onedan1.0机器人的模式匹配模块主要函数的代码:
4.3 onedan1.0机器人瞄准模块测试
首先,以下简单地介绍用于测试onedan1.0机器人瞄准系统的sample机器人:
sample.Walls:是一个围绕比赛场地的绕墙机器人,瞄准系统是对原始点射击的方法。
sample.Corrners:是一个在比赛开始后,自动寻找最接近的角落,并且迅速移动过去,在角落附近进行钟摆运动的机器人,瞄准系统也是对原始点进行射击的方法。
由于在测试中,onedan1.0机器人是静止不动的,所以用于测试的两个sample机器人对onedan1.0机器人的命中率均为100%,显然对onedan1.0机器人不是很公平,降低了测试效果,可采取了一些平衡措施:将sample.Walls机器人的发弹速度降低到onedan1.0机器人的2/3,将sample.Corrners机器人的子弹能量降低为onedan1.0机器人的2/3。由于打飞的子弹会造成能量损失,也就是说onedan1.0机器人必须有70%以上的命中率才可能取得比赛胜利。
以下就是Onedan1.0机器人和sample.Walls机器人的一对一比赛。从结果可以看出,Onedan1.0机器人取得了九胜一负的好成绩。
从结果可见,Onedan1.0机器人的瞄准系统相当优秀,具有一定的智能,在和Robocode自带的Sample机器人比赛中取得了很好的成绩。
5 结束语
Java作为面对对象语言已经被人们认识并接受,我们不可否认Robocode是个完美的学习、游戏平台,但它也存在自身的缺陷,本文对Robocode 在子弹跟踪,反重力运动,以及模式匹配瞄准等人工计算智能技术的基础上,比较并改进策略,然后以onedan1.0机器人为例完成一个可行的智能方案,并编程实现部分机器人代码。最后还做了效果测试。
参考文献:
[1] 刘玉宽.Robocode——我的乐趣[J].程序员,2003(8):53-56.
[2] 刘阳.打造自己的第一个机器人[J].程序员,2003(8):57-60.
[3] 梁晓峰.DIY实战机器人[J].程序员,2003(8):61-65.