PokerRL

GitHub
514 106 较难 1 次阅读 1周前MIT插件开发框架其他
AI 解读 由 AI 自动生成,仅供参考

PokerRL 是一个专为扑克游戏设计的多智能体深度强化学习框架,旨在帮助开发者和研究人员高效训练能在不完美信息博弈中做出最优决策的 AI。传统算法往往需要遍历庞大的游戏树,计算成本极高且难以扩展;PokerRL 则通过结合神经网络与反事实遗憾最小化(CFR)等先进算法,让 AI 仅需访问部分游戏状态即可学习到近似纳什均衡策略,从而大幅降低计算门槛。

该工具特别适合从事博弈论研究、强化学习算法开发的专业人员使用。其核心亮点在于灵活的架构设计:不仅内置了最佳响应(BR)、局部最佳响应(LBR)等多种专业评估指标,还原生支持基于 Ray 的分布式计算。这意味着用户可以用同一套代码,轻松地在本地笔记本、多核服务器乃至 AWS 集群上扩展训练规模,有效解决了深度学习在大型博弈游戏中查询神经网络开销大的性能瓶颈。此外,PokerRL 还提供了便捷的对抗测试环境,支持 AI 之间自动锦标赛或与人类玩家互动,是探索不完美信息博弈解决方案的强大利器。

使用场景

某 AI 实验室团队正致力于研发能够击败人类职业选手的德州扑克机器人,需要在不完全信息博弈中寻找近似纳什均衡策略。

没有 PokerRL 时

  • 算法验证周期漫长:团队需手动集成深度学习模型与传统 CFR 算法,每次尝试新架构(如 Deep CFR 或 NFSP)都要重写大量底层代码,耗时数周。
  • 难以评估真实强度:缺乏统一的评估框架,无法快速计算“最佳响应(Best Response)”或进行大规模“头对头(H2H)”对抗测试,只能凭感觉判断策略优劣。
  • 算力扩展极其困难:现有代码仅能单机运行,面对庞大的游戏树状态空间,无法利用集群分布式加速,训练一个完整模型往往需要数月时间。
  • 复现前沿研究受阻:论文中的先进算法缺乏标准实现,研究人员需从零复现逻辑,极易引入误差且难以对比性能基线。

使用 PokerRL 后

  • 算法迭代效率倍增:借助预置的训练配置文件(TrainingProfile),团队可在几小时内切换并运行 Deep CFR、RPG 等不同算法架构,专注策略优化而非工程搭建。
  • 量化评估精准可靠:直接调用内置的 LBR、RL-BR 及 AgentTournament 模块,定期自动生成可量化的剥削性指标和对抗胜率,清晰定位策略弱点。
  • 无缝分布式训练:通过封装 Ray 框架,同一套代码可轻松从本地调试平滑迁移至 AWS CPU/GPU 集群,将原本数月的训练任务压缩至数天完成。
  • 基线对比一目了然:内置 vanilla CFR、CFR+ 等经典算法作为基准,支持直接将新模型的性能数据可视化至 TensorBoard,快速验证改进效果。

PokerRL 通过标准化多智能体强化学习流程与弹性分布式架构,将扑克 AI 的研发重心从繁琐的工程实现彻底转向了核心策略的创新。

运行环境要求

操作系统
  • Linux
  • Windows
  • macOS
GPU

未说明(支持 CPU 集群,可选 GPU 工作节点)

内存

未说明

依赖
notes本地运行支持跨平台,但分布式运行仅限 Linux。必须安装 Docker 以运行 PyCrayon (TensorBoard) 日志服务器。分布式模式需安装 'PokerRL[distributed]'。由于 PyTorch 0.4.1 的已知问题,多核运行时需设置环境变量 OMP_NUM_THREADS=1。部分功能依赖预编译的 C++ 二进制文件 (.dll/.so)。
python3.6
pytorch==0.4.1
ray
requests
PyCrayon
Docker
PokerRL hero image

快速开始

PokerRL

用于扑克游戏中多智能体深度强化学习的框架。

背景

长期以来,解决不完美信息博弈的研究主要集中在遍历完整博弈树的方法上,直到最近才有所突破(参见 [0], [1], [2], 等文献)。 近年来,一些新算法如神经虚构自我对弈(NFSP) [3], 遗憾策略梯度(RPG)[4], 深度反事实遗憾最小化(Deep CFR)[5], 以及单次深度CFR[8] 将深度(强化)学习与传统的CFR和虚构对弈等方法相结合,在仅访问博弈状态的一小部分的情况下,学习近似的纳什均衡。

PokerRL 框架

PokerRL 算法的组成部分

框架 您的算法由相互交互的工作者(绿色)组成。训练运行的参数通过一个 TrainingProfile 实例传递(.../rl/base_cls/TrainingProfileBase)。 常见的指标,如最佳响应或人机对战表现,可以由独立的工作者(红色)定期测量。您训练好的智能体被封装在 EvalAgent 中(.../rl/base_cls/EvalAgentBase)。 您的 EvalAgent 可以在 AgentTournament 中与其他 AI 对战(.../game/AgentTournament),也可以在 InteractiveGame 中与人类玩家对战(.../game/InteractiveGame)。所有本地工作者(仅为类)只需约 4 行代码即可包装成独立的分布式工作者。

