Skip to content

Repository files navigation

爆裂棋 AlphaZero 引擎

基于 AlphaZero 算法(策略-价值神经网络 + 蒙特卡洛树搜索)的爆裂棋引擎,提供终端交互界面(TUI),支持局面评估与最优着法输出。

项目特性

  • 完整游戏核心:严格复刻 爆裂棋.ccalc() 语义,含连锁爆炸、爆炸增强余量、单方棋子存活判定、级别超限判定两种胜负条件
  • AlphaZero 神经网络:4 残差块公共体 + 策略头 + 价值头(tanh 输出 [-1, 1])
  • PUCT 蒙特卡洛树搜索:神经网络引导先验与价值,支持 Dirichlet 噪声探索
  • 自博弈训练管线:数据生成 → 批量训练 → 检查点保存
  • TUI 交互界面(基于 Rich):棋盘渲染、局面评估、最优着法分析、人机对弈、引擎代走

项目结构

.
├── 爆裂棋.c                  # 原始 C 语言实现(规则参考)
├── main.py                   # 主入口(play / analyze / train)
├── pyproject.toml            # 项目配置与依赖
├── src/burst_chess/
│   ├── game.py               # 棋盘、连锁爆炸、胜负判定
│   ├── network.py            # 策略-价值神经网络
│   ├── mcts.py               # AlphaZero MCTS
│   ├── selfplay.py           # 自博弈数据生成
│   ├── trainer.py            # 训练循环
│   └── tui.py                # Rich TUI 界面
├── tests/                    # pytest 测试套件(99 个测试)
└── models/                   # 模型检查点目录

安装

pip install -e .

依赖:Python ≥ 3.10,PyTorch ≥ 2.0,NumPy ≥ 1.24,Rich ≥ 13.0。

使用方法

人机对弈

python main.py play [--model PATH] [--simulations N]

你执红方先手,引擎执蓝方。走子格式:行 列(如 3 3)。

分析模式

python main.py analyze [--model PATH] [--simulations N]

可自由走子(双方),随时调用引擎分析功能。

训练模式

python main.py train \
    --iterations 50 \
    --games 20 \
    --epochs 10 \
    --simulations 50 \
    --lr 1e-3 \
    --batch-size 64 \
    --checkpoint-dir models

通过自博弈生成数据并迭代训练神经网络,检查点保存到 models/

未指定 --model 时使用随机初始化网络,仍可正常运行。

TUI 命令

命令 说明
r c 走子,如 3 3 表示在 (3,3) 落子
eval 评估当前局面(价值 + 胜率)
best 显示最优着法 + Top-5 候选及访问次数
auto 引擎以当前玩家身份自动落子
undo 悔棋
new 重新开局
help 显示帮助
quit 退出

爆裂棋规则

  • 棋盘:9×9,索引 (1,1) 到 (9,9)
  • 棋子board[i][j] 取值 -7 到 7。正数=红方棋子,负数=蓝方棋子,绝对值表示级别
  • 初始局面:(3,3)=3(红)、(7,7)=-3(蓝),红方先手
  • 合法着法:选择满足 board[r][c] * now_player > 0 的格子,级别 +1
  • 连锁爆炸:级别 ≥4 时爆炸,相邻格变为 (|邻居| + |爆炸格| - 3) × now_player,爆炸格自减原始值。多趟扫描直至无变化
  • 胜负条件(按 calc() 检测顺序):
    1. 单方棋子存活:每趟扫描开头检测,棋盘上仅剩一方棋子时该方获胜
    2. 级别超限:爆炸遍历阶段检测,任意棋子级别 ≥8 时触发玩家获胜

完整规则形式化定义见 spec.md

技术实现要点

  • 棋盘表示:NumPy (10, 10) int8 数组与 C 源码索引对齐
  • 状态编码(3, 9, 9) 张量(红方面 / 蓝方面 / 当前玩家面)
  • MCTS 价值视角:终局叶子不取反(父子玩家相同),非终局叶子取反(父子玩家相反)
  • 训练损失:策略交叉熵 + 价值 MSE,L2 通过 Adam weight_decay 实现
  • 温度调度:自博弈前 N 步温度=1.0 探索,后期贪心利用

测试

pytest

99 个测试覆盖:游戏核心逻辑、神经网络、MCTS、自博弈、训练器、TUI、端到端集成。

技术栈

组件 选型
语言 Python 3.10+
深度学习 PyTorch
数值计算 NumPy
TUI Rich
测试 pytest

参考

  • Silver et al. Mastering the game of Go without human knowledge (AlphaGo Zero, Nature 2017)
  • Silver et al. A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play (AlphaZero, Science 2018)
  • 原始 C 语言实现:爆裂棋.c

About

爆裂棋引擎

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages