使用Unity ML-Agents构建的基于物理学的3D RL环境——”排球训练“

951 阅读5分钟

训练强化学习代理来打排球

图片由作者提供

受此启发 粘液排球馆我建立了一个3D排球环境来训练强化学习代理,使用Unity的 强化学习代理工具包.整个项目是开源的,可以在以下网站上找到。 🏐终极排球.

在这篇文章中,我分享了从设计环境到训练代理的实施细节、挑战和学习的概况。关于ML-Agents的背景,请查看我的 介绍ML-Agents的文章.

使用的版本。_第18版(2021年6月9日
_Python软件包。_0.27.0
_Unity包。2.1.0

🥅设置法庭

由于以前没有游戏设计或3D建模的经验,我发现Unity广泛的免费资产和示例项目库非常有用。

下面是我使用的东西。

球场的其余部分(网柱、墙壁、球门和地板)都只是调整大小和旋转的立方体物体拼凑而成的。

图片由作者提供

地板实际上是由2层组成的。

  1. 薄薄的紫色和蓝色边的球门在上面,有一个 "触发器 "碰撞器
  2. 下面是一个可行走的 地板

球门检测球何时击中地板,而可行走的 地板为球提供碰撞物理学。

还有一些需要注意的实施细节。

  • 代理人看起来像立方体,但有球体碰撞器来帮助他们控制球的运动轨迹。
  • 我还在球场周围添加了一个无形的边界。我发现在训练过程中,如果你惩罚他们把球打出界外,代理人可能会对学习打球望而却步。

📃 脚本

在Unity中,脚本可以分配给各种游戏对象以控制其行为。下面是用于定义环境的4个脚本的简要概述。

VolleyballAgent.cs

附在代理上

这既控制了观察的收集,也控制了代理人的行动

medium.com/media/7ac61…

VolleyballController.cs

附在球上

这个脚本检查球是否已经落地。如果是,它将触发VolleyballEnv.cs中的奖励分配。

medium.com/media/db31a…

VolleyballEnvController.cs

附属于父排球区(包含代理、球等)。

该脚本包含了管理剧情开始/停止的所有逻辑,对象如何产生,以及奖励应该如何分配。

medium.com/media/84759…

VolleyballSettings.cs

附属于一个单独的'VolleyballSettings'对象

这持有基本环境设置的常量,例如特工的运行速度和跳跃高度。

medium.com/media/44c65…

🤖代理人

该环境被设计为对称的,因此两个代理可以共享相同的模型,并在其中进行训练。 自我发挥.

我决定从简单的矢量观测开始。这些都是相对于代理定义的,所以不管代理是作为蓝色还是紫色的立方体进行游戏都没有关系。

观察结果。

观察空间总大小:11

  • 旋转(Y轴) -1
  • 从代理人到球的三维矢量 -3
  • 与球的距离 -1
  • 代理人的速度(X、Y和Z轴)- 3
  • 球的速度(X、Y和Z轴) - 3

注意: 对于一个代理来说,知道对其环境的这种直接观察是非常不现实的。进一步的改进可以包括增加 射线广播,对手的位置(以鼓励竞争性的游戏),以及将数值标准化(以帮助训练更快地收敛)。

可用的行动

4个离散的分支。

  • 前进、后退、保持不动(大小:3
  • 向左、向右移动,保持不动(大小:3
  • 左转、右转、保持不动 (尺寸: 3)
  • 跳跃,不跳跃 (尺寸: 2)

🍭 奖励

为了训练一个简单的代理进行排球,我选择了一个简单的奖励,即把球打过网的奖励+1。正如你在下一节中所看到的,这样做的效果相对较好,不需要进一步塑造奖励。

如果你打算训练一个有竞争力的代理或使用 "自我游戏",那么 ML-Agents文件 建议保持简单的奖励(赢家+1,输家-1),并允许更多的训练迭代来补偿。

️🏋️♀️训练

对于训练,我选择使用 PPO只是因为它更直接而且可能更稳定。

Unity ML-Agents提供了一个PPO算法的开箱实现(其他包括 Gail, Sac, Poca).你所需要提供的是YAML配置文件中的超参数。

medium.com/media/4c970…

为了加快训练速度,我创建了16个重复的环境,它们都有助于并行地训练同一个模型。

图片由作者提供

Unity ML-Agents在抽象出进行强化学习所需的所有模板代码方面做得很好。训练的终端命令将看起来类似于。

medium.com/media/7bde8…

**注意:**ML-Agents默认的时间尺度为20,以加快训练速度。明确设置标志--时间尺度=1是很重要的,因为这个环境中的物理学是与时间有关的。

图片由作者提供

在这种设置下,训练2000万步需要7个小时。到了这个阶段,代理人几乎能够完美地来回排球了

👟 接下来的步骤

谢谢你的阅读!

我希望这篇文章能让你对Unity ML-Agents中设计和训练强化学习代理的过程有一个好的了解。对于任何对强化学习的实践项目感兴趣的人,或者正在寻找一种方法来创建复杂的、富含物理学的RL环境的人,我强烈建议给Unity ML-Agents一个机会。

请做 看看这个环境如果你有兴趣,可以提交你自己的代理,与其他人竞争!

我们欢迎任何反馈和问题。请随时通过以下方式与我联系 推特.

📚资源

对于其他想要建立自己的环境的人,我发现这些资源很有帮助。


🏐 Ultimate Volleyball:使用Unity ML-Agents构建的基于物理学的3D RL环境最初发表于Towards Data Scienceon Medium,在那里人们通过强调和回应这个故事来继续对话。