基于 AlphaZero 算法(策略-价值神经网络 + 蒙特卡洛树搜索)的爆裂棋引擎,提供终端交互界面(TUI),支持局面评估与最优着法输出。
- 完整游戏核心:严格复刻
爆裂棋.c的calc()语义,含连锁爆炸、爆炸增强余量、单方棋子存活判定、级别超限判定两种胜负条件 - 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 时使用随机初始化网络,仍可正常运行。
| 命令 | 说明 |
|---|---|
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()检测顺序):- 单方棋子存活:每趟扫描开头检测,棋盘上仅剩一方棋子时该方获胜
- 级别超限:爆炸遍历阶段检测,任意棋子级别 ≥8 时触发玩家获胜
完整规则形式化定义见 spec.md。
- 棋盘表示:NumPy
(10, 10)int8 数组与 C 源码索引对齐 - 状态编码:
(3, 9, 9)张量(红方面 / 蓝方面 / 当前玩家面) - MCTS 价值视角:终局叶子不取反(父子玩家相同),非终局叶子取反(父子玩家相反)
- 训练损失:策略交叉熵 + 价值 MSE,L2 通过 Adam
weight_decay实现 - 温度调度:自博弈前 N 步温度=1.0 探索,后期贪心利用
pytest99 个测试覆盖:游戏核心逻辑、神经网络、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