用新浪微博登录

只需一步,快速搞定

 找回密码
 立即注册

用新浪微博登录

只需一步,快速搞定

查看: 6443|回复: 2
打印 上一主题 下一主题

德州农工大学开源RLCard:帮你快速训练会**的智能体

[复制链接]

该用户从未签到

715

主题

2161

帖子

6439

积分

LV 11.会员

MS爱好者!!!!

积分
6439

社区居民偶尔光临工蜂最爱沙发在线达人社区平民做个有钱人略有小成常驻会员忠实会员

跳转到指定楼层
楼主
发表于 2019-10-26 19:16:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式 |          
AI 攻陷各种**游戏已经不是什么新闻,但迅速开发和测试 AI 的环境一直是困扰业界和学界的问题。最近德州农工大学数据科学实验室给出了他们的解决方案,开源了基于牌类游戏设计的强化学习 Python 平台 RLCard,其中融合了中西方最流行的几种牌类游戏(包括**、麻将、21 点、**、UNO 等),同时实现了多种强化学习算法(DQN、NFSP、CFR 等)。RLCard 致力于为强化学习提供一个易用、统一的开发和测试环境,让人们能轻松、便捷地训练测试自己的 AI。

RLCard 是一个用于牌类游戏强化学习研究的开源工具包,其接口简单易用,支持多种牌类环境。RLCard 的目标是在强化学习与非完美信息博弈之间搭建桥梁,推动强化学习研究在多智能体、高维状态和动作空间以及稀疏奖励领域的进步。作者在论文中概述了 RLCard 的关键组件,探讨了其设计原则并简要介绍了接口,还给出了对这些环境的评估。

下图 1 展示了 RLCard 的概况。每个游戏都用简单易用的接口封装成了一个环境类。RLCard 能让开发者更专注于算法开发,而无需在游戏本身上面耗费开发精力。


图 1:RLCard 概况。它支持多种风格的牌类游戏,比如**游戏、中式扑克以及棋盘游戏,使用了简单易用的接口进行封装。 该工具包的开发遵循以下设计原则:
  • 可复现。在这些环境上的结果是可以重复得到的。如果在不同的运行中使用了同样的随机种子,那么所得结果应当是一致的。
  • 易使用。在每轮游戏之后,产生的数据可被直接用于强化学习训练。开发者也可以方便地配置状态表征、动作编码、奖励设计、甚至游戏规则。
  • 可扩展。通过上述设计原则,开发者可以方便地向该工具包添加新的牌类游戏环境。该工具包中的依赖尽力做到了最少,以便能轻松地维护代码。

该工具包提供了多种风格的受大众欢迎的牌类游戏,包括**游戏、中式扑克以及一些棋盘游戏。表 1 总结了 RLCard 中的牌类游戏,并给出了每种游戏的复杂度估计。


表 1:RLCard 中的游戏总览 环境接口 接下来我们简要介绍该工具包的接口。首先是核心接口,这能让用户快速上手并接入强化学习算法。然后会介绍状态表征、动作编码以及为了实现环境**化而对它们进行的修改。之后会介绍如何通过多进程生成数据。最后会介绍单智能体接口,其通过预训练模型或基于规则的模型模拟其他玩家。 核心接口 RLCard 的开发者提供了一个 run 函数,它能直接生成游戏数据,这些数据会被组织成状态迁移(transition),即一个五元组(状态,动作,奖励,下个状态,是否完成),这些数据可直接送入强化学习算法进行训练。下面给出了用三个随机智能体运行**游戏的示例:


开发者还提供了用来更灵活访问游戏树的高级接口。与 OpenAI Gym 类似,工具包定义了一个 step 函数,其可在给定的当前动作下将环境移动到下一个状态。此外该工具包还包含一个 step_back 函数,这能回溯到前一个状态。
状态表征 状态的定义是:在游戏的一个特定时间步骤中一个玩家所能观察到的所有信息。在该工具包中,每个状态都是一个字典,包含两个值。第一个值是合法动作。第二个值是观察到的状态。编码观察的方式有很多种。对于 Blackjack(二十一点),RLCard 直接将玩家的分数和庄家的分数用作一种表征。对于工具包中的其它游戏,则是将已观察到的牌编码进多个牌平面。举个例子,在**中,策略的输入是一个包含 6 个牌平面的矩阵,包括当前的手牌、其他两位玩家的手牌的并集、最近的三个动作、所有已经打出的牌的并集。
动作编码 RLCard 将动作都编码成从 0 开始的正整数。动作与数字编码一一对应。
对于某些大型游戏,RLCard 采用了动作抽象以减小动作空间。举个例子,**就有动作空间组合爆炸的问题,其动作数量超过 3×10^4,其中任意的三张同样的牌、飞机或炸弹都可以带任何一张单牌或对子。为了减小动作空间,这个工具包仅编码了一个组合的主要部分,并使用了规则来决定要带的牌。通过这种操作,**的动作空间减小到了 309。 自定义 除了默认的状态和动作编码,RLCard 的设计还能实现状态表征、动作编码、奖励设计、甚至游戏规则的自定义。

