在 MMO 游戏中为格斗机器人创建 AI 的方法有哪些示例?

人工智能 参考请求 游戏-ai 算法请求
2021-10-22 23:01:38

我有一个 MMO 游戏,里面有玩家。我想为游戏发明一些新东西,并添加玩家机器人以使游戏也可以单人玩。我想添加的 AI 仅用于与其他玩家或他看到的其他玩家机器人战斗。

所以,我想将我的战斗策略,确切地说我的游戏方式,应用到基本上使用 if 语句和随机数的机器人上。例如,当对手的生命值低,而机器人有足够的特殊攻击力时,他会利用这个机会并使用他的特殊攻击力试图将对手击倒,或者如果机器人的生命值低,他会吃掉及时但不要太多,因为冒险打架是有道理的,如果你吃得太多,你的对手也会这样做。或者,例如,如果机器人检测到对手玩家吃得太多并恢复健康,他也会这样做。

我把这个实现的想法告诉了我的一个朋友,他简单地回答:这不是人工智能,它只是一组条件,它没有任何启发式函数。

对于那种类型的游戏,有什么想法可以创建一个真正的 AI 来实现这些条件?

基本上,人工智能应该知道如何才能击败对手,基于对手的数据,例如当前的健康、护甲和武器、等级、是否冒着生命危险等等。

我是一个初学者,我真的很感兴趣以正确的方式去做。

4个回答

我会为你的机器人设置一个目标列表。这些可能是“保持最低的健康水平”、“淘汰人类玩家”、“阻止前往 X 位置的方式”等。这显然取决于您的 MMO 领域。

然后,您可以使用计划器在游戏中实现这些目标。您定义一组具有先决条件和效果的操作,设定当前目标,规划器将为机器人制定一个操作列表以实现目标。您可以在PDDL中轻松表达您的操作(和域)

动作的示例是“移动到位置 X”、“吃 X”、“攻击玩家 X”。“攻击玩家X”的前提条件可以是“生命值(X)低”,效果可能是“生命值(X)减少Y”。根据规划者的能力,有不同的表达方式。

这样做的美妙之处在于您实际上不必显式编码任何行为。你描述了领域,并告诉机器人它应该实现什么,以及它有什么能力。然后,实际行为会从该描述中出现。如果机器人只在玩家生命值较低的情况下攻击玩家,那么观察玩家进食(从而提高他们的生命值)可能会导致机器人进食(将自己的生命值推高到玩家的生命值之上,以便它可以攻击)——但是你没有直接告诉机器人这样做。

作为起点,请访问http://education.planning.domains/获取资源列表。

如果您只有几个可用的操作,它可能对人类用户来说似乎是可预测的,但是随着各种目标和操作,这将很快变得更加复杂并且看起来更加“智能”。

更新:这是一篇论文的链接,将面向目标的行动计划应用于游戏,描述了如何将其应用于游戏中。

Oliver Mason 的回答非常适合使用特定的方法和工具,但我想提出一个评论中提到的更一般的原则。

你的朋友所做的区别并不是普遍认可的。我的一位大学讲师将人工智能定义为“一种表现出类似于智能生物行为方式的人工系统”。

如果一个智能生物总是在特定情况下使用特殊攻击,那么在相同情况下总是这样做的算法就是智能的,即使它背后的算法非常简单。如果你能想出一个聪明玩家的完整描述,你就有了所谓的专家系统,即一个捕捉真正专家决策过程的系统。

你的朋友甚至不正确,你提出的人工智能“没有任何启发式功能”。当你写出“如果 AI 的健康状况低于 50%,它会吃东西”这样的条件时,你就是在逼近人类使用的规则。您可以通过增加与当前健康成比例的进食概率来使启发式算法更加复杂;这可能反过来使启发式更接近最优

你只能通过将它置于不同的情况并观察它来真正了解你的人工智能有多“好”——有时,一组简单的规则会产生看起来非常聪明的“紧急行为”。随着你建立更复杂的规则——即更优化的启发式——涌现的行为会改变,你可以调整它以获得所需的效果。

您可以使用强化学习(尤其是 Q-Learning)来训练您的机器人。

RL 最重要的部分是奖励函数。如果我们想让智能体做一些特定的事情,我们必须以某种方式为它提供奖励,使其能够实现我们的目标。因此,奖励函数准确地指示确切的行为非常重要

因此,您可以构建自己的奖励函数来满足您的要求。如果机器人做了你想做的事,你会用更高的分数奖励它,否则你会用负奖励惩罚它。

AlhpaGo 和 OpenAI 团队使用类似的技术来训练他们的模型,然后可以在围棋星际争霸 2Dota 2等游戏中击败人类

另外,请查看有关 udacity 的深度强化学习免费预览。

如果您愿意采用进化方法,您可以使用 NEAT 算法(增强拓扑的神经进化)来训练您的机器人。设置它需要一些工作,但随着时间的推移它会逐渐改善。

查看以下内容:

这应该足以激起你的兴趣并让你开始。最后一个链接链接到以多种语言提供的许多 NEAT 实现。