使用现有的开源框架可以使我们更好地完成强化学习的入门,其中OpenAI给我们提供了gym、baselines、mujoco这些方便学习的环境和算法。以前安装mujoco需要先申请lisence,试用期结束以后价格昂贵。然而好消息是,mujoco最近被openai收购,并且完全开源。我最近尝试了一下,lisence现在可以免费下载,并且能够使用。
以下是mujoco安装过程。Mac, Linux 系统安装过程差别不大。
过程参考:【强化学习】gym+baselines+mujoco+mujoco_py安装配置 - 简书
1. 下载mujoco,获取免费lisence。
https://www.roboti.us/license.html1.1. 链接下载lisence
下载链接为: https://www.roboti.us/license.html。下载完成后会获得一个mjkey.txt文件
1.2. 链接下载mujoco
下载链接:Download
这里我选择mujoco200_mac版本。你可以选择对应版本。
这样我们就有了两个文件,一个lisence mjkey.txt.一个包含应用的压缩文件mujoco200_mac.zip
1.3. 处理下载文件
1.3.1. 首先将mujoco200_mac.zip压缩文件解压放入指定的路径下,这里我们放入home/.mujoco目录下。
$ mkdir ~/.mujoco
$ cp mujoco200_macos.zip ~/.mujoco
$ cd ~/.mujoco
$ unzip mujoco200_macos.zip
1.3.2. 然后把下载好的证书mjkey.txt
拷贝到.mujoco文件夹中对应的位置。
注意我这里解压后的名称是mujoco200, 不是mujoco200_macos不一样可以手动改一下。
$ cp mjkey.txt ~/.mujoco
$ cp mjkey.txt ~/.mujoco/mujoco200/bin
1.3.3. 添加环境变量, 用gedit打开~/.bashrc
文件并添加命令
$ gedit ~/.bashrc
这个操作会打开系统home目录下的.bashrc文件夹。然后在文件的最后添加两行,将mujoco路径添加进去。
$ export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
1.3.4 运行结果以检验是否安装成功
$ cd ~/.mujoco/mujoco200/bin
$ ./simulate ../model/humanoid.xml
运行结果:
注意:在mac中运行,由于软件不是从appstore下载,可能会被认为是恶意软件,而拒绝访问,但是不要担心。可以从系统偏好设置-安全与隐私-通用-App Stpre和被认可的开发者 设为始终允许。需要打开左下角小锁。如果一次不行,重复运行./simulate ../model/humanoid.xml, 在跳出窗口选在允许,多试几次。
2. 安装mujoco_py
2.1. 首先创建虚拟环境
$ conda create -n gymlab python=3.7
$ conda activate gymlab #你自己的虚拟环境名称
2.2. 安装patchelf
$ sudo -s
$ curl -o /usr/local/bin/patchelf https://s3-us-west-2.amazonaws.com/openai-sci-artifacts/manual-builds/patchelf_0.9_amd64.elf
$ chmod +x /usr/local/bin/patchelf
2.3. 安装mujoco
网上很多方法都是先克隆,然后再cd进入文件夹setup。但是根据https://github.com/openai/mujoco-py 官方提示,我们可以直接用pip安装。
$ pip3 install -U 'mujoco-py<2.1,>=2.0'
2.5. 安装完成后检验是否安装成功
在虚拟环境下面进入python,如果你能顺利执行以下代码就说明安装成功了。
>>> import mujoco_py
>>> from os.path import dirname
>>> model = mujoco_py.load_model_from_path(dirname(dirname(mujoco_py.__file__)) + "/xmls/claw.xml")
>>> sim = mujoco_py.MjSim(model)
>>> print(sim.data.qpos)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
>>> sim.step()
>>> print(sim.data.qpos)
[ 2.09217903e-06 -1.82329050e-12 -1.16711384e-07 -4.69613872e-11
-1.43931860e-05 4.73350204e-10 -3.23749942e-05 -1.19854057e-13
-2.39251380e-08 -4.46750545e-07 1.78771599e-09 -1.04232280e-08]