AlphaZero 式黑白棋 AI:本地 RTX 5070 GPU 训练,部署为 Botzone 托管 C++ Bot(纯 CPU 推理 + MCTS + 终局精确求解),可打天梯。
cpp/core/ 共享 C++ 核心(训练与部署完全一致)
bitboard.h 位棋盘:走法生成 / 翻子 / 特征平面
net.h CPU 推理引擎(BN 已折叠,AVX2 GEMM + 运行时降级)
search.h PUCT MCTS(批量评估/虚拟损失/树复用)+ 终局 alpha-beta 求解
cpp/selfplay/ 训练侧:批量自对弈池 + pybind11 绑定 (reversi_cpp)
az/ Python 训练包:模型 / 导出 / 自对弈 / 回放 / 训练
botzone/main.cpp Botzone bot(简单交互 + 长时运行)
scripts/ pipeline / arena / 本地协议对局 / 单文件合并
tests/ 规则一致性、torch vs C++ 推理一致性
conda activate reversi # python 3.11 + torch 2.11 cu128 + numpy + pybind11
python setup.py build_ext --inplace # 编译 reversi_cpp 扩展(MSVC)
python tests\test_rules.py
python tests\test_parity.pypython scripts\run.py --iters 100 --games 400 --sims 300- 自动断点续训(读取
out/ckpt最新 checkpoint、加载out/replay分片)。 - 每轮迭代:自对弈 → 存回放分片 → SGD 训练 → 导出
out/weights/iter_*.bin与latest.bin。 - 超参见
az/config.py(默认 64 通道 x 5 残差块,~42 万参数,权重文件 ~1.6MB)。
强度评估(用与部署完全相同的 CPU 搜索):
python scripts\arena.py out\weights\iter_00030.bin out\weights\iter_00010.bin --games 40 --sims 400# 编译(VS 开发者命令行)
cl /O2 /EHsc /std:c++17 /arch:AVX2 botzone\main.cpp /Fe:botzone\bot.exe
# 用本地裁判按 Botzone 协议对局(校验合法性与 keep-running 标记)
python scripts\local_match.py botzone\bot.exe --weights out\weights\latest.bin --games 4- 生成单文件源码:
python scripts\make_submission.py→botzone/submission.cpp - 把
out/weights/latest.bin改名为reversi_az.bin,上传到 Botzone 存储空间(bot 以data/reversi_az.bin读取)。 - 在 Botzone 创建 Bot:游戏选 Reversi,语言 C++(勾选 O2),粘贴
submission.cpp, 勾选“允许长时运行”(bot 依赖 keep-running 保留搜索树、避免每回合重载权重)。 - 时间预算在
botzone/main.cpp顶部(首回合 1.30s / 平时 0.72s,留了挂起唤醒的余量)。
说明:找不到权重文件时 bot 自动退化为启发式(角点/行动力)+ 终局求解,不会崩溃; 残局 ≤14 空位尝试精确求解,叶子 ≤7 空位在 MCTS 内精确解。
RVAZ magic + version + (C,B,PH,VH) 头,随后按固定顺序的 float32 数组(BN 折叠进卷积)。
详见 cpp/core/net.h 头部注释与 az/export.py。