PokerRL 的某些部分仅适用于两人游戏,因为在其他场景下没有意义。然而,游戏引擎本身和智能体模块则适用于 N>1 名玩家的通用场景。

算法评估

我们提供了四种指标来评估算法:

  • 最佳响应(BR) - 计算精确的可利用性(适用于小型游戏)。
  • 局部最佳响应(LBR)[7] 近似 BR 的下界。
  • 强化学习最佳响应(RL-BR) 通过训练 DDQN [9] 对抗该 AI 来近似 BR。
  • 人机对战(H2H) - 让智能体的两种模式相互对战。

我们当前的最佳响应实现仅适用于小型游戏,而 LBR 和 QBR 则针对(非常)大型游戏的分布式计算进行了优化。作为小型游戏中的基准比较,我们还提供了未优化的 vanilla CFR [10], CFR+ [11] 和线性 CFR [12] 实现,这些实现可以像深度强化学习智能体一样运行,并将它们的可利用性绘制成 TensorBoard 图表。

性能与可扩展性

过去的一些算法主要受博弈树计算性能的限制,而基于采样的方法则主要消耗在查询神经网络上的开销。PokerRL 提供了一个强化学习环境和框架,基于此框架可以构建和运行基于深度学习的算法来解决扑克游戏。PokerRL 提供了 ray [6] 的封装,使同一份代码可以在本地、多核机器上,甚至在包含 CPU 和可能 GPU 的集群上运行。

安装

本指南将指导您在本地机器上安装并运行 PokerRL, 并说明如何将您在本地开发和测试的代码无缝部署到 AWS 集群上。

先决条件

该代码库在本地运行时与操作系统无关,但在分布式运行时仅支持 Linux,这是由于 ray 的限制所致。

本地机器上的安装

首先,请安装 Anaconda/Miniconda 和 Docker。然后运行以下命令(必要时请填写具体信息):

conda create -n CHOOSE_A_NAME python=3.6 -y
source activate THE_NAME_YOU_CHOSE
pip install requests
conda install pytorch=0.4.1 -c pytorch

接着:

pip install PokerRL

注意:进行分布式运行时需要 Linux 系统,并且需执行 pip install PokerRL[distributed]。如果仅在本地使用,则无需此步骤。

该框架使用 PyCrayon,它是 Tensorboard 的语言无关封装。请按照其 GitHub 页面上的说明进行设置。安装 PyCrayon 后,可以通过以下命令运行并启动日志服务器:

docker run -d -p 8888:8888 -p 8889:8889 --name crayon alband/crayon
docker start crayon

现在您可以在浏览器中访问 localhost:8888 查看 TensorBoard。

运行一些测试

在包含 PokerRL 的目录中运行以下命令,以检查所有单元测试是否通过:

python -m unittest discover PokerRL/test

另一种更有趣的方式来测试您的安装是否成功,是运行 examples/interactive_user_v_user.py 与自己玩扑克,以及 examples/run_cfrp_example.py 在一个小规模扑克游戏中训练一个 CFR+ 智能体。

云与集群

PokerRL 提供了一个接口,允许完全相同的代码在本地和集群上运行,这得益于 ray 的支持。PokerRL 支持两种模式:

  1. 分布式:在一台具有多核的机器上运行多个工作进程
  2. 集群:在多台机器上运行多个工作进程

您可以通过切换 TrainingProfile 中的一个布尔值来启用或禁用分布式和集群模式。本节假设您使用通过 pip 安装的 PokerRL 版本来开发算法。

与分布式 PokerRL 兼容的算法示例包括这个 神经虚构自我对弈的实现 [8]。 以及这个 单次深度CFR的实现 [3]

