人工智能的游乐场?

33

在学校里,我的其中一位教授创建了一款3D游戏(不仅仅是引擎),所有玩家都完全由人工智能控制。我们的任务是编写单个玩家的AI程序,基本上我们被提供了一个API与游戏世界进行交互。

然后我们的AI实现被一起投入到游戏中,我们看着我们的程序相互对战。

这就像机器人足球,但是虚拟的,有许多大炮但没有足球。

我现在正在寻找类似的东西(并且是开源的)以供使用。(最好是Java语言,但我也可以接受其他语言。)我在寻找游戏引擎或框架...我在寻找一个完整的游戏,只是缺少AI代码...最好是为这种练习而设立的。有什么建议吗?

10个回答

21

这听起来与Robocode十分相似。

Robocode是一款编程游戏,旨在开发Java或.NET中的机器人坦克来对抗其他坦克。机器人之间的战斗是实时进行并展示在屏幕上。


11
我对RoboCode唯一的抱怨是它很快就变成了一个三角函数学习项目,而不是一个API或AI学习项目。一旦你开发出一组库来抽象出三角函数,你就可以开始编写AI程序。在我看来,它应该作为API的一部分提供这样的库。 - Chris Nava
6
RoboCode非常有趣。我曾在一家公司工作,在外出活动时我们会进行内部团队对战。你需要使用TDD开发机器人,并将代码提交到SVN。每隔20分钟,CruiseControl会检出最新的代码,运行单元测试(我认为你还需要有一定的代码覆盖率),然后在投影屏幕上启动一场战斗。你要边观看战斗,边改进机器人以备下一轮20分钟后的比赛。非常有趣。 - Drew Noakes

10
你可能想要关注2010年的AIIDE,他们将会举办一个星际争霸自动化竞赛。你可以下载软件、API和代理,将你自己编写的AI连接到星际争霸模拟器中。
与其他平台如3D Robocup不同,星际争霸引擎将处理物理问题,并且可能允许你将大部分时间放在更高级的方面,例如路径规划、策略、资源分配等等。同时,你也可以使用基本形式的AI作为占位符,以便在专注于特定改进时使用,比如近战AI。

+1,好棒的调用,不知道我怎么就没想起来。顺便说一句:当你说“与Robocup等其他平台不同”时,你是在谈论3D联赛,因为正如Drew Noakes所说,2D联盟“更抽象”。 - João Portela
是的,我指的是3D联赛。你说得对,2D联赛更抽象。在2D联赛中,基本操作符是“移动、冲刺、转向和射门”。 - Eric

9

请查看Mario AI。您可以编写一个AI来控制马里奥。有一场比赛和一些相关的论文。使用Java或任何JVM语言非常容易设置并运行。


6

我的人工智能课程使用了开源游戏BZFlag,这个游戏非常有趣且富有启发性。


4
您可以考虑使用Open NERO(最好是Java,但我对任何语言都开放)。但它是用Python编写的。如果没有什么Java建议吸引您的注意,可以在这里看看:http://code.google.com/p/opennero/

它不“缺乏”AI代码,它包含了它。也许查看Python中的AI实现能够给您在Java方面的努力带来一些启示。

编辑:针对vidstige的评论-您可以尝试这个:http://aichallenge.org/-编程蚂蚁以收集食物和打击敌人。这里似乎有一个Java实现。


这真的回答了问题吗?他正在寻找一种需要自己填写AI的东西... - vidstige
@vidstige - 很好的观点 - 原始帖子已经编辑,包含了更加专注于问题的内容。 - robrambusch
@vidstige:它还包含一些练习,非常适合练习人工智能算法。它包含了非常著名的人工智能书籍Russell和Norvig的教材《人工智能:一种现代方法》中的例子。 - darshan

2
你可以从这个游戏开始。
一些人工智能已经实现,所以你可以参考一下。

2

我知道你在问题中间接提到了RoboCup,但考虑到标题,我认为值得一提。它有2D和3D版本:

2D联赛更加抽象,其中包含移动、接球、踢球等指令。

3D联赛更加复杂,因为你需要控制3D机器人身体上每个铰链的角度(Nao模型有22个)。

两者都是同样有效的AI练习。这可能取决于您想要玩的AI领域。

两者都可以从支持TCP套接字的任何语言/平台编程。您可以在线找到Java示例代码来帮助您入门。我一直在维护一个现有的3D RoboCup库列表,可以在SimSpark Wiki这里找到。

如果您想使用.NET进行3D联赛,您可以使用我创建的TinMan库


1

ORTS是一个开源的实时战略游戏框架。你可以设置它,定义游戏,然后编写使用API来玩游戏的AI代理。 - Shaggy Frog

1

Torcs 是一款赛车游戏引擎,可以让你使用 C++ 构建自己的驾驶员。


0

你教授的游戏让我想起了很多年前我在放学后浪费的时间玩的老款 Macintosh 游戏 刺客, 这是一个有趣的回合制游戏,玩家需要在每个回合开始时输入他们的移动,然后这些移动会同时执行。游戏的人工智能有点愚蠢,我总是希望能够改进它们,但我从未找到过开源版本的游戏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接