深度强化学习框架-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