neuron_poker

GitHub
715 196 较难 1 次阅读 4天前MIT开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

Neuron Poker 是一个专为德州扑克设计的开源人工智能训练环境,基于 OpenAI Gym 构建。它旨在解决如何让机器通过自我对弈学习复杂扑克策略的难题,为开发者提供了一个完整的实验平台,用于训练和测试各类扑克 AI 代理。

该项目非常适合人工智能研究人员、强化学习开发者以及扑克算法爱好者使用。用户不仅可以运行内置的随机玩家或基于规则的策略模型,还能利用键盘实时操控玩家进行观察,甚至部署基于 Keras-RL 的深度 Q 网络(DQN)智能体进行端到端的强化学习训练。

Neuron Poker 的核心技术亮点在于其高效的胜率计算能力。项目集成了蒙特卡洛模拟算法,并特别提供了 C++ 版本实现,相比纯 Python 版本速度提升约 500 倍,显著加速了训练过程。此外,它还支持遗传算法优化策略阈值、虚拟图形渲染复盘以及对局数据可视化分析。无论是想探索博弈论算法,还是希望协作开发更强的扑克机器人,Neuron Poker 都提供了灵活且专业的底层支持。

使用场景

某量化团队正在研发一套基于深度强化学习的德州扑克自动交易策略,需要在一个高保真且可量化的环境中训练智能体。

没有 neuron_poker 时

  • 环境搭建困难:开发者需从零编写德州扑克规则引擎和状态空间定义,极易出现逻辑漏洞且无法兼容 OpenAI Gym 标准接口。
  • 胜率计算缓慢:使用纯 Python 进行蒙特卡洛模拟来计算底池权益(Equity),单次决策耗时过长,导致模型训练效率极低。
  • 策略验证黑盒:缺乏可视化渲染功能,难以直观观察智能体在牌局中的具体决策过程,调试全靠打印日志,排查问题如同“盲人摸象”。
  • 基线对比缺失:缺少内置的随机玩家、固定阈值策略等基准对手,难以科学评估新算法的真实进化程度。

使用 neuron_poker 后

  • 即插即用环境:直接调用 neuron_poker 提供的标准化 Gym 环境,内置完整的德州扑克规则与状态观测字典,让团队能立即聚焦于算法本身。
  • 高性能权益计算:切换至 neuron_poker 集成的 C++ 版蒙特卡洛计算器,将权益计算速度提升约 500 倍,大幅缩短深度 Q 网络(DQN)的训练周期。
  • 可视化复盘分析:利用 neuron_poker 的虚拟渲染功能实时观看牌局演进,并通过回合结束后的总结图表量化分析玩家表现,快速定位策略缺陷。
  • 多样化对抗生态:轻松加载 neuron_poker 预置的随机代理、遗传算法优化代理及人工按键代理,构建多层次的对抗场景以验证策略鲁棒性。

neuron_poker 通过提供高性能的计算内核与标准化的训练环境,将德州扑克 AI 的研发重心从繁琐的基础设施构建转移到了核心策略的迭代优化上。

运行环境要求

操作系统
  • Windows
  • Linux
  • macOS
GPU

未说明

内存

未说明

依赖
notes推荐使用 PyCharm 和 uv 工具管理虚拟环境及依赖。若需使用基于 C++ 的高性能胜率计算器(速度提升约 500 倍),在 Windows 上需安装 Visual Studio 2019,或在 Linux/macOS 上通过 Cygwin 安装 GCC。深度强化学习训练支持通过 TensorBoard 监控。
python3.11
uv
gym
keras-rl
numpy
pytest
tensorboard
neuron_poker hero image

快速开始

神经元扑克:用于德州扑克的 OpenAI Gym 环境

这是一个用于训练神经网络玩德州扑克的环境。请尝试构建您自己的玩家模型,并提交拉取请求,以便我们共同协作,打造出最优秀的扑克玩家。

使用方法:

运行:

  • 安装 Python 3.11,同时建议安装 PyCharm。
  • 使用命令 curl -LsSf https://astral.sh/uv/install.sh | sh 安装 uv。
  • 创建虚拟环境并使用 uv sync 安装依赖项。
  • 运行 6 名随机玩家相互对战:uv run poker-random-render;或
  • 手动控制玩家:uv run poker-keypress-render
  • 自我改进的遗传算法示例:uv run poker-equity-improvement
  • 若要使用 C++ 版本的胜率计算器,还需安装 Visual Studio 2019(或者通过 Cygwin 使用 GCC 也可能可行)。使用时,在运行 main.py 时添加 -c 参数。
  • 对于高级用户:uv run poker-dqn-train-cpp 将启动深度 Q 学习智能体的训练,采用 C++ 蒙特卡洛方法以加快计算速度。
  • 运行所有测试:uv run pytest(使用 -n 参数可并行运行测试)。

