机器学习在游戏AI

在过去的游戏中,我敢肯定,简单的开关/案例陈述(从某种意义上来说)对于大部分“AI”游戏来说都可以做到。 然而,随着游戏越来越复杂,特别是在3D飞跃中,需要更复杂的algorithm。 我的问题是,在这个游戏AI中使用的实际机器学习algorithm(如强化学习)? 还是那个大多还只是在大学的研究项目中(我曾经接触过)?

如果不是真正的机器学习algorithm,那么什么是驱动商业游戏AI的尖端? 它是简单高度复杂的,但是能够覆盖大多数可能性的静态(非ML)algorithm? 如果是这样,使用什么样的实际algorithm?

我一直很好奇,谢谢!

编辑:思考一下后,我可以进一步澄清一下。 游戏中的代理人如何做出决定? 如果他们没有实时使用实际的学习algorithm,那么可能是在开发阶段用来产生模型(静态algorithm)的学习algorithm,然后用这个模型在游戏中做出决策? 或者是某种意义上的手动编码决策的静态algorithm?

编辑 :请注意,这个答案现在已经过去了五十年 – 机器学习在那个时候已经取得了很大的进步,游戏中使用的东西很可能也发生了变化。 原来的答案如下。

我认为你高估了大多数现代游戏AI的能力; 这很棒,因为这正是现代游戏开发者所希望的。 他们投入时间让系统看起来更加智能化,比如让AIangular色谈论他们将要做什么,或者偶尔遵循执行复杂一系列任务的预设脚本。

如果不是实际的机器学习algorithm,那么驱动商业游戏AI的边缘是什么? 它是简单高度复杂的,但是能够覆盖大多数可能性的静态(非ML)algorithm?

实际上通常有很less的可能性。 正如在另一个答案中提到的,通常有一个有限的状态机在工作。 例如。 射击游戏中的典型敌人可能处于下列状态之一:闲置,警觉(他们知道附近有麻烦),狩猎(他们正在寻找敌人),攻击(他们可以看到敌人并进行攻击),以及逃跑(他们试图逃离敌人)。 各州之间的转换可以是简单的事件,例如听到的噪音,看到的对手,低于某一阈值的健康值等等。真的很微不足道。

通常可以将每个状态的执行分解为less量简单的操作,例如, 移动位置,观察方向,瞄准目标等。这些低水平的活动是有据可查的,被广泛使用的。 (例如,A *search寻路,vectormath用于转向和定向)。所有这些构build块在3D中的工作方式与在2D中的工作方式大致相同。

另外,看起来更复杂的AI往往是脚本化的,也就是说,这种行为是用一种简单的编程语言预编程的,以便在非常特定的游戏环境中工作。 针对具体情况的脚本可以对环境做出假设(例如,掩护的位置隐藏在后面,盟友和敌人的接近等),并且可以提供非常具体的目标。 更普遍的脚本可以由一组预定的事件types(例如,敌人看到,盟军被打死,不明噪音听见)和非常简单的反应(例如,如果self.health> 75%THEN attackNearestEnemy ELSE fleeToSafety)来触发。

…是一个学习algorithm,可能在开发阶段用来产生模型(静态algorithm),然后用这个模型在游戏中做出决定?

在模拟车辆的情况下(比如赛车游戏),这是相当常见的 – 您可以将赛道algorithm作为一系列点和input基于这些点进行提供,并获得一个学习algorithm来制定完成最好的时间。 最终你可以用游戏发货。 但是,这是从less量input(前方道路,障碍物接近度,当前速度)到less量输出(期望速度,期望的转向)的简单映射,这很适合于机器学习。 模拟人类行为的游戏几乎不能回溯到这些简单的函数逼近上,所以我们倾向于依靠手动模拟不同的行为状态。

有时可能会出现一种混合方法,在这种方式中,有限状态机转换可以被训练得更加优化,但是这在实践中不太可能出现在很多游戏中,因为对于devise人员来说,实际的转换通常是微不足道的。

在游戏中玩ML没有任何意义,至less在大多数消费类游戏中,因为人工智能很容易变得难以打败,因此对玩家来说也不太愉快。 游戏AI中的很多努力分为三个部分:第一个是允许计算机作弊。 即人工智能通常知道玩家在哪里,并且事先知道周围环境的最佳路线。 这是必要的,否则人工智能会一直在摸索死胡同,这不是很好。 AI工作中的另一个主要努力是使NPC足够愚蠢的让玩家击败。 人工智能很容易写出来,总是击败玩家(想想你面对海军陆战队的半条命),最难的部分是平衡AI的外观和可玩性。 最后一部分是确保AI只占用有限的资源 – 无论是在CPU时间还是内存使用方面。

