1

我在本学期有一门课程,要求我做一个关于人工智能应用的项目。我决定在游戏 AI 上做这件事。我有两个基本想法:实现 FPS 机器人或实现足球 AI。

我现在在 AI 方面很安静,我已经实现了基本的寻路算法(A* 等),并且研究了有限状态机、一些一阶逻辑、基本的神经网络东西(反向传播算法),目前我正在做遗传算法课程。

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

  • 每个“机器人”都将使用有限状态机 (FSM) 实现,其中包含机器人可能具有的可能状态;& 接收输入时将发生的动作/状态更改的规则。
  • 在机器人组移动中,每个机器人将决定是否攻击、攻击方式;基于范围、机器人数量、使用神经网络的现有战斗。
  • 通过使用遗传算法,可以根据重复动作预测对手的下一步动作。

虽然到目前为止我在空闲时间编写了一些 2d 游戏(如吃豆人、俄罗斯方块等),但我从未真正进入 3d 领域。我们很可能会使用 3d 引擎。

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

我的基本问题是:考虑到项目的持续时间约为 3 个月,按照我们计划的方式进行是否过于雄心勃勃?我们应该去 3d 并使用 3d 游戏引擎吗?如果您以前没有使用过这些引擎,那么使用这些引擎是否容易?如果是,什么样的引擎适合我们的项目?

我遇到了另一个想法,在 AI Game Programming by example 一书中给出,玩家可以从上到下查看机器人。这样会更合适吗?

谢谢..对不起问题的长度..只是我的问题有点太具体了。

4

2 回答 2

2

我的基本问题是:考虑到项目的持续时间约为 3 个月,按照我们计划的方式进行是否过于雄心勃勃?

是的——但这不一定是坏事:)

我们应该去 3d 并使用 3d 游戏引擎吗?

不,主要是因为你说:

我们希望将大部分精力集中在人工智能部分。

根据我的经验,这就是我要做的(并且知道,作为一名学生,我经常咬得比我能咀嚼的还多):

使您的模拟功能与图形组件无关。让它发布“更新”到另一层,包括球员和球的向量。通过这样做,您可以将 AI 任务与其他所有任务分开,这意味着您需要担心的错误更少,并且您还可以更轻松地对底层模拟进行单元测试。

获取这些“更新”并创建您的第一个“可视化”层——使其成为可能的最简单的 2D 表示。它可能只是一串文本行:“玩家 1 有球/玩家 1 在 (30,40) 处以 20 公里/小时的速度踢球”。这对于您的第一次通过来说已经足够困难了,因为您将弄清楚如何获取模拟发布的数据并对其进行处理。

您的下一个可视化可能会添加一个 ANSI 图形的 2D 网格(想像 rogue-like)来实际显示球员和球的移动。之后你的下一个可能是精灵。等等。请注意您如何逐步增加可视化的复杂性...不要让您的第一步使用您以前从未使用过的技术(3d 图形引擎)。(在这种情况下,你永远不会完成你的项目。)

至于你关于采取哪条路线的问题——FSM、NN、GA、自上而下的设计——你应该把你对它们的兴趣从高到低排列(和你小组的其他人一起)然后解决它们,在那个命令。您可能会考虑为一个团队做一种风格,而为另一个团队做不同的设计。您可能想让您的 FSM 团队与对其进行了额外调整的 FSM 团队进行比赛,以便比较和对比您是否认为您的更改实际上是有益的(您可能会惊讶并发现它们使团队变得更糟)。实际上,这就是单元测试和从可视化中分离模拟非常方便的地方——你应该能够“模拟”尽可能多的游戏来获得实验结果,而不必担心图形。

总的来说,我给你的建议是:把你的项目分解成最小的部分,一次处理一个,所以无论你在哪里,当时间用完时,你都会有一些有趣的东西可以展示离开。

于 2010-08-21T19:01:36.177 回答
1

你可以看看guntactyx,这是我在大学做 AI 单元时必须使用的。

它负责所有显示、物理、声音等……为您服务,您所要做的就是为您的机器人团队编程。API 包括使机器人向左或向右移动、射击、听到声音(如枪声)等的功能......它附带了一些示例机器人,因此您不必从头开始。

此外,观看您的机器人与朋友的机器人作战也很有趣 :)

于 2010-08-21T19:55:58.403 回答