原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590css
和其它的機器學習方向同樣,強化學習(Reinforcement Learning)也有一些經典的實驗場景,像Mountain-Car,Cart-Pole等。話說好久之前,由於沒有統一的開發測試平臺,你們都會本身實現,有用C/C++的,有用Python,還有用Matlab的。因此你們論文中看到的場景雖然類似,但不少時候不徹底同樣。這樣一方面從新造輪子,另外一方面還有可能由於實驗環境的差異影響結果的比較。因而後面你們漸漸開始創建統一的實驗平臺,另外一方面,因爲近年來深度強化學習(Deep Reinforcement Learning)的興起,各類新的更復雜的實驗場景也在不斷涌現。因而出現了OpenAI Gym,MuJoCo,rllab, DeepMind Lab, TORCS, PySC2等一系列優秀的平臺。你會在大量的強化學習相關論文中看到它們的身影。下面就簡單介紹下這些平臺在Ubuntu下的搭建過程。關於一些基礎環境(如Cuda, Anaconda, TensorFlow)的搭建可參考前面的文章:http://blog.csdn.net/jinzhuojun/article/details/77140806。html
MuJoCo
MuJoCo(Multi-Joint dynamics with Contact)是一個物理模擬器,能夠用於機器人控制優化等研究。官方網站爲http://www.mujoco.org/index.html。最新版本爲1.50。下載地址爲https://www.roboti.us/index.html。若是是Linux系統能夠點mjpro150 linux。下載完成後解壓到~/.mujoco下。注意要用是須要license的,能夠在https://www.roboti.us/license.html上申請試用版30天免費license。先下載網站上提供的getid_linux,加執行權限在本地運行獲得機器id連同其它信息填到申請頁面,提交後會收到郵件包含key文件mjkey.txt。下載key文件後,放到~/.mujoco目錄下。以後能夠運行解壓目錄下bin裏的simulate試下是否正常(須要將key文件也拷到simulate同級目錄)。運行後將model目錄下的模型拖入窗口,會看到相似下面的輸出:node
OpenAI對MuJoCo引擎作了Python 3的binding-mujoco-py,源碼位於https://github.com/openai/mujoco-py。按readme中你能夠經過下面命令安裝:
pip3 install -U 'mujoco-py<1.50.2,>=1.50.1'
若是安裝過程當中出現下面這種錯誤:
sh: 2: Syntax error: "(" unexpected
ERROR: Invalid activation key
你能夠下載源碼安裝:
git clone https://github.com/openai/mujoco-py
cd mujoco-py
pip install -e . --no-cache
若是在後面有其它項目依賴到更高版本(如1.50.1),能夠從官方release頁面下載源碼包(https://github.com/openai/mujoco-py/releases),而後用上面方法安裝便可。而後運行下readme中的例子看是否運行正常。python
OpenAI Gym
OpenAI Gym是OpenAI出的研究強化學習算法的toolkit,它裏邊cover的場景很是多,從經典的Cart-Pole, Mountain-Car到Atar,Go,MuJoCo都有。官方網站爲https://gym.openai.com/,源碼位於https://github.com/openai/gym,它的readme提供了安裝和運行示例,按其中的安裝方法:
最小安裝:
git clone https://github.com/openai/gym.git
cd gym
pip install -e .
徹底安裝:
apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig Pillow libglfw3-dev
pip install -e '.[all]'
而後能夠跑readme中的例子,如SpaceInvaders, Go, LunarLander, CarPole, MuJoCo等等:linux
經過源碼下的examples/scripts/list_envs能夠列出全部支持的場景。
若是裝了Anaconda,過程當中出現下面錯誤的話:
OSError: /home/jzj/anaconda2/envs/py35/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/jzj/anaconda2/envs/py35/lib/python3.5/site-packages/atari_py/ale_interface/build/libale_c.so)
能夠經過在Anaconda環境中安裝libgcc解決:
conda install libgccc++
若是在運行依賴Box2d引擎的sample時出現下面錯誤:
AttributeError: module 'Box2D._Box2D' has no attribute 'RAND_LIMIT'
能夠先uninstall已有版本(若有),而後安裝pybox2d:
pip uninstall Box2D-kengz
git clone https://github.com/pybox2d/pybox2d.git
cd pybox2d
python setup.py clean
python setup.py installgit
Gym中也能夠經過mujoco-py集成MuJoCo。若是出現下面錯誤,說明mujoco-py版本不對。目前Gym中支持MuJoCo 1.31和mujoco-py 0.5。按前面說明裝上相應版本後便可。
DependencyNotInstalled: No module named 'mujoco_py.mjlib'. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)github
rllab
和OpenAI Gym相似,rllab也是一個研究強化學習算法的框架。官方網站爲https://github.com/openai/rllab。官方支持python 3.5+,基於Theano。與OpenAI Gym的區別在於OpenAI Gym支持更普遍的環境,且提供在線的scoreboard能夠用於共享訓練結果。rllab本身也提供一個基於pygame的可視環境,同時它也可兼容OpenAI Gym。除此以外,它提供了一些強化學習算法的實現,這些參考實現和一些組件可使得強化學習算法的開發更快上手。安裝步驟可按照官方網站:https://rllab.readthedocs.io/en/latest/user/installation.html。
export PYTHONPATH=path_to_rllab:$PYTHONPATH
./scripts/setup_linux.sh
若是要想要在rllab中用MuJoCo的話再用下面腳本安裝。
./scripts/setup_mujoco.sh
rllab使用的是mujoco 1.31版本,這個腳本里會讓指定相應的mujoco包和license key文件。以上安裝腳本中會建立Anaconda環境,名爲rllab3。經過下面命令進入環境:
source activate rllab3算法
而後就能夠運行例子了。好比用TRPO算法訓練Cart-Pole場景的話,運行:api
python examples/trpo_gym_cartpole.py
這些sample中默認是無UI的,若是要有UI,能夠搜索其中的plot=True,將之反註釋便可。
若是你很和我同樣窮,用的是貧民版GPU,加速時分不出memory的話:
RuntimeError: Cuda error: kernel_reduce_ccontig_node_m28488bfe450723ef20f18edd8e611eb0_0: out of memory. (grid: 1 x 1; block: 256 x 1 x 1)
能夠退一步讓Theano用純CPU跑:
export THEANO_FLAGS=device=cpu
DeepMind Lab
DeepMind Lab(原Labyrinth)是由DeepMind發佈的3D迷宮場景強化學習平臺。以前是DeepMind內部使用的,後來開源了。官方介紹https://deepmind.com/blog/open-sourcing-deepmind-lab/。論文 https://arxiv.org/pdf/1612.03801.pdf。源碼位於https://github.com/deepmind/lab。
最好在Python 2.7環境下編譯運行。好比用Anaconda建立Python 2.7環境並進入:
conda create --name py27 python=2.7
source activate py27
而後按官方readme中的說明(https://github.com/deepmind/lab/blob/master/docs/build.md)安裝。因爲編譯是基於bazel,因此須要先安裝bazel。
sudo apt-get install lua5.1 liblua5.1-0-dev libffi-dev gettext freeglut3-dev libsdl2-dev libosmesa6-dev python-dev python-numpy realpath
git clone https://github.com/deepmind/lab
cd lab
bazel build :deepmind_lab.so --define headless=glx
bazel run :python_module_test --define headless=glx
若是在Anaconda環境中,有可能碰到下面錯誤:
ImportError: cannot import name multiarray
表面上是缺乏numpy,能夠先看下numpy有沒有裝,沒有的話能夠用conda install numpy安裝。若是裝了有多是串到~/.local或者/usr/lib/下的python package了(能夠經過python -c "import sys; from pprint import pprint as p; p(sys.path)"檢查)。簡單點的方法就是將除了Anaconda環境下的numpy刪除。
sudo apt-get remove python-numpy
sudo ~/.local/bin/pip2.7 uninstall numpy
接下來,按readme說明,經過下面命令能夠分別跑agent玩家和人類玩家的迷宮場景:
bazel run :random_agent --define headless=false -- --length=10000 --width=640 --height=480
bazel run :game -- --level_script tests/demo_map
而後經過python api(https://github.com/deepmind/lab/blob/master/docs/python_api.md)就可讓強化學習算法利用該環境進行訓練了。
TORCS
TORCS(The Open Racing Car Simulator)是一個跨平臺的賽車遊戲模擬器,也可做爲強化學習的研究平臺。官方網站:http://torcs.sourceforge.net/。但咱們不需直接從官網下。gym_torcs是一個TORCS的強化學習環境,提供相似前面OpenAI Gym的接口,網站爲https://github.com/ugo-nama-kun/gym_torcs。
假設已安裝了上面提到的OpenAI Gym。還須要安裝依賴:
sudo apt-get install xautomation
官方聲明依賴Python 3.5,那就進入Python 3的環境(假設已建立Python 3.5的Anaconda環境py35):
source activate py35
而後用conda install numpy安裝numpy。
下載源碼:
git clone https://github.com/ugo-nama-kun/gym_torcs.git
而後進入其vtorcs-RL-color子目錄,按其中readme編譯安裝定製版torcs。安裝完了運行torcs命令就能看到界面了。注意按readme說明須要進行一些設置,如賽道以及分辨率,由於實現中只支持64x64分辨率。運行示例代碼能夠跑一個隨機選取動做的agent。
python example_experiment.py
ps:截圖仍是用了默認分辨率,由於64x64過小看不清。
Readme中的Simple How-To示例瞭如何在Python中與該環境交互,而後就能夠開發測試強化學習算法了。網上有個實現DDPG算法的例子能夠參考:https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html
PySC2(StarCraft II)
DeepMind的AlphaGo把圍棋搞定以後,業界開始把目光投向即時策略遊戲,如StarCraft II(星際爭霸II)。最近DeepMind和Blizzard合做出了個StarCraft II的研究平臺,稱爲PySC2。介紹網站:https://deepmind.com/blog/deepmind-and-blizzard-open-starcraft-ii-ai-research-environment/。論文:https://deepmind.com/documents/110/sc2le.pdf。PySC2是基於Blizzard的StarCraft II Machine Learning API(https://github.com/Blizzard/s2client-proto)的Python下強化學習環境。源碼位於:https://github.com/deepmind/pysc2 。
按照readme最簡單的安裝方法就是:
pip install pysc2
而後須要根據https://github.com/Blizzard/s2client-proto中readme說明安裝StarCraft II的環境。主要那幾個包都比較大,下載要些時間,下載完成後按readme中解壓到指定path下便可。而後就能夠測試下了。按readme用如下命令能夠分別起agent玩家和人類玩家的環境:
python -m pysc2.bin.agent --map Simple64
python -m pysc2.bin.play --map Simple64
OpenAI Baselines
嚴格來講它自己不是一個開發環境。它是OpenAI出的一些深度強化學習算法(DQN, PPO, TRPO, DDPG)的實現,基於TensorFlow和OpenAI Gym,最新版須要Python 3。源碼位於:https://github.com/openai/baselines。
按readme中使用下面命令安裝:
pip install baselines
或者用源碼中的setup.py安裝:
git clone https://github.com/openai/baselines
cd baselines
python setup.py install
除了列出來的依賴,還可能依賴下面的庫,使用conda或pip安裝:
conda install Pillow atari-py
另外若是用GPU加速但不幸碰到memory分不出的狀況(CUDA_OUT_OF_MEMORY),能夠強制TensorFlow使用CPU:
export CUDA_VISIBLE_DEVICES=""