另一个使用ML的减号是AI的状态需要在会话之间存储,否则AI每次都必须从头开始。 在个人电脑上这不是问题,但是调音台曾经有非常有限的长期存储,排除了保存状态信息。

AI“作弊”的一个例子:在“运输大亨”中,AI公司从未被要求修改地形的高度。 我知道这是因为我多年前把它移植到Mac上。

我做的第一个FPS,AI总是往玩家方向,但是方向会用一个正态分布的随机样本进行加权,所以大部分时间的方向都是朝向玩家的,但是有时候方向还是偏离了方向。帮助AI走出了死胡同。 这是以前有足够的CPU咕噜做A *search。

一个叫做HPA *的search和亲戚可能是游戏行业中最彻底的人工智能概念。 他们通常被认为是所谓的地形寻路algorithm,但偶尔有人会意识到,他们可以用于决策树等空间中的“寻路”,然后事情变得非常有趣。

如果你对学习各种AI感兴趣,那么我对Xpilot-AI很有兴趣。 运行项目的人build造的“星星”机器人是一个固定的基于规则的控制器,而这个控制器又是遗传algorithm的产物。 这是怎么回事:

  • 他们build立了一个基本的基于规则的机器人(如果我们即将撞墙,向左转,并将推进器设置为全部…)
  • 他们打破了机器人控制器的参数(所以不是固定的“即将撞墙”条件,而是将其分解为“距离墙<X”,“我们的航向在墙的Y度以内”,以及“速度> Z.“)
  • 遗传algorithm被用来训练X,Y,Z等的最优值。
  • 经过一段时间的学习后,这些价值被复制到机器人的来源,并被宣布“完成”。

所以,虽然主动学习在游戏中可能在计算上是昂贵的,但是如果你不认为自己能够足够聪明,那么使用学习algorithm来创build你的AI仍然是有价值的。

遗传algorithm的另一个好处是,你可以将“正确的”结果定义为一个能赢得15%时间的机器人,来训练一个简单模式的机器人。

我不认为机器学习在商业游戏中是非常普遍的,但是一个值得注意的例子就是Black&White ,它是关于训练宠物的,而且让游戏的居民相信玩家。

我想说明ML可以用在video游戏中的情况。 下面展示了neural network和进化方法相结合的前瞻性研究,以创造一个全新的游戏体验。 我非常高兴能从这个algorithm的发明者那里学习: NEAT 。 这不是一个完美的解决scheme,但它显示出巨大的潜力。

http://nerogame.org/

我认为有几款游戏使用(或多或less)复杂的neural network。

http://en.wikipedia.org/wiki/Game_AI

Alpha-Beta Pruning驱动棋盘游戏,包括国际象棋更简单的游戏。 这是修剪状态空间以实现高效search的一种方法。 A *search的变体允许在机器人模拟等中对板进行探索。两者都是“经典AI”,而不是机器学习algorithm本身。 塞缪尔的跳棋选手和TD-Gammon分别是使用强化学习来玩跳棋和步步高的例子。

除了上面的回答外,还有一篇关于这个问题的文章:

数字游戏中的机器学习:一项调查

请注意,大多数(但不是全部)内部列出的游戏纯粹是学术活动,如预期。

Spore游戏使用一些先进的遗传algorithm来模拟游戏中的生命forms 。

通常在AI引擎中不需要真正的学习(见Kylotan的答案)。

然而,一个学习AIalgorithm可以相对容易地devise一个非常具体和简单的任务。 我的想法是给计算机一些任务的方向,但是然后在模式识别中编码,以便从错误中学习。 当把AI分解成这些组件时,它变成了我的软弱头脑可以理解的东西。

你可以把井字趾作为一个简单的例子。 几个月前,我用AI写了一个Tic Tac Toe游戏 。 我只是给了电脑知识的规则,以及如何阻止一个胜利的举动 – 就是这样。 然后,您可以将其设置为自身,在幕后维护过去动作列表,并识别模式,随着获得经验而变得“更智能”。

经过一万场之后,如果你自己玩,可能很难被击败。 考虑到电路板的reflection和旋转,在这个游戏中的AI可以被优化以更快地学习。 但是它仍然是一个学习AI引擎的有趣工作例子。

然而,从实际的angular度来看,学习algorithm可能不值得游戏中的处理能力。 毕竟,电脑确实需要维护一个列表或某种结构来存储其学到的情报。 这意味着更多的内存使用,并可能一些昂贵的查找。 而与一个有很多移动件的游戏,这可以加起来。