注:本文章为官方文档翻译,如有侵权行为请联系作者删除
ML-Agents Overview - Unity ML-Agents Toolkit–原文链接
ML-Agents 概述(一)
ML-Agents 概述(二)
Unity Machine Learning Agents Toolkit(ML-Agents Toolkit) 是一个开源项目,它使游戏和模拟环境能够用于训练智能体Agent。Agent可以通过简单易用的 Python API 使用强化学习、模仿学习、神经进化或其他机器学习方法进行训练。我们还提供最先进算法的实现(基于 PyTorch),使游戏开发者和爱好者能够轻松训练 2D、3D 和 VR/AR 游戏的智能Agent。这些经过训练的Agent可用于多种用途,包括控制 NPC 行为(在多Agent和对抗等各种设置中)、自动测试游戏版本以及在发布前评估不同的游戏设计决策。ML-Agents Toolkit 对游戏开发者和 AI 研究人员都有所帮助,因为它提供了一个中心平台,可以在 Unity 丰富的环境中评估 AI 的性能,并使这些进步能够为更广泛的研究和游戏开发者社区所使用。
根据您的背景(即研究人员、游戏开发者、业余爱好者),您此刻可能会有非常不同的问题。为了让您更轻松地过渡到 ML-Agents Toolkit,我们提供了几个背景页面,其中包括有关 Unity Engine、 机器学习和 PyTorch的概述和有用资源。如果您不熟悉 Unity 场景、基本的机器学习概念或以前没有听说过 PyTorch,我们强烈建议您浏览相关的背景页面。
本页的其余部分深入介绍了 ML-Agents、其关键组件、不同的训练模式和场景。读完本页后,您应该对ML-Agents Toolkit 允许您执行的操作有了很好的了解。后续文档页面提供了如何使用 ML-Agents 的示例。要开始使用,请观看此 ML-Agents 实际操作演示视频。
示例应用:训练NPC行为
为了帮助解释本页中的材料和术语,我们将使用一个假设的、运行的示例。我们将探讨在游戏中训练非玩家角色 (NPC) 行为的问题。(NPC 是从未被人类玩家控制的游戏角色,其行为由游戏开发者预先定义。)更具体地说,我们假设我们正在构建一款多人战争主题游戏,玩家控制士兵。在这个游戏中,我们有一个 NPC 充当医务员,寻找并救活受伤的玩家。最后,我们假设有两支队伍,每支队伍有五名玩家和一名 NPC 医务员。
医护人员的行为相当复杂。首先,它需要避免受伤,这需要检测自己何时处于危险之中并移动到安全的地方。其次,它需要知道哪些队员受伤并需要帮助。在多人受伤的情况下,它需要评估受伤程度并决定先帮助谁。最后,优秀的医护人员总是会把自己置于可以快速帮助队员的位置。考虑到所有这些特点,意味着医护人员在每一种情况下都需要测量环境的几个属性(例如队员的位置、敌人的位置、哪些队员受伤以及受伤程度),然后决定采取什么行动(例如躲避敌人的火力、移动去帮助其中一名队员)。鉴于环境设置数量众多,医护人员可以采取的行动也很多,手动定义和实现这种复杂的行为具有挑战性,而且容易出错。
使用 ML-Agents,可以使用多种方法训练此类NPC(称为Agents )的行为 。基本思想很简单。我们需要在游戏的每个时刻定义三个对象(称为环境):
- 观测- 医护人员对环境的感知。观测可以是数字的和或视觉观测。数字观测是从代理人的角度对环境属性进行的测量。对于我们的医护人员来说,这将是它可见的战场属性。对于大多数环境,Agent通常需要几个连续的数字观测值。另一方面,视觉观测是从附着在Agent身上的摄像头生成的图像,表示Agent在某一时间点看到的内容。人们通常会将Agent的观测与环境(或游戏)状态混淆。环境状态表示包含所有游戏角色的整个场景的信息。Agent的观测仅包含Agent知道的信息,通常是环境状态的子集。例如,医护人员的观测不能包括医护人员不知道的隐藏敌人的信息。
- 行动- 医护人员可以采取哪些行动。与观测类似,行动可以是连续的,也可以是离散的,具体取决于环境和Agent的复杂性。对于医护人员来说,如果环境是一个简单的网格世界,只有他们的位置很重要,那么采取四个值之一(北、南、东、西)的离散行动就足够了。但是,如果环境更复杂,医护人员可以自由移动,那么使用两个连续行动(一个用于方向,另一个用于速度)更合适。
- 奖励信号- 标量值,表示医护人员表现如何。请注意,奖励信号不需要在每个时刻都提供,而只需在医护人员执行好或坏的行为时提供。例如,如果它死亡,它可以获得大量的负面奖励,每当它救活受伤的队员时,它就会获得适度的正面奖励,当受伤的队员因缺乏援助而死亡时,它就会获得适度的负面奖励。请注意,奖励信号是将任务目标传达给Agent的方式&#x