在 AWS 实例上使用本地或分布式模式

  1. 通过管理控制台启动一个符合您需求的 AWS 实例。本教程假设您的基础 AMI 是“Amazon Linux 2 AMI (HVM), SSD Volume Type”。注意:为了能够查看日志,务必在安全组中添加以下规则:

    自定义 TCP 规则   |   TCP   |   8888   |   您的 IP   |   TensorBoard
    
  2. 在实例上运行以下命令:

    sudo yum update -y
    sudo yum install git gcc g++ polkit -y
    sudo amazon-linux-extras install docker -y
    sudo service docker start
    sudo docker pull alband/crayon 
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh -b -p /home/ec2-user/miniconda
    export PATH=/home/ec2-user/miniconda/bin:$PATH
    conda create -n PokerAI python=3.6 -y
    source activate PokerAI
    pip install requests
    conda install pytorch=0.4.1 -c pytorch -y
    pip install PokerRL[distributed]
    
  3. 授予您的实例访问代码库的权限,以便后续可以执行 git pull

  4. 创建一个 AMI(即实例镜像),以便将来无需重复上述步骤。

  5. 每次使用您的 AMI 启动新实例时,请执行以下命令:

    sudo service docker start
    sudo docker inspect -f {{.State.Running}} crayon || sudo docker run -d -p 8888:8888 -p 8889:8889 --name crayon alband/crayon
    sudo docker start crayon
    
    screen
    export OMP_NUM_THREADS=1
    export PATH=/home/ec2-user/miniconda/bin:$PATH
    source activate PokerAI
    source deactivate
    source activate PokerAI
    

    必须设置 OMP_NUM_THREADS=1,因为 PyTorch 0.4.1 存在一个忽略核心/进程限制的 bug。该问题在 PyTorch 1.0 中已修复,但在许多情况下,1.0 对于循环神经网络的性能反而不如 0.4.1。

  6. 启动任何算法运行的常规语法应为:

    cd PATH/TO/PROJECT
    git pull
    python YOUR_SCRIPT.py
    
  7. 在本地浏览器中,请访问 AWS_INSTANCE_PUBLIC_IP:8888 查看日志和结果。

在集群上部署

从分布式模式切换到集群模式仅需按照 ray 的文档进行相应更改。准备好集群配置文件(.yaml)并完成 AWS 账户设置后,在 TrainingProfile 中启用 cluster 选项,并通过命令行使用 ray 启动集群即可。

备注

提供一个可选的调试工具,可在小型游戏中绘制包含智能体策略的完整博弈树。该工具的代码由 Sebastian De Ro 编写,可从此处下载。安装方法是将 PokerViz 文件夹直接拖放到 Windows 系统的 C:/ 盘或 Linux 系统的主目录下。PokerRL 将检测到该工具已安装,并在对小型游戏运行最佳回应时导出可视化结果。要查看博弈树,进入 data 目录,将您想查看的树文件重命名为 data.js,然后打开 index.html 即可。

请注意,Python 代码会导入从 C++ 导出至 .dll 和 .so 文件的小型功能模块,分别适用于 Windows 和 Linux 系统。本仓库仅包含这些二进制文件。

引用

如果您在研究中使用了 PokerRL,可以按以下方式引用:

@misc{steinberger2019pokerrl,
    author = {Eric Steinberger},
    title = {PokerRL},
    year = {2019},
    publisher = {GitHub},
    journal = {GitHub repository},
    howpublished = {\url{https://github.com/TinkeringCode/PokerRL}},
}

作者

  • Eric Steinberger

许可证

本项目采用 MIT 许可证授权——详情请参阅 LICENSE 文件。

致谢

感谢 Alexander Mandt 帮助我们在由 64 个工作节点组成的本地集群上成功运行 ray,同时也感谢 HTL Spengergasse 提供了该集群。Sebastian De Ro 开发了一款博弈树可视化工具链接,我们将其集成到了 PokerRL 中,并用于我们用 C++ 编写的批处理扑克牌手评估器。

参考文献

[0] Zinkevich, Martin, et al. “不完全信息博弈中的后悔最小化。” 神经信息处理系统进展。2008年。

[1] Tammelin, Oskari, et al. “解决无限注德州扑克单挑赛。” IJCAI.dc 2015。

[2] Lanctot, Marc, et al. “蒙特卡洛采样在扩展式博弈中用于后悔最小化。” 神经信息处理系统进展。2009年。

[3] Heinrich, Johannes, and David Silver. “不完全信息博弈中的自我对弈深度强化学习。” arXiv 预印本 arXiv:1603.01121 (2016)。

[4] Srinivasan, Sriram, et al. “部分可观测多智能体环境中的演员-评论家策略优化。” 神经信息处理系统进展。2018年。

[5] Brown, Noam, et al. “深度反事实后悔最小化。” arXiv 预印本 arXiv:1811.00164 (2018)。

[6] https://github.com/ray-project/ray

[7] Lisy, Viliam, and Michael Bowling. “当前无限制扑克机器人均衡近似质量分析。” arXiv 预印本 arXiv:1612.07547 (2016)。

[8] Steinberger, Eric. “单一深度反事实后悔最小化。” arXiv 预印本 arXiv:1901.07621 (2019)。

[9] Wang, Ziyu, et al. “用于深度强化学习的决斗网络架构。” arXiv 预印本 arXiv:1511.06581 (2015)。

[10] Zinkevich, Martin, et al. “不完全信息博弈中的后悔最小化。” 神经信息处理系统进展。2008年。

[11] Tammelin, Oskari. “利用 CFR+ 解决不完全信息大型博弈。” arXiv 预印本 arXiv:1407.5042 (2014)。

[12] Brown, Noam, and Tuomas Sandholm. “通过折现后悔最小化解决不完全信息博弈。” arXiv 预印本 arXiv:1809.04040 (2018)。

版本历史

0.0.32019/04/21
0.0.22019/03/14
0.0.12019/02/25

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.6k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|昨天
Agent插件

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像