MushroomRL
MushroomRL是什么
MushroomRL是一个Python强化学习(RL)库,其模块化设计使得它可以轻松使用知名的Python张量计算库(如PyTorch、Tensorflow)和RL基准测试(如OpenAI Gym、PyBullet、Deepmind Control Suite)。它以简单的方式允许执行RL实验,提供经典的RL算法(如Q-Learning、SARSA、FQI)和深度RL算法(如DQN、DDPG、SAC、TD3、TRPO、PPO)。
完整文档和教程可在此处获取:http://mushroomrl.readthedocs.io/en/latest/。
安装
你可以通过以下方式最小化安装MushroomRL
:
.. code:: shell
pip3 install mushroom_rl
安装所有功能
MushroomRL
还包含一些可选组件,例如对OpenAI Gym
环境的支持、来自Arcade Learning Environment
的Atari 2600游戏,以及对Pybullet
和MuJoCo
等物理模拟器的支持。默认情况下不启用这些类的支持。
要安装全套功能,你需要安装额外的包。你可以通过运行以下命令安装所有内容:
.. code:: shell
pip3 install mushroom_rl[all]
这将安装MushroomRL的所有依赖项,除了Plots依赖项。 对于ubuntu>20.04,你可能需要安装pygame和gym依赖项:
.. code:: shell
sudo apt -y install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev \
libsdl1.2-dev libsmpeg-dev libportmidi-dev ffmpeg libswscale-dev \
libavformat-dev libavcodec-dev swig
注意,你仍然需要为不同的操作系统安装其中一些依赖项,例如macOS需要安装swig。
以下是安装Plots依赖项需要运行的代码:
.. code:: shell
sudo apt -y install python3-pyqt5
pip3 install mushroom_rl[plots]
你可能需要先安装外部依赖项。有关mujoco-py安装的更多信息,请按照项目页面上的说明进行操作:https://github.com/openai/mujoco-py
警告!使用conda时,可能会出现QT相关问题。你可以通过在代码中添加以下行来解决这些问题,将``<conda_base_path>``替换为你的conda分发路径,将``<env_name>``替换为你正在使用的conda环境名称:
.. code:: python
import os os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = '<conda_base_path>/envs/<env_name>/bin/platforms'
要使用dm_control MushroomRL接口,请按照这里的说明安装dm_control
:https://github.com/deepmind/dm_control
在MushroomRL中使用Habitat和iGibson
Habitat <https://aihabitat.org/>
和iGibson <http://svl.stanford.edu/igibson/>
是提供真实和感知丰富学习环境的仿真平台。
在MushroomRL中,代理的默认观察是RGB图像,但也可以使用RGBD、
代理传感器数据和其他信息。
如果你已经安装了iGibson或Habitat的早期版本,我们建议删除它们并进行全新安装。
iGibson安装 ^^^^^^^^^^^^^^^^^^^^ 按照官方指南进行安装:http://svl.stanford.edu/igibson/#install_env 并安装其资产和数据集: http://svl.stanford.edu/igibson/docs/assets.html http://svl.stanford.edu/igibson/docs/dataset.html
对于<MUSHROOM_RL PATH>/mushroom-rl/examples/igibson_dqn.py
,你需要运行
.. code:: shell
python -m igibson.utils.assets_utils --download_assets
python -m igibson.utils.assets_utils --download_demo_data
python -m igibson.utils.assets_utils --download_ig_dataset
你也可以使用第三方数据集:https://github.com/StanfordVL/iGibson/tree/master/igibson/utils/data_utils/ext_scene
场景详细信息在YAML文件中定义,需要传递给代理。
参见<IGIBSON PATH>/igibson/test/test_house.YAML
以获取示例。
Habitat安装
^^^^^^^^^^^^^^^^^^^^
按照官方指南进行完整安装,包括habitat_baselines
:
https://github.com/facebookresearch/habitat-lab/#installation
然后你可以按照以下链接下载交互式数据集:
https://github.com/facebookresearch/habitat-lab#data
https://github.com/facebookresearch/habitat-lab#task-datasets
如果你需要下载其他数据集,可以使用此工具:
https://github.com/facebookresearch/habitat-sim/blob/master/habitat_sim/utils/datasets_download.py
Habitat基本用法
^^^^^^^^^^^^^^^^^^^^^^
创建Habitat
环境时,你需要传递一个包装器名称和两个YAML文件:Habitat(wrapper, config_file, base_config_file)
。
-
包装器必须是
<MUSHROOM_RL PATH>/mushroom-rl/environments/habitat_env.py
中定义的之一, 负责将动作和观察转换为类似gym的格式。如果你的任务/机器人需要, 你可能需要定义新的包装器。 -
YAML文件定义了所有细节:Habitat环境、场景、 机器人可用的传感器、奖励、动作离散化以及你可能需要的任何 额外信息。第二个YAML文件是可选的,用于覆盖第一个YAML中已定义的内容。
如果你使用来自
habitat-lab
的YAML,请检查它们是否为BASE_TASK_CONFIG_PATH
定义了YAML。如果有,你需要将其作为base_config_file
传递给Habitat()
。事实上,habitat-lab
YAML使用相对路径,从其根文件夹外部调用它们将导致错误。 -
如果你使用数据集,请确保YAML文件中定义的路径正确, 特别是如果你使用相对路径。
habitat-lab
YAML使用相对路径,所以 要注意这一点。默认情况下,YAML文件中定义的路径将相对于 你启动Python代码的位置。如果你的data
文件夹在其他地方, 你也可以创建一个符号链接。
重排任务示例 ^^^^^^^^^^^^^^^^^^^^^^
- 下载ReplicaCAD数据集(
--data-path data
将它们下载到你启动代码的文件夹中)
.. code:: shell
python -m habitat_sim.utils.datasets_download --uids replica_cad_dataset --data-path data
- 对于此任务,我们使用
<HABITAT_LAB PATH>/habitat_baselines/config/rearrange/rl_pick.yaml
。 这个YAML定义了BASE_TASK_CONFIG_PATH: configs/tasks/rearrange/pick.yaml
, 由于这是一个相对路径,我们需要通过将其绝对路径作为base_config_file
参数传递给Habitat()
来覆盖它。 - 然后,
pick.yaml
定义了相对于<HABITAT_LAB PATH>
要使用的数据集。 如果你在之前的下载命令中没有使用--data-path
参数, ReplicaCAD数据集现在位于<HABITAT_LAB PATH>/data
中,你需要创建一个链接指向它
.. code:: shell
ln -s <HABITAT_LAB PATH>/data/ <MUSHROOM_RL PATH>/mushroom-rl/examples/habitat
- 最后,你可以运行
python habitat_rearrange_sac.py
。
导航任务示例 ^^^^^^^^^^^^^^^^^^^^^^^
-
下载并解压Replica场景
警告!该数据集非常大!
.. code:: shell
sudo apt-get install pigz
git clone https://github.com/facebookresearch/Replica-Dataset.git
cd Replica-Dataset
./download.sh replica-path
-
对于这个任务,我们只使用自定义YAML文件
pointnav_apartment-0.yaml
。 -
DATA_PATH: "replica_{split}_apartment-0.json.gz"
定义了包含一些场景细节的JSON文件, 比如智能体的初始位置和方向。{split}
值在SPLIT
键中定义。如果你想尝试新的位置,你可以从场景的可导航点集合中采样。 在初始化
habitat
环境后,例如mdp = Habitat(...)
, 运行mdp.env._env._sim.sample_navigable_point()
。 -
SCENES_DIR: "Replica-Dataset/replica-path/apartment_0"
定义了场景。 如前所述,这个路径是相对于你运行脚本的位置,因此我们需要链接Replica文件夹。 如果你从示例文件夹运行habitat_nav_dqn.py
,请运行
.. code:: shell
ln -s <PATH TO>/Replica-Dataset/ <MUSHROOM_RL PATH>/mushroom-rl/examples/habitat
- 最后,你可以运行
python habitat_nav_dqn.py
。
可编辑安装
你也可以通过以下方式进行本地可编辑安装:
.. code:: shell
pip install --no-use-pep517 -e .
要安装可选依赖项:
.. code:: shell
pip install --no-use-pep517 -e .[all]
如何设置和运行实验
要运行实验,MushroomRL需要一个脚本文件,提供实验所需的必要信息。 请参考"examples"文件夹中的脚本,了解如何运行实验。
例如,要使用提供的示例脚本之一运行快速实验,请执行:
.. code:: shell
python3 examples/car_on_hill_fqi.py
引用MushroomRL
如果你在科学出版物中使用MushroomRL,请引用:
.. code:: bibtex
@article{JMLR:v22:18-056,
author = {Carlo D'Eramo and Davide Tateo and Andrea Bonarini and Marcello Restelli and Jan Peters},
title = {MushroomRL: Simplifying Reinforcement Learning Research},
journal = {Journal of Machine Learning Research},
year = {2021},
volume = {22},
number = {131},
pages = {1-5},
url = {http://jmlr.org/papers/v22/18-056.html}
}
如何联系我们
如有任何问题,请发送电子邮件至mushroom4rl@gmail.com。
在Twitter上关注我们 @Mushroom_RL <https://twitter.com/mushroom_rl>
_!