Unity机器学习Agent(ML-Agents)是一款开源的Unity插件,可让游戏和模拟作为训练智能Agent的环境。通过简单易用的PythonAPI,Agent可以使用强化学习,模仿学习,神经元演化或其他机器学习方法进行训练。我们还提供最新算法的实现(基于TensorFlow),使游戏开发者和业余爱好者能够轻松地为2D,3D和VR/AR游戏训练智能Agent。这些受过训练的Agent可以用于多种目的,包括控制NPC行为(在多种Agent和敌对情况下的各种设置中),游戏构建的自动化测试和评估不同游戏设计的预发布决策。ML-Agents对于游戏开发者和AI研究人员来说都是互利的,因为它提供了一个中央平台,可以在Unity的丰富环境中评估AI的优势,然后得到更广泛的研究和游戏开发者社区的青睐。
本页面的其余部分深入介绍了ML-Agents,其关键组件,不同的训练模式和场景。到最后,对于能用ML-Agent做什么,你应该有一个很好的理解。随后的文档页面提供了如何使用ML-Agents的示例。
为了帮助解释本页面中的材料和术语,我们将始终使用一个假设的运行示例。我们将探讨在游戏中训练非可玩角色(NPC)行为的问题。(NPC是一个永远不受人类玩家控制的游戏角色,其行为由游戏开发者预先定义。)更具体地说,我们假设我们正在构建一个多玩家,以战争为主题的游戏,玩家可以控制战士。在这场比赛中,我们有一名NPC担任医护人员,寻找并救治受伤的球员。最后,让我们假设有两支队伍,每支队伍有五名队员和一名NPC医生。
军医的行为相当复杂。它首先需要避免受伤,这需要检测何时处于危险中并移动到安全位置。其次,它需要了解其团队成员中哪些人受伤并需要帮助。在多人受伤的情况下,它需要评估受伤程度并决定首先帮助谁。最后,一名优秀的医生总能把自己置于一个可以快速帮助其团队成员的位置。考虑所有这些特征意味着医生需要在每种情况下测量环境的若干属性(例如团队成员的位置,敌人的位置,其团队成员中的哪些人受到伤害并达到什么程度),然后决定采取行动(例如躲避敌人的射击,移动以帮助其成员之一)。鉴于环境的大量设置以及军医可采取的大量行动,手动定义和实现这种复杂的行为是具有挑战性的,并且容易出错。
使用ML-Agents,可以使用各种方法来训练这些NPC(称为Agent)的行为。基本想法很简单。我们需要在游戏的每个时刻定义三个实体(称为环境):
ML-Agents提供了将Unity用作模拟引擎的所有必要工具,用于了解Unity环境中不同对象的策略。在接下来的几节中,我们将讨论如何实现ML-Agent以及它提供的功能。
ML-Agents是一个Unity插件,它包含三个高级组件:
ML-Agents的简化框图。
学习环境包含三个帮助组织Unity场景的附加组件:
我们示例游戏的ML-Agents示例框图
我们尚未讨论ML-Agents如何训练行为,以及PythonAPI和ExternalCommunicator分别扮演何种角色。在我们深入了解这些细节之前,让我们总结一下之前的组件。每个角色都绑定到一个Agent上,并且每个Agent都连接到一个Brian上。Brian从Agent处收到观察和并返回行动。Academy确保除了控制整个环境的设置之外,所有Agent和Brian都处于同步状态。那么Brian如何控制Agent做什么呢?
实际上,我们有四种不同类型的Brian,它们可以实现广泛的训练和推理场景:
正如目前所描述的那样,外部通讯器和PythonAPI似乎只能被外部Brian所利用。这不是真的。可以配置内部,玩家和启发式Brian,通过外部通讯器(一种称为广播的功能)将观察,奖励和行动发送到PythonAPI。我们很快会看到,这将使更多的训练模式成为可能。
一个配置有多个Agent和Brains的场景的例子
考虑到ML-Agents的灵活性,可以通过几种方式进行训练和推理。
内置的训练和推理
定制训练和推理
在之前的模式中,使用外部Brian类型进行训练以生成内部Brian类型可以理解和使用的TensorFlow模型。然而,ML-Agents的任何用户都可以利用自己的算法进行训练和推理。在这种情况下,在训练和推理阶段,Brain类型将被设置为External,并且场景中所有Agent的行为都将在Python中进行控制。
我们目前没有教程突出展示此模式,但您可以在此处了解有关PythonAPI的更多信息。
课程学习
数学课程的例子。从简单课程到更复杂课程的学习过程,每一个都是建立在之前之上。
训练与课程学习教程将介绍WallArea示例环境的训练模式。
模仿学习
简单地展示我们希望Agent执行的行为通常更直观,而不是尝试通过试错法来学习。例如,这种模式不是通过设置奖励功能来训练医生,而是通过游戏控制器提供医生应该如何表现的实例。更具体地说,在这种模式下,训练期间的Brian类型被设置为玩家,并且使用控制器执行的所有动作(除了Agent观察)将被记录并发送到PythonAPI。模仿学习算法将使用这些来自人类玩家的观察和行动来学习策略。带模仿学习的训练教程将介绍BananaCollector示例环境的训练模式。
目前为止的讨论主要集中在使用ML-Agents对单个Agent进行训练,有几种训练方案是可能的。我们很期待看到社区创造了什么样的新奇和有趣的环境。对于那些训练智能Agent的人来说,下面是一些可以作为启发的例子:
除了提供灵活的训练方案外,ML-Agents还包含其他功能,可提高训练过程的灵活性和可解释性。