中文文档
RLCARD是纸牌游戏中加固学习(RL)的工具包。它支持多个卡环境,并具有易于使用的接口,用于实现各种强化学习和搜索算法。 RLCARD的目标是桥接加强学习和不完美的信息游戏。 RLCARD由赖斯和德克萨斯A&M大学的数据实验室和社区贡献者开发。
社区:
消息:
以下游戏主要由社区贡献者开发和维护。谢谢你!
感谢所有贡献者!
如果您发现此仓库有用,则可以引用:
Zha,Daochen等。 “ RLCARD:纸牌游戏中加固学习的平台。” ijcai。 2020。
@inproceedings { zha2020rlcard ,
title = { RLCard: A Platform for Reinforcement Learning in Card Games } ,
author = { Zha, Daochen and Lai, Kwei-Herng and Huang, Songyi and Cao, Yuanpu and Reddy, Keerthana and Vargas, Juan and Nguyen, Alex and Wei, Ruzhe and Guo, Junyu and Hu, Xia } ,
booktitle = { IJCAI } ,
year = { 2020 }
}
确保您的Python 3.6+并安装了PIP 。我们建议使用pip
安装稳定版本的rlcard
:
pip3 install rlcard
默认安装仅包括卡环境。要使用培训算法的Pytorch实现,请运行
pip3 install rlcard[torch]
如果您在中国,上面的命令太慢,则可以使用Tsinghua University提供的镜子:
pip3 install rlcard -i https://pypi.tuna.tsinghua.edu.cn/simple
另外,您可以与最新版本一起使用(如果您在中国,而Github很慢,则可以在Gitee中使用镜子):
git clone https://github.com/datamllab/rlcard.git
或仅克隆一个分支以使其更快:
git clone -b master --single-branch --depth=1 https://github.com/datamllab/rlcard.git
然后安装
cd rlcard
pip3 install -e .
pip3 install -e .[torch]
我们还提供Conda安装方法:
conda install -c toubun rlcard
Conda安装仅提供卡环境,您需要根据需求手动安装Pytorch。
一个简短的例子如下。
import rlcard
from rlcard . agents import RandomAgent
env = rlcard . make ( 'blackjack' )
env . set_agents ([ RandomAgent ( num_actions = env . num_actions )])
print ( env . num_actions ) # 2
print ( env . num_players ) # 1
print ( env . state_shape ) # [[2]]
print ( env . action_shape ) # [None]
trajectories , payoffs = env . run ()
RLCARD可以灵活地连接到各种算法。请参阅以下示例:
运行examples/human/leduc_holdem_human.py
播放预先训练的leduc Hold'em模型。 Leduc Hold'em是德克萨斯州Hold'em的简化版本。规则可以在这里找到。
>> Leduc Hold'em pre-trained model
>> Start a new game!
>> Agent 1 chooses raise
=============== Community Card ===============
┌─────────┐
│░░░░░░░░░│
│░░░░░░░░░│
│░░░░░░░░░│
│░░░░░░░░░│
│░░░░░░░░░│
│░░░░░░░░░│
│░░░░░░░░░│
└─────────┘
=============== Your Hand ===============
┌─────────┐
│J │
│ │
│ │
│ ♥ │
│ │
│ │
│ J│
└─────────┘
=============== Chips ===============
Yours: +
Agent 1: +++
=========== Actions You Can Choose ===========
0: call, 1: raise, 2: fold
>> You choose action (integer):
我们还提供了一个轻松调试的GUI。请在这里检查。一些演示:
我们在几个方面为游戏提供了复杂的估计。 Infoset编号:信息集的数量;信息集大小:单个信息集中的平均状态数;动作大小:动作空间的大小。名称:应该传递给rlcard.make
创建游戏环境的名称。我们还提供了指向文档和随机示例的链接。
游戏 | 信息编号 | 信息尺寸 | 动作大小 | 姓名 | 用法 |
---|---|---|---|---|---|
二十一点(Wiki,Baike) | 10^3 | 10^1 | 10^0 | 二十一点 | DOC,示例 |
Leduc Hold'em(纸) | 10^2 | 10^2 | 10^0 | Leduc-Holdem | DOC,示例 |
限制德克萨斯州Hold'em(Wiki,Baike) | 10^14 | 10^3 | 10^0 | 限制 | DOC,示例 |
Dou Dizhu(Wiki,Baike) | 10^53〜10^83 | 10^23 | 10^4 | Doudizhu | DOC,示例 |
Mahjong(Wiki,Baike) | 10^121 | 10^48 | 10^2 | 马翁 | DOC,示例 |
无限制的德克萨斯州Hold'em(Wiki,Baike) | 10^162 | 10^3 | 10^4 | 无限制 | DOC,示例 |
UNO(Wiki,Baike) | 10^163 | 10^10 | 10^1 | UNO | DOC,示例 |
杜松子酒(Wiki,Baike) | 10^52 | - | - | 杜松子酒 | DOC,示例 |
桥梁(Wiki,Baike) | - | - | 桥 | DOC,示例 |
算法 | 例子 | 参考 |
---|---|---|
深蒙特卡洛(DMC) | 示例/run_dmc.py | [纸] |
深Q学习(DQN) | 示例/run_rl.py | [纸] |
神经虚拟的自我游戏(NFSP) | 示例/run_rl.py | [纸] |
反事实遗憾最小化(CFR) | 示例/run_cfr.py | [纸] |
我们提供模型动物园作为基准。
模型 | 解释 |
---|---|
leduc-holdem-cfr | Leduc Hold'em上的预训练的CFR(机会抽样)模型 |
leduc-holdem-rule-v1 | Leduc Holdem的基于规则的模型,V1 |
leduc-holdem-rule-v2 | Leduc Holdem的基于规则的模型V2 |
UNO-RULE-V1 | 基于规则的UNO模型V1 |
限制 - 固定-rule-v1 | 基于规则的限制德克萨斯州Hold'em的模型,V1 |
doudizhu-rule-v1 | Dou Dizhu的基于规则的模型,V1 |
杜松子酒 - 刺激性 - 诺维斯规则 | 杜松子酒新手规则模型 |
您可以使用以下接口来制作环境。您可以选择使用字典指定一些配置。
env_id
是环境的字符串; config
是一个词典,它指定了某些环境配置,如下所示。seed
:默认None
。设置环境局部随机种子以重现结果。allow_step_back
:默认False
。如果True
step_back
函数在树中向后遍历。game_
开头。目前,我们仅支持二十一点中的game_num_players
。一旦制作了环境,我们就可以访问游戏的一些信息。
状态是Python词典。它由观察state['obs']
,法律行动state['legal_actions']
,原始观察state['raw_obs']
和原始法律行动state['raw_legal_actions']
组成。
以下接口提供了基本用法。它易于使用,但在代理上具有假设。代理必须遵循代理模板。
agents
是Agent
对象的列表。列表的长度应等于游戏中玩家的数量。set_agents
之后使用该函数。如果is_training
为True
,它将在代理中使用step
功能来玩游戏。如果is_training
为False
,则会调用eval_step
。对于高级用法,以下接口允许在游戏树上灵活操作。这些接口没有对代理的任何假设。
action
可以是原始动作或整数;如果操作是原始操作(字符串),则raw_action
应该是True
。allow_step_back
为True
时才可用。向后一步。这可以用于在游戏树上运行的算法,例如CFR(Chance采样)。True
。 otherwise,返回False
。player_id
状态。主要模块的目的列出如下:
有关更多文档,请参阅文档以获取一般介绍。 API文档可在我们的网站上找到。
非常感谢对该项目的贡献!请为反馈/错误创建问题。如果您想撰写代码,请参阅贡献指南。如有任何疑问,请与Daochen Zha联系[email protected]。
我们要感谢JJ World Network Technology Co.,Ltd的慷慨支持和社区贡献者的所有贡献。