http://lib.csdn.net/article/aimachinelearning/68113
原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590
和其它的機器學習方向一樣,強化學習(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。
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目錄下的模型拖入視窗,會看到類似下面的輸出:
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
然後執行下readme中的例子看是否執行正常。
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等等:
通過原始碼下的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 libgcc
如果在執行依賴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 install
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/.)
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場景的話,執行:
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=""