.. figure:: doc/table.gif :alt:

运行分析


在每局游戏结束时,可以通过汇总图表观察玩家的表现。
|image0|

包和模块:

main.py:入口点及命令行解释器。它通过 gym 运行智能体。文件顶部的文档字符串描述了命令行选项,这些选项由 docopt 解析。

gym_env


- ``env.py``:德州扑克无限注版 OpenAI Gym 环境;
- ``rendering.py``:游戏过程中的图形渲染。

agents
~~~~~~
请在此处添加基于您模型的智能体。

- ``agent_random.py``:随机决策智能体。
- ``agent_keypress.py``:通过按键输入做出决策的智能体。
- ``agent_consider_equity.py``:考虑胜率信息的智能体。
- ``agent_keras_rl_dqn.py``:基于 Keras-RL 的深度强化学习智能体。
- ``agent_custom_q1.py``:自定义实现的深度 Q 学习智能体。

请注意,observation 属性是一个字典,包含可用于决策的所有玩家和牌桌信息。

自定义 Q 学习实现

强化学习的自定义实现。该包现已迁至独立仓库:www.github.com/dickreuter/tf_rl

tools


- ``hand_evaluator.py``:评估多名玩家的最佳牌型。
- ``helper.py``:辅助函数。
- ``montecarlo_numpy2.py``:基于 NumPy 的快速蒙特卡洛模拟,用于计算胜率。目前尚未完全正确,部分测试失败。欢迎修复。
- ``montecarlo_python.py``:相对较慢的 Python 版本蒙特卡洛胜率计算工具,支持为其他玩家预设范围。
- ``montecarlo_cpp``:C++ 实现的胜率计算器,速度约为 Python 版本的 500 倍。

tests
^^^^^

- ``test_gym_env.py``:针对环境的测试。
- ``test_montecarlo.py``:针对牌型评估器和 Python 版本胜率计算器的测试。
- ``test_montecarlo_numpy.py``:针对 NumPy 版本蒙特卡洛的测试。


路线图
-------

Agents
  • 基于用户交互(按键)的智能体。
  • 随机智能体。
  • 基于胜率的策略(例如高于阈值时跟注或加注)。
  • 结合遗传算法的胜率策略,根据获胜智能体调整阈值。
  • 使用 C++ 实现的胜率计算器,显著提升运行速度。
  • 基于经验回放的强化学习智能体(深度 Q 学习,基于 Keras-RL)。
  • [/] 自定义智能体(详情见上文)。

强化学习:深度 Q 智能体


``neuron_poker.agents.agent_dqn`` 在 Keras-RL 的帮助下实现了深度 Q 学习智能体。可以设置以下参数:

- nb_max_start_steps = 20  # 开始阶段的最大随机动作次数。
- nb_steps_warmup = 75  # 训练开始前的预热步数,应大于 start steps。
- nb_steps = 10000  # 总步数。
- memory_limit = int(nb_steps / 3)  # 限制经验回放缓存大小。
- batch_size = 500  # 从缓存中采样的训练批次大小。

可通过 TensorBoard 观察训练过程(在命令行中运行 ``tensorboard --logdir=./Graph``)。
|image2|


如何贡献
-----------------

从 main.py 启动
~~~~~~~~~~~~~~~~~~~~~~

在 ``main.py`` 中,智能体的启动方式如下(此处向牌桌添加 6 名随机智能体)。若要编辑通过命令行传递给 main.py 的内容,只需在 main.py 文件顶部的文档字符串中添加一行即可。

.. code:: python

    def random_action(render):
        """创建一个有 6 名随机玩家的环境"""
        env_name = 'neuron_poker-v0'
        stack = 500
        self.env = gym.make(env_name, num_of_players=6, initial_stacks=stack)
        for _ in range(num_of_plrs):
            player = RandomPlayer(500)
            self.env.add_player(player)

        self.env.reset()

如您所见,首先需要创建环境,其次将不同智能体添加到牌桌上,最后通过 reset 方法启动游戏。设置 autoplay 为 True 的智能体会自动进行游戏,调用其类中的 action 方法。此外,您也可以使用 PlayerShell 类,此时环境会要求您手动调用 step 函数并循环执行。这在使用其他专为与 gym 接口设计的包时可能很有帮助,例如 Keras-RL。

添加新模型/智能体
^^^^^^^^^^^^^^^^^^^^^^^^^^

示例智能体可在 random_agent.py 中找到。

要构建新的智能体,需创建一个智能体类,并修改以下方法。您需要使用 observation 参数——它包含了当前牌桌、玩家以及智能体自身的状态——作为决定最佳行动的依据。