每个游戏都使用了一个 Env 类进行封装,其中的一些关键函数可以重写以实现环境的自定义。extract_state 函数可用于将原始的游戏状态转换成表征。decode_action 函数可用于将动作索引映射到动作。用户可以通过修改这个函数来实现自己的动作抽象。get_payoffs 函数会返回玩家在游戏结束时的收益。每个游戏的上述组件都有一个默认设置。开发者也鼓励用户自定义这些设置以获得更好的表现。 每个游戏的参数也都可以调整。举个例子,用户可以通过修改 LimitholdemGame 类的 __init__ 函数来更改有限制**的玩家数量或固定加注。这样,用户就可以按需调整游戏的难度,并逐步设计算法。 并行训练 这个工具包支持使用多进程生成游戏数据。并行运行能极大加快大型环境中的训练速度。具体来说,首先会在初始化时创建多个原始环境的副本。每个子进程都会从主进程复制模型参数,并在该环境的副本中生成游戏数据,然后将数据发送到主进程。这个主进程会收集所有数据在 CPU 或是 GPU 上训练智能体。GitHub 库给出了训练多进程智能体的例子。

单智能体接口 RLCard 提供了用于探索训练单智能体牌类游戏强化学习智能体的接口。具体来说,RLCard 用预训练模型或基于规则的模型来模拟其它玩家,这样从一个玩家的视角看,游戏实质上就变成了单智能体环境。这些单智能体环境也颇具难度,因为它们有很大的状态和动作空间,而且奖励稀疏。研究者表示,未来的计划是使用不同层次的模拟模型来创建不同难度的环境。这个单智能体接口遵照了 OpenAI Gym 的格式。具体来说,在单智能体模式中,给定一个动作,step 函数会返回下一个状态、奖励以及游戏是否完成的信息。reset 函数会重置游戏并返回初始状态。常见的单智能体强化学习算法可以轻松地用于这些环境。 评估 这一节将介绍用于评估 RLCard 工具包的实验。测试中开发者主要关注的这两个问题:(1)当前比较流行的强化学习算法在这些环境中表现如何?(2)生成游戏数据需要多少计算资源? 实验使用了深度 Q 网络(DQN;Silver et al. 2016)、神经虚拟自我博弈(NFSP;Heinrich and Silver 2016)和反事实遗憾最小化(CFR;Zinkevich et al. 2008)。 评估的标准是胜率。这篇论文采用了两种实验评估方法。第一,智能体相对于随机智能体的胜率。第二,智能体间博弈。 相对于随机智能体的结果 实验观察到两个结果。第一,所有算法相对于随机智能体的结果都相近。第二,NFSP 和 DQN 在大型游戏中非常不稳定。

图 2:各智能体相对于随机智能体的表现,这里给出的是在牌类环境中的学习曲线
(二级)锦标赛结果 实验观察到,NFSP 在大多数环境中都优于 DQN。开发者还在 Leduc 扑克上比较了 CFR 与 NFSP 和 DQN。CFR 表现较好。


表 2:NFSP 和 DQN 玩 10000 局游戏的平均收益
运行时间分析 开发者也评估了环境的运行效率,具体做法是统计随机智能体自我博弈所需要的时间。具体来说,开发者测试了使用单进程和多进程进行 1 000 000 局游戏的运行时间(秒)。


表 3:使用随机智能体运行 1 000 000 局游戏的运行时间秒数,其中包含单进程和多进程。per step 列是运行时间除以所执行时间步骤数量的结果。 可以观察到,当处理器更多时,所有环境都能实现更高的吞吐量。

回复

使用道具 举报

签到天数: 1374 天

[LV.10]以坛为家III

2459

主题

1万

帖子

3万

积分

LV 15.会员

积分
34645

社区居民偶尔光临常驻会员忠实会员工蜂

沙发
发表于 2019-10-26 19:48:25 | 只看该作者
本帖最后由 klaus 于 2019-10-26 19:55 编辑

经验+3
回复 支持 反对

使用道具 举报

签到天数: 624 天

[LV.9]以坛为家II

607

主题

1万

帖子

2万

积分

LV 15.会员

深情是我担不起的重担,情话只是偶然兑现的谎言!

积分
29299

游聚十周年

QQ
板凳
发表于 2019-10-26 21:40:58 | 只看该作者
进来瞧瞧,路过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    Archiver|手机版|小黑屋|( 沪ICP备12034951号 )

GMT+8, 2024-12-22 20:43 , Processed in 0.172515 second(s), 31 queries .

© 2001-2011 Powered by Discuz! X3.1

快速回复 返回顶部 返回列表