2010-08-20 42 views
2

我在本学期有一门课程,在这门课中我需要做一个应用AI的项目。我决定在游戏AI上做到这一点。我有两个基本的想法:实施FPS机器人或实施足球AI。我已经实现了基本的寻路算法(A *等),并研究了有限状态机,一些一阶逻辑,基本神经网络的东西(反向传播ALgo) ,目前我正在做一门关于遗传算法的课程。需要应用人工智能项目的建议

我们现在主要关注的是机器人。我们的计划包括:

  • 每个“僵尸”将使用一个有限状态机(FSM),其中将包括可能的状态的机器人可能有执行;以及接收输入时将发生的操作/状态更改的规则。
  • 在机器人小组动作中,每个机器人都会决定是否打击,如何打击;基于范围,机器人的数量,使用神经网络的现有战斗。
  • 通过使用遗传算法,对手的下一步移动可以基于重复的移动来预测。

虽然我已经在我的空闲时间编程的一些2D游戏到现在(像吃豆子,俄罗斯方块等),我从来没有真正进入了3D区域。我们很可能会使用3d引擎。

我们希望将大部分精力集中在AI部分。我们不想被关于动画/ 3D模型等不必要的细节所困扰。例如,如果我们可以找到一个具有像Moveright()这样的功能的框架,它只是将机器人移动到右侧,那将非常棒。

我的基本问题是:考虑到项目的持续时间超过3个月,我们按照计划的方式是否过于雄心勃勃?我们应该去3D并使用3D游戏引擎吗?如果你以前没有经验,很容易使用这种引擎吗?如果是的话,什么样的引擎适合我们的项目?

我遇到了另一个想法,在书中给出了AI游戏编程的例子,玩家可以从上方看到机器人。那样更合适吗?

谢谢..对不起,关于问题的长度..这只是我的问题有点太具体。

回答

2

我的基本问题是:它过于雄心勃勃 去它在我们 有计划的方式,考虑到时间的项目 是华南简介3个月?

是 - 但是这并不一定是坏事:)

我们应该去3d和使用一个3D游戏引擎 ?

No.主要是因为你说过:

我们想把大部分 能量集中在AI部分。

这里就是我想要做的,根据我的经验(和知道,作为一名学生,我经常咬下方式比我能咀嚼,太):

无论让你的模拟功能一个图形组件。让它向另一层发布“更新”,其中包括玩家和球向量。通过这样做,您可以将AI任务与其他任何事物分开,这意味着您可以减少需要担心的错误,还可以更轻松地单元测试您的基础模拟。

采取那些“更新”并创建您的第一个“可视化”层 - 使其成为可能的最简单的2D表示。它可能只是一连串的文本行:“球员1在(30,40)速度为20kph时有球/球员1踢球”。由于您将会弄清楚如何获取模拟发布的数据并对其进行处理,这对于您的第一次传递来说已经足够困难。

您的下一个可视化文件可能会添加一个ANSI图形的2D网格(认为流氓样),以实际显示玩家和球的移动。之后你的下一个可能是精灵。等等。请注意,如何逐步增加可视化的复杂性......不要让您的第一步转向使用以前从未使用过的技术(3D图形引擎)。 (在这种情况下,你永远都不会完成你的项目。)

至于你的问题,有哪些路线可以采用 - FSM,NN,GAs,自上而下的设计 - 你应该把你的兴趣从大多数至少(和你的小组的其他成员一起),然后依次处理它们。你可能会考虑为一个团队做一种风格,为另一个团队做一个不同的设计。你可能想让你的密克罗尼西亚队与一支已经做了额外调整的密克罗尼西亚队进行比赛,以便比较和对比如果你认为你的变化实际上是有益的(你可能会感到惊讶并发现他们会让球队变得更糟)。事实上,单元测试和可视化中的模拟分裂非常非常方便 - 您应该能够“模拟”尽可能多的游戏以获得实验结果而不用担心图形。你甚至可以通过脚本在一夜之间分批进行。

总的来说,我对你的建议是:将你的项目分解成你能够做到的最小的部分,然后一次一个地解决它们,所以无论你在什么时候用完,你都会有炫耀一些有趣的东西。

+0

好了,我想我应该用自上而下的方法去吗?即玩家从顶视角看什么?我真的不想用文字方法去做...... – Karan 2010-08-22 20:33:19

+0

“文字方法”只是沿着无限可视化复杂程度的第一步。不要直接进入图形,你可以先通过“文本方法”来解决“模拟图层”和“可视化图层”之间的所有依赖关系......这对你来说已经够难了,请相信我。 – 2010-08-23 06:32:40

1

你可以看看guntactyx,这就是我在uni做AI单元时必须使用的东西。

它负责所有的显示,物理,声音等......对于你来说,你所要做的就是编程你的机器人小组。 该API包括使机器人向左或向右移动,拍摄,听到声音(如枪声)等功能,并附带一些示例机器人,因此您不必从头开始。

此外,它很有趣,看你的机器人作战你的朋友机器人:)