.. code:: python

    def action(self, action_space, observation):  # pylint: disable=no-self-use
        """必须的方法,根据观察数组和动作空间计算下一步行动。"""
        _ = observation  # 不使用观察结果进行随机决策
        this_player_action_space = {Action.FOLD, Action.CHECK, Action.CALL, Action.RAISE_POT, Action.RAISE_HAlF_POT}
        possible_moves = this_player_action_space.intersection(set(action_space))
        action = random.choice(list(possible_moves))
        return action

观察状态
~~~~~~~~~~~~~~~~~~~

状态以 NumPy 数组的形式表示,包含以下信息:

.. code:: python

class 社区数据:
        def __init__(self, num_players):
            self.current_player_position = [False] * num_players  # ix[0] = 底池庄家
            self.stage = [False] * 4  # one hot:翻牌前、翻牌圈、转牌圈、河牌圈
            self.community_pot: float: 当前牌局的总底池金额
            self.current_round_pot: float: 本轮加入的底池金额
            self.active_players = [False] * num_players  # one hot 编码,0 = 底池庄家
            self.big_blind
            self.small_blind


    class 局面数据:# 以列表形式存在,共8次:
        """翻牌前、翻牌圈、转牌圈和河牌圈,每轮各2次"""

        def __init__(self, num_players):
            self.calls = [False] * num_players  # ix[0] = 底池庄家
            self.raises = [False] * num_players  # ix[0] = 底池庄家
            self.min_call_at_action = [0] * num_players  # ix[0] = 底池庄家
            self.contribution = [0] * num_players  # ix[0] = 底池庄家
            self.stack_at_action = [0] * num_players  # ix[0] = 底池庄家
            self.community_pot_at_action = [0] * num_players  # ix[0] = 底池庄家


    class 玩家数据:
        “玩家特定信息”

        def __init__(self):
            self.position: one hot 编码,0=底池庄家
            self.equity_to_river: 蒙特卡洛模拟
            self.equity_to_river_2plr: 蒙特卡洛模拟
            self.equity_to_river_3plr: 蒙特卡洛模拟
            self.stack: 当前玩家筹码量

如何在 GitHub 上集成你的代码

单靠一个人很难在扑克比赛中战胜世界顶尖水平。因此,这个仓库旨在创建一个协作环境,允许大家添加和评估不同的模型。

要贡献代码,请按照以下步骤操作:

  • 安装 PyCharm 并搭建虚拟 Python 环境。可以使用命令 uv sync
  • 如果你想使用快 500 倍的基于 C++ 的胜率计算器,还需要安装 Visual Studio,但这不是必需的。
  • 将你的 Fork 复制到本地机器上。你可以在 PyCharm 中直接操作:VCS --> 从版本控制检出 --> Git。
  • 添加原始仓库作为远程仓库,并命名为 upstream(与你的 Fork 的连接应称为 origin)。这可以通过 VCS --> Git --> Remotes 来完成。
  • 创建新分支:点击右下角的 master,然后选择“新建分支”。
  • 进行代码修改。
  • 确保所有测试都通过。在 File --> Settings --> Python 集成工具中切换到 pytest(见截图)。|image1| 之后,只需右键点击 tests 文件夹并运行所有测试即可。所有测试必须全部通过。记得为你的代码添加相应的测试,只需将函数命名为 test_...。
  • 确保所有测试都成功通过。最好按照上述方法运行 pytest(在 PyCharm 中右键点击 tests 文件夹并执行)。如果测试失败,可以通过右键点击测试并设置断点来调试,甚至可以在断点处打开控制台:https://stackoverflow.com/questions/19329601/interactive-shell-debugging-with-pycharm。
  • 提交更改(CTRL+K)。
  • 将更改推送到你的 origin(即你的 Fork)(CTRL+SHIFT+K)。
  • 若要使你的分支与上游 master 保持同步,尤其是当上游 master 发生更新时:执行 rebase 操作,将你的分支变基到 upstream master。这可能需要解决一些冲突。完成后,务必使用强制推送(ctrl+shift+k),而不是普通的推送。可以通过选择推送旁边的下拉菜单,然后选择“强制推送”来完成(重要提示:不要简单地推送并合并变基后的分支)。
  • 在 your.github.com 上创建一个 Pull Request,将你的分支合并到 upstream master。
  • 当你的 Pull Request 被批准后,它将会被合并到 upstream/master 中。

.. |image0| image:: doc/pots.png .. |image1| image:: doc/pytest.png .. |image2| image:: doc/tensorboard-example.png

常见问题

相似工具推荐

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 真正成长为懂上

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

ComfyUI

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

108.3k|★★☆☆☆|3天前
开发框架图像Agent

gemini-cli

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

100.8k|★★☆☆☆|3天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|6天前
插件开发框架