Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reversi AlphaZero(Botzone 天梯版)

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.py

训练

python scripts\run.py --iters 100 --games 400 --sims 300
  • 自动断点续训(读取 out/ckpt 最新 checkpoint、加载 out/replay 分片)。
  • 每轮迭代:自对弈 → 存回放分片 → SGD 训练 → 导出 out/weights/iter_*.binlatest.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

本地测试 Bot

# 编译(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

部署到 Botzone

  1. 生成单文件源码:python scripts\make_submission.pybotzone/submission.cpp
  2. out/weights/latest.bin 改名为 reversi_az.bin,上传到 Botzone 存储空间(bot 以 data/reversi_az.bin 读取)。
  3. 在 Botzone 创建 Bot:游戏选 Reversi,语言 C++(勾选 O2),粘贴 submission.cpp勾选“允许长时运行”(bot 依赖 keep-running 保留搜索树、避免每回合重载权重)。
  4. 时间预算在 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages