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

图片由作者提供
受此启发 粘液排球馆我建立了一个3D排球环境来训练强化学习代理,使用Unity的 强化学习代理工具包.整个项目是开源的,可以在以下网站上找到。 🏐终极排球.
在这篇文章中,我分享了从设计环境到训练代理的实施细节、挑战和学习的概况。关于ML-Agents的背景,请查看我的 介绍ML-Agents的文章.
使用的版本。_第18版(2021年6月9日
_Python软件包。_0.27.0
_Unity包。2.1.0
🥅设置法庭
由于以前没有游戏设计或3D建模的经验,我发现Unity广泛的免费资产和示例项目库非常有用。
下面是我使用的东西。
- Agent Cube预制件来自 ML-Agents示例项目
- 排球预制件和沙子材料来自 免费的海滩精华资产包
- 网的材料来自 免费的网格和网子材料包
球场的其余部分(网柱、墙壁、球门和地板)都只是调整大小和旋转的立方体物体拼凑而成的。
图片由作者提供
地板实际上是由2层组成的。
- 薄薄的紫色和蓝色边的球门在上面,有一个 "触发器 "碰撞器
- 下面是一个可行走的 地板
球门检测球何时击中地板,而可行走的 地板为球提供碰撞物理学。
还有一些需要注意的实施细节。
- 代理人看起来像立方体,但有球体碰撞器来帮助他们控制球的运动轨迹。
- 我还在球场周围添加了一个无形的边界。我发现在训练过程中,如果你惩罚他们把球打出界外,代理人可能会对学习打球望而却步。
📃 脚本
在Unity中,脚本可以分配给各种游戏对象以控制其行为。下面是用于定义环境的4个脚本的简要概述。
VolleyballAgent.cs
附在代理上
这既控制了观察的收集,也控制了代理人的行动。
VolleyballController.cs
附在球上
这个脚本检查球是否已经落地。如果是,它将触发VolleyballEnv.cs中的奖励分配。
VolleyballEnvController.cs
附属于父排球区(包含代理、球等)。
该脚本包含了管理剧情开始/停止的所有逻辑,对象如何产生,以及奖励应该如何分配。
VolleyballSettings.cs
附属于一个单独的'VolleyballSettings'对象
这持有基本环境设置的常量,例如特工的运行速度和跳跃高度。
🤖代理人
该环境被设计为对称的,因此两个代理可以共享相同的模型,并在其中进行训练。 自我发挥.
我决定从简单的矢量观测开始。这些都是相对于代理定义的,所以不管代理是作为蓝色还是紫色的立方体进行游戏都没有关系。
观察结果。
观察空间总大小: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配置文件中的超参数。
为了加快训练速度,我创建了16个重复的环境,它们都有助于并行地训练同一个模型。

图片由作者提供
Unity ML-Agents在抽象出进行强化学习所需的所有模板代码方面做得很好。训练的终端命令将看起来类似于。
**注意:**ML-Agents默认的时间尺度为20,以加快训练速度。明确设置标志--时间尺度=1是很重要的,因为这个环境中的物理学是与时间有关的。

图片由作者提供
在这种设置下,训练2000万步需要7个小时。到了这个阶段,代理人几乎能够完美地来回排球了
👟 接下来的步骤
谢谢你的阅读!
我希望这篇文章能让你对Unity ML-Agents中设计和训练强化学习代理的过程有一个好的了解。对于任何对强化学习的实践项目感兴趣的人,或者正在寻找一种方法来创建复杂的、富含物理学的RL环境的人,我强烈建议给Unity ML-Agents一个机会。
请做 看看这个环境如果你有兴趣,可以提交你自己的代理,与其他人竞争!
我们欢迎任何反馈和问题。请随时通过以下方式与我联系 推特.
📚资源
对于其他想要建立自己的环境的人,我发现这些资源很有帮助。
- 蜂鸟课程由Unity提供(不幸的是已经过时了,但仍然有用)。
- ML-Agents环境样本(特别是足球和跳墙的环境)
🏐 Ultimate Volleyball:使用Unity ML-Agents构建的基于物理学的3D RL环境最初发表于Towards Data Scienceon Medium,在那里人们通过强调和回应这个故事来继续对话。