3.2.4 Gym的MuJoCo环境
强化学习的另一个比较重要的应用场景是机器人的控制。针对这个特殊的场景,OpenAI Gym也有对应的强化学习环境。首先是MuJoCo系列的强化学习环境,这个环境的意思是多关节接触动力学(Multi-Joint dynamics with Contact)。这一系列的强化学习环境主要的特点是由几个简单的几何体互相接触组成机器人,并对机器人进行实时控制,目的是让机器人完成一系列复杂的动作(例如行走、跑跳等)。相比于3.2.2节和3.2.3节中介绍的两个强化学习环境,这个强化学习环境的特点主要是整个环境更加复杂,强化学习环境的动作空间是连续的,而不是离散的。
这里使用一个具体的蚂蚁('Ant-v2')强化学习环境来演示如何使用MuJoCo系列的强化学习环境。为了能够使用MuJoCo强化学习环境,首先需要下载MuJoCo的二进制可执行文件。这个文件可以在OpenAI的GitHub页面目录下的openai/mujoco-py子页面获得对应的下载链接地址。然后根据自己电脑的系统版本选择对应的zip文件,并且把zip文件解压到指定目录下(如果是Linux/MacOS操作系统,则在~/.mujoco/mujoco200/目录下,暂时不支持Windows版本)。接下来需要运行git clone https://github.com/openai/mujoco-py命令,从GitHub上下载MuJoCo代码。为了能够在系统中安装MuJoCo的Python接口库,我们需要修改mujoco_py/builder.py文件,在这个安装脚本的c_compilers列表变量中添加自身所在系统的gcc的路径,比如笔者的gcc的路径在'/usr/local/bin/gcc-11'下,读者可以自行查找自己所用系统的gcc所在的位置(比如可以使用which g cc命令),根据位置酌情修改。修改完这个文件之后,运行命令pip install.,就可以开始使用MuJoCo强化学习环境了。
蚂蚁('Ant-v2')强化学习环境的具体图像如图3.7所示。在实际应用中并不以这个强化学习环境的渲染图像作为深度强化学习模型的输入,而是以渲染环境中机器人的姿态作为输入。
图3.7 蚂蚁('Ant-v2')强化学习环境渲染图像
在图3.7中,整个蚂蚁机器人有8个关节,智能体只能控制作用在这8个关节的力矩上(取值范围在-1到+1之间),也就是将这8个值作为智能体选择的动作输入强化学习环境中。由于力矩的值连续分布,所以这个问题是一个基于连续动作空间的控制问题。具体的姿态参数如表3.1所示,一共有111个参数,即描述这个蚂蚁机器人需要111个参数,包括一系列的标量值和矢量值。整体的奖励比较复杂,主要由几部分构成,首先贡献最大的奖励是蚂蚁机器人需要能够移动,只要观测到机器人的躯干发生了移动,这部分就能获取正的奖励,而且奖励和速度正相关。另外几个负的贡献在于我们需要最小化控制的力矩,可以理解为对机器人的控制越少越好;还有一项是接触点的作用力,这部分作用力也是越小越好。机器人的初始高度为0.55,当所有的观测空间的数值有效(没有正负无穷大等无效数字的时候),并且高度在0.2和1.0之间时,强化学习环境可以一直进行下去,否则强化学习环境标记为已完成,需要被重置。
表3.1 蚂蚁('Ant-v2')强化学习环境观测空间
由于强化学习环境的使用方法和前面的Gym类型的强化学习环境类似,这里不再赘述,读者可以从文件ex_3_6.py中看到如何调用对应的函数接口完成对应强化学习环境的采样。