应用AI项目需要建议

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

我现在还是一个AI新手,我实现了基本的寻路算法(A*等等),并且学习了有限状态机、一些一阶逻辑、基本的神经网络知识(反向传播算法),并且目前正在学习一门关于遗传算法的课程。

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

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

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

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

我的基本问题是:考虑到项目时长约为3个月,按照我们计划的方式进行是否过于雄心勃勃?我们应该进入3D领域并使用3D游戏引擎吗?如果之前没有使用它们的经验,使用这些引擎容易吗?如果容易,哪种引擎适合我们的项目?

我偶然发现了另一个想法,在《AI游戏编程实例》一书中给出,玩家将拥有机器人的俯视图。那样做是否更合适?

谢谢…很抱歉问题有点长…只是我的问题有点太具体了。


回答:

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

是的 – 但这不一定是件坏事 🙂

我们应该进入3D领域并使用3D游戏引擎吗?

不应该。主要是因为你说过:

我们希望将大部分精力集中在AI部分。

根据我的经验(并且知道,作为一名学生,我经常咬下比我能嚼的更多的东西),我会这样做:

使你的模拟功能独立于图形组件。让它向另一个层发布“更新”,其中包括玩家和球的向量。 这样做可以使你的AI任务与所有其他任务分开,这意味着你需要担心的错误更少,并且还可以更轻松地对基础模拟进行单元测试。

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

你的下一个可视化可能会添加一个ANSI图形的2D网格(类似于rogue游戏)来实际显示玩家和球的移动。 在此之后的下一个可能是精灵。 等等。 请注意你如何逐步增加可视化的复杂性…不要让你的第一步直接使用你以前从未用过的技术(3D图形引擎)。 (那样的话你永远无法完成你的项目。)

至于你关于采取哪种路线的问题 – FSM、NN、GA、自上而下的设计 – 你应该(与你的团队中的其他人一起)按照从最感兴趣到最不感兴趣的顺序对它们进行排名,然后按该顺序进行处理。 你可以考虑为一个团队做一种风格,为另一个团队做不同的设计。 你可能希望让你的FSM团队与已经对其进行了额外调整的FSM团队对抗,以便在你认为你的更改实际上有益时进行比较和对比(你可能会惊讶地发现它们会使团队变得更糟)。 实际上,这就是单元测试和将模拟与可视化分开非常非常有用的地方 – 你应该能够“模拟”尽可能多的游戏,以获得实验结果,而无需担心图形。 你甚至可以使用脚本在夜间分批进行。

总的来说,我对你的建议是:将你的项目分解成你可以分解的最小部分,并一次处理一个,这样无论时间耗尽时你处于什么位置,你都会有一些有趣的东西可以炫耀。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注