neuron_poker
德州扑克深度强化学习训练场,OpenAI Gym标准接口,支持Keras-RL DQN
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
德州扑克深度强化学习训练场,OpenAI Gym标准接口,支持Keras-RL DQN
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
如果你曾经和AI下过棋、打过游戏,你可能会好奇:AlphaGo 能赢柯洁、AlphaStar 能打星际——但它们都是完美信息博弈,你看到的我也能看到,牌面是透明的。德州扑克完全不同,它是一个经典的不完美信息博弈:你看不到对手的底牌,对手也看不到你的。这种"信息不对称"让决策变得极度复杂——你不仅要在知道部分信息时做判断,还要考虑对手会怎么解读你的行为,以及你展示出的信息会不会被对手利用。
这正是 Neuron Poker 想要解决的课题:它提供了一个标准化的德州扑克环境,让任何人都能用强化学习训练自己的扑克AI Agent。
Neuron Poker 由独立开发者 Nicolas Dickreuter 创建和维护,主分支托管在 GitHub 上,目前拥有 721 颗星、近 200 个 Fork。项目采用 Python 3.11 开发,使用 uv 作为包管理工具,核心依赖包括 OpenAI Gym(环境标准接口)、TensorFlow/Keras(神经网络)和 keras-rl(强化学习算法封装)。作者在 README 中明确表示希望社区共同参与,创建"最强大的扑克 AI Agent",欢迎提交 Pull Request。
项目的话题标签精准概括了它的定位:gym-environment、holdem、neural-network、openai-gym、poker、pokerbot、reinforcement-learning。
项目的核心价值在于将德州扑克封装成符合 OpenAI Gym 标准的强化学习环境。gym_env/env.py 中的 TexasHoldemEnv 继承自 gym.Env,完整实现了 reset() 和 step() 接口——这是强化学习代码的"通用语言",意味着 Neuron Poker 可以无缝对接 Stable-Baselines3、RLlib、TiTorch-RL 等任何支持 Gym 接口的主流强化学习框架。
环境的观察空间(Observation Space)包含:
环境的核心变量 MONTEACRLO_RUNS = 1000,负责在决策前计算蒙特卡洛权益值——这相当于告诉 Agent"根据当前已知信息,你获胜的概率大概是多少",是 Agent 做出理性决策的关键输入。
项目自带 6 种预置 Agent,构成了完整的学习梯度:
(1)随机Agent(agent_random.py):在所有合法动作中随机选择,是最基础的基线测试工具。
(2)按键控制Agent(agent_keypress.py):允许人类通过键盘直接参与对战,适合直观感受游戏规则。
(3)Equity策略Agent(agent_consider_equity.py):基于蒙特卡洛计算的权益值(equity)做决策——当权益超过阈值时加注,否则跟注或弃牌。这是最接近"理性玩家"的基础策略实现。
(4)Keras-RL DQN Agent(agent_keras_rl_dqn.py):这是项目的核心深度强化学习实现。代码使用了经典的 Deep Q-Network(深度Q网络)架构,网络结构为三层全连接层(512-512-512),每层 Dropout 0.2,使用 Adam 优化器。训练参数:记忆回放池大小 50,000、批次大小 500、每 100 步训练一次。策略使用了 BoltzmannQPolicy——在训练初期更多探索随机动作,随着训练深入逐渐偏向 exploitation。
(5)自定义Q-Learning(agent_custom_q1.py):作者自己的 Q-Learning 实现,对标 keras-rl 的结果,代码独立维护在另一个仓库(tf_rl)中。
(6)遗传算法改进Agent(agent_equity_improvement):通过遗传算法在 Equity 策略基础上持续自我进化,探索更优参数。
tools/montecarlo_python.py 实现了纯 Python 的蒙特卡洛模拟,用于计算当前手牌对抗所有对手手牌的胜率。项目甚至提供了 C++ 加速版本(montecarlo_cpp),在 README 中标注"比 Python 版本快 500 倍"——使用方式为在运行 main.py 时加 -c 参数,但需要安装 Visual Studio 2019(Windows)或 GCC(Cygwin/Linux)。此外还有 Cython 实现(montecarlo_cython.pyx)和 NumPy 版本(montecarlo_numpy2.py,还在实验中)。
gym_env/rendering.py 使用 pyglet 库实现桌面 GUI 渲染,可以实时显示德州扑克牌桌、每位玩家的手牌位置、筹码变化和下注动画。这让用户无需阅读代码也能直观理解 AI 在做什么决策,兼具教学和研究价值。
项目使用 Hatchling 作为构建系统,pyproject.toml 管理所有依赖。开发工具链完整:pytest 做单元测试(并发执行 -n)、pylint 做代码风格检查(.pylintrc)、pydocstyle 做文档字符串检查(.pydocstyle)。GitHub Actions CI 流水线在每次 push 和 PR 时自动运行全量测试。
代码模块划分清晰:gym_env/ 处理环境逻辑、agents/ 管理各种 Agent、tools/ 包含手牌评估和蒙特卡洛计算、tests/ 有 4 个测试文件。测试文件分别覆盖评估器、Gym 环境、C++ 蒙特卡洛和 Python 蒙特卡洛模块。
需要注意的是:NumPy 版本的蒙特卡洛模拟测试部分失败(README 提及),说明该项目仍处于活跃开发中,部分功能尚未完全稳定。
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/dickreuter/neuron_poker
cd neuron_poker
uv sync
uv run poker-random-renderuv run poker-keypress-renderuv run poker-dqn-trainuv run poker-dqn-train-cppuv run pytestNeuron Poker 属于强化学习领域的经典研究范畴——不完美信息博弈(Imperfect Information Games)。扑克 AI 的研究成果具有广泛的外延价值:谈判策略、拍卖机制设计、金融交易、竞拍系统——这些场景的共同特点是信息不对称和需要 deception(欺骗/策略性隐瞒)。相比围棋的"全局信息",德州扑克训练的决策能力更接近真实世界的复杂决策场景。
项目同时也是一个优秀的强化学习教学工具:从最简单的随机 Agent 到完整的 DQN 训练,覆盖了强化学习入门到进阶的完整路径,且有直观的可视化反馈。