深度強化學習框架-OpenSpiel(DeepMind開源28種DRL環境+24種DRL演算法實現)

  • 2019 年 11 月 21 日
  • 筆記

深度強化學習報道

來源:DeepMind

編輯:DeepRL

總部位於倫敦的人工智慧公司「DeepMind」在過去的一段時間,因財報出現在各個媒體的頭條,英國公司登記處的披露DeepMind從營收2017 年的 6620 萬美元增加至 2018 年的 1.251 億美元,但凈虧損也由 2017年的 3.41 億美元增加至 2018 年的 5.72 億美元。此外,DeepMind 今年的到期債務高達 12.656 億美元,其中包括需要向 Alphabet償付的 10.746 億美元債務。

在Alphabet大額資金支援下,DeepMind一直以實現AGI為為目標的公司在各個領域不斷的嘗試,做出了很多基礎研究。其中最為出名的當屬在強化學習方面的探索,從2013年的Atari遊戲到AlphaGo的橫空出世,再到終極AlphaZero的實現,完成了一次次巨大的挑戰,但一個完善的環境對強化學習的發展來說是非常重要的,而DeepMind就擁有這樣一個殺手鐧。

最近DeepMind開源了由27位作者共同完成的史上最全強化學習框架《OpenSpiel》:

Paper地址:

https://arxiv.org/pdf/1908.09453.pdf

在這個論文框架中總共實現了28款研究強化學習的棋牌類遊戲24個強化學習演算法

在演算法部分包含了基本演算法,搜索演算法、優化方法以及單智慧體和多智慧體,具體的設計和API如下:

此外,還包括用於分析學習動態和其他常見評估指標的工具

可視化及評估

OpenSpiel中提到的所有工具和評估都包含在程式碼庫的egt子目錄下。

<1>、相圖

演化和策略學習動力學的可視化在多智慧體強化學習的文獻中經常使用,它顯示了描述特定動力學下策略局部變化的矢量場或粒子軌跡。下面展示了OpenSpiel為四種常見的bimatrix遊戲生成的相圖。例如,考慮對稱遊戲中眾所周知的單人口複製器動態,其中每個玩家都遵循以下描述的學習動態:

<2>、α-Rank

利用進化博弈論對多人遊戲中的智慧體進行交互排名。α-Rank定義了馬爾可夫轉移矩陣,其狀態對應於玩家使用的智慧體的元組,以及通過特定的進化模型通知的轉換。該進化模型確定了排名與博弈論中馬爾可夫-康利鏈解決方案概念的對應關係。

更關鍵的是,OpenSpiel適用人群也非常廣泛。它的核心API和遊戲用C++實現,並提供了Python API,可用於更高級別的機器學習,優化和強化學習。這些語言也可以很容易地組合在一起。而且,程式碼的一個子集也已經使用Swift for Tensorflow直接移植到了Swift進行學習和推理,不需要跨語言操作。開源消息放出後不久,就在Twitter上引起了數百轉發和點贊

目前程式碼支援Debian和Ubuntu兩個系統。

GitHub:

https://github.com/deepmind/open_spiel

1、安裝環境

#獲取源程式碼  sudo apt-get install git  git clone https://github.com/deepmind/open_spiel.git    cd open_spiel  ./install.sh # Install various dependencies (note: assumes Debian-based distro!)  pip3 install --upgrade -r requirements.txt # Install Python dependencies    #編譯過程  mkdir build  cd build  # Note: Python version installed should be >= Python_TARGET_VERSION specified here  CXX=g++ cmake -DPython_TARGET_VERSION=3.6 -DCMAKE_CXX_COMPILER=g++ ../open_spiel  make -j12 # The 12 here is the number of parallel processes used to build  ctest -j12 # Run the tests to verify that the installation succeeded  

2、設置環境變數

# For the Python modules in open_spiel.  export PYTHONPATH=$PYTHONPATH:/<path_to_open_spiel>  # For the Python bindings of Pyspiel  export PYTHONPATH=$PYTHONPATH:/<path_to_open_spiel>/build/python  

3、運行實例

examples/example  

4、Demo程式碼實例

import random  # 引入包文件  import pyspiel    game = pyspiel.load_game("kuhn_poker")  state = game.new_initial_state()  while not state.is_terminal():    legal_actions = state.legal_actions()    if state.is_chance_node():      # Sample a chance event outcome.      outcomes_with_probs = state.chance_outcomes()      action_list, prob_list = zip(*outcomes_with_probs)      action = np.random.choice(action_list, p=prob_list)      state.apply_action(action)    else:      # The algorithm can pick an action based on an observation (fully observable      # games) or an information state (information available for that player)      # We arbitrarily select the first available action as an example.      action = legal_actions[0]      state.apply_action(action)  

5、程式碼結構

6、Github倉庫文件結構

OpenSpiel優勢

OpenSpiel提供了一個帶有C++基礎的通用API ,它通過Python綁定(經由pybind11)公開。遊戲用C++編寫,是因為可以用快速和記憶體效率更高的方法實現基本演算法。一些自定義RL環境也會在Python中實現。最重要的是,OpenSpiel的設計易於安裝和使用、易於理解、易於擴展並且通用。OpenSpiel按照以下兩個重要設計標準構建: #1、簡單。程式碼應該是非程式語言專家可讀、可用、可擴展的,特別是來自不同領域的研究人員。OpenSpiel提供了用於學習和原型化的參考實現,而不是需要額外假設(縮小範圍)或高級(或低級)語言特性的完全優化或高性能程式碼。 #2、輕量。對於長期兼容、維護和易用性,依賴項可能會有問題。除非有充分的理由,否則傾向於避免引入依賴關係來保持隨身性和易於安裝。

GitHub倉庫

https://github.com/NeuronDance/DeepRL