强化学习深度学习人工智能【免费下载链接】PufferLibPuffing up reinforcement learning项目地址https://gitcode.com/gh_mirrors/pu/PufferLib点击查看免费下载Guerrilla Checkers 是 PufferLib 内置的一款棋盘类强化学习环境它把 Checkers国际跳棋与 Go围棋的规则不对称地混合在一起一方扮演游击队、另一方扮演金币形成了与常规对称棋类截然不同的博弈结构。本指南以仓库中的 ocean/guerrillacheckers/README.md 为核心结合 ocean/guerrillacheckers/guerrillacheckers.h、ocean/guerrillacheckers/mcts.h 与 config/guerrillacheckers.ini 的源码与配置实现完整讲解如何理解这个不对称环境的状态与动作空间、如何启动标准 5c 自对弈训练、如何保持新旧检查点格式兼容、以及如何构建独立客户端并对候选模型做与 Puffer 40 基线的交叉对局评估。读完本文你将掌握一套可直接复用的训练、评估与基线对照工作流并理解其中每一项关键配置在源码层面的真实作用。游戏规则Checkers 与 Go 的不对称混合Guerrilla Checkers 在源码头部被明确注释为 an asymmetric hybrid of Checkers and Go参见 ocean/guerrillacheckers/guerrillacheckers.h。棋盘由8×8的 COIN 格网与7×7的游击队格点叠加而成常量值含义GC_BOARD_W / GC_BOARD_H8 / 8COIN 棋子所在格网GC_G_W / GC_G_H7 / 7游击队落子点网格GC_COIN_CELLS64COIN 格点数GC_G_CELLS49游击队格点数GC_MAX_GUERRILLAS66游击队最多可投放的石子数GC_ACTIONS256动作头宽度GC_PASS_ACTION255非活跃槽位的确定性 pass 动作GC_OBS_SIZE120观测长度49 64 7GC_INVALID_ACTION_REWARD-1.0非法动作的负反馈GC_MAX_BANKS8历史银行对手池最大数量规则要点均可从 ocean/guerrillacheckers/guerrillacheckers.h 的gc_*系列函数中确认初始局面puf_reset在 6 个固定坐标{3,2},{2,3},{4,3},{3,4},{5,4},{4,5}放置金币见 guerrillacheckers.h。游击队Guerrilla先手每个回合可以在格点上连放两枚相邻的石子第一枚与已有石子邻接第二枚必须与第一枚邻接GC_MAX_GUERRILLAS 66是全局投放上限。金币COIN移动金币沿对角方向移动若跳越相邻的游击队格点则吃掉该石子吃到后若仍可继续连跳则强制继续coin_must_capture标志。包围吃子一枚金币若被其四角全部占据游击石子即被提走gc_check_guerrilla_capture。胜负判定gc_check_victory金币被全部清除 → Guerrilla 胜游击队用尽 66 枚或场上无合法落点 → COIN 胜。超时判定gc_check_timeout到达max_episode_length步仍胜负未分时直接判 Guerrilla 负COIN 胜因为 Guerrilla 的唯一胜利条件就是清空棋盘。这种一方通过围困蚕食、另一方通过跳吃反制的非对称设计是研究非对称博弈、不同行动节奏回合内连放两子 vs 单步移动与稀疏奖励的理想测试床。检查点格式Puffer 40 基线与新 5c 模型的兼容契约仓库为 Guerrilla Checkers 保留了原版 Puffer 40作为新标准 5c 自对弈模型的评估基线。README 记录的唯一基线检查点如下CheckpointPurposeSHA-256guerrillacheckers_weights.binOriginal Puffer 40f58615069b9a0e50105dd54b4729d366d602fe14b957a0042e4dc88089120398两种布局的差异需要特别留意Puffer 40使用旧的587,264 字节 biased 布局新训练的标准 5c 检查点使用586,240 字节 bias-free 布局且带 value-head 行独立评估器standalone evaluator会直接自动检测这两种格式因此新旧检查点可以用同一套评估流程、在完全相同的输入上对局。这得益于 guerrillacheckers.h 中的原生 5c 构建契约#define OBS_SIZE GC_OBS_SIZE // 120 #define NUM_ATNS 1 #define ACT_SIZES {GC_ACTIONS} // 单头 256 动作 #define PUF_STEPS_PER_SEC 3代码注释明确写道保持与原始 Puffer 策略契约一致是为了让新旧检查点能够在相同输入上被评估。这也解释了为什么 README 强调标准 5c 检查点带 value-head 行——旧模型只有 policy 头新模型额外携带 value 头评估器需要能分辨两者。训练真正交替的自对弈genuine alternating self-play启动命令./puffer train guerrillacheckers该命令的 env 名guerrillacheckers由 config/guerrillacheckers.ini 的[base] env_name决定训练器编译环境的方式见 build.sh默认编译ocean/guerrillacheckers/guerrillacheckers.h产出./puffer。自对弈机制双逻辑策略槽位README 明确描述了这套真正交替自对弈 随机化 sides的机制其源码实现在Env结构体与gc_actor_slot/gc_rebuild_action_mask中slot 0 是可训练策略slot 1 是当前或历史对手每局开始时随机决定哪一方由哪个槽位扮演side_cfg 0表示每局随机保证两边都被两个槽位充分训练到非活跃槽位每步收到一个确定性 pass 动作动作 255。在 guerrillacheckers.h 中注释了设计意图pass 动作在正常对局中不可能出现它是右下角金币格网向外的越界移动因此既能让等待槽位保持每步一个动作以维持 PPO 与循环状态的更新有效性又不会被误用两个槽位的循环状态recurrent states在每个游戏步都观察到完整局面遵循已有的 Ocean Chess 自对弈约定见 ocean/chess/chess.h20% 的环境使用历史银行historical bank即对手来自冻结的历史快照池对手交换只在所有 tagged 游戏都到达 episode boundary 之后进行避免在局中打断保证策略切换的干净边界。关键配置逐项解读config/guerrillacheckers.ini 是标准训练的规范配置以下为各节参数及其源码层面的作用[base] env_name guerrillacheckers # 一个 epoch 4096 agents * 64 horizon 262,144 agent steps。 # 每 20 个 epoch 存一次快照历史池大约每 5.24M 步收到一个新策略。 checkpoint_interval 20 [selfplay] enabled 1 max_size 100 seed 42 # 冻结银行大约按快照产出频率刷新加载推迟到所有 tagged 游戏到达 episode boundary。 opp_timeout_steps 5_000_000 [vec] total_agents 4096 num_buffers 8 num_threads 8 num_policies 2 # 80% 当前对当前20% 对历史池。 hist_policy_percent 0.2 hist_policy_hidden_size 128 hist_policy_num_layers 2 [env] # 硬性步数上限超时判 Guerrilla 失败COIN 胜。 max_episode_length 256 # selfplay 1两个策略槽位交替 sides历史池环境中 slot 0 是主策略slot 1 是冻结对手。 # selfplay 0策略以 side 与内置 opponent bot 对局。 selfplay 1 # slot 0主策略在自对弈中扮演的 side或 bot 模式下 agent 的 side # 0 每局随机1 Guerrilla2 COIN。 side 0 # selfplay 0 时的对手 bot0 random1 greedy最大化吃子2 mcts。 opponent 1 # MCTS 对手参数opponent 2 时使用。迭代越多越强、越慢。 mcts_iterations 256 mcts_exploration 0.7 # rollout 策略0 random忠实 UCT1 greedy更强尤其是 Guerrilla 侧。 mcts_rollout 1 [policy] hidden_size 128 num_layers 2 [train] total_timesteps 100_000_000 gamma 0.98 # 本环境是稀疏的 256 路动作头action mask 负责合法性 # 低熵系数让探索不至于与 mask 过度对抗。 ent_coef 0.0001要点说明num_policies 2对应自对弈中的两个逻辑槽位hist_policy_percent 0.2使 20% 环境接入历史银行这与 README 中Twenty percent of environments use the historical bank一致side 0的随机化语义在 guerrillacheckers.h 中实现side_cfg为 1/2 时固定槽位归属否则按随机位分配max_episode_length 256直接驱动gc_check_timeout的超时判负逻辑ent_coef 0.0001的低熵压力是为了让探索不干扰 action mask 的合法性约束非法动作会被 mask 屏蔽且puf_step对非法动作按GC_INVALID_ACTION_REWARD -1.0的负向 no-op处理不即时判负由超时兜底——详见 guerrillacheckers.h。观测、动作与奖励的编码细节观测OBS_SIZE 120每个槽位看到完全相同的绝对棋盘编码源码注释强调这是为了保持原始检查点契约顺序为 guerrillacheckers.hGC_G_CELLS 49游击队占位0/1GC_COIN_CELLS 64金币占位0/17 个标量当前行动方 side idGuerrilla1 / COIN2、coin_must_capture标志、金币上一格1-1 记 0、游击队上一格1、本回合已放子数、游击队总投放数、场上现存游击队石子数。动作编码256 路单头Guerrilla 动作action first * 4 dir其中first是 49 个格点之一dir映射为四个方向{2,3,0,1}即下/右优先保证 reset 后动作 0 合法落子点在first与其该方向邻居——一个动作即连放两枚相邻石子COIN 动作action src * 4 dirsrc为 64 个金币格之一dir为四个对角方向合法动作由gc_rebuild_action_mask实时枚举生成gc_enumerate_legal写入行动槽位的action_mask。奖励设计每局终止时胜方 1.0、负方 -1.0自对弈中按slot_for_side[winner]结算到具体槽位吃子即时奖励Guerrilla 每次吃子 0.05 × 枚数COIN 每次 0.03 × 枚数guerrillacheckers.h非法动作GC_INVALID_ACTION_REWARD -1.0作为负向 no-opinvalid_rate统计每局决策中非法动作占比是评估/训练日志中重要的健康度指标。Log结构guerrillacheckers.h记录了 perf、score、episode_return/length、invalid_rate、按阵营统计的胜负场次、slot 0/1 得分以及hist_score_bank[0..7]的历史银行分槽统计——这些字段在puf_log中全部导出为训练日志用于监控自对弈进程。评估构建独立客户端并与 Puffer 40 基线对比构建与对比命令README 给出的完整评估流程./build.sh guerrillacheckers --fast ./guerrillacheckers --compare-candidate 1000 \ .runtime/checkpoints/guerrillacheckers/run/checkpoint.bin第一步构建独立客户端standalone client并产出可执行文件./guerrillacheckers第二步让原生候选模型与原始 Puffer 40从两侧各下 1000 局--compare-candidate 1000为局数参数候选检查点路径位于.runtime/checkpoints/guerrillacheckers/run/checkpoint.bin独立客户端同时内建了人类对战能力在 raylib 窗口中按住 Left Shift 点击即可先选点、再选目标地手动走棋gc_human_controls见 guerrillacheckers.h。关于构建的一般性说明仓库根目录的 build.sh 同时支持./build.sh guerrillacheckers原生训练/评估产出./puffer、./build.sh guerrillacheckers mybin自定义输出名、以及--cpu模式构建独立 CPU 评估二进制产出./build/cpu_guerrillacheckers要求环境头必须typedef obs_t。README 中记录的--fast是针对独立客户端的快速构建选项以其为准即可。基线交叉对局表每格 100 局Guerrilla wins - COIN winsREADME 记录的基线字段为每格 100 局、以Guerrilla 胜 - COIN 胜形式展示Guerrilla / COINRandomGreedyPuffer 40MCTS 2KMCTS 10KRandom8-920-1000-1000-1000-100Greedy98-233-671-990-1000-100Puffer 4096-499-115-8512-889-91MCTS 2K99-1100-050-5030-7011-89MCTS 10K100-0100-084-1681-1965-35分侧 Bradley-Terry Elo锚定 Elo 1500README 同时给出了**分侧side-specific**的 Bradley-Terry 拟合 Elo锚定基准为 1500覆盖全部 10 个分侧条目BotGuerrilla EloCOIN EloRandom338727Greedy11201189Puffer 4016361879MCTS 2K18341969MCTS 10K22002108两点值得注意同一策略扮演不同阵营时强度差异明显——Puffer 40 的 COIN Elo1879显著高于其 Guerrilla Elo1636MCTS 10K 则反过来Guerrilla 2200 vs COIN 2108这与环境的不对称规则直接相关基线表中 MCTS 10K 作为 Guerrilla 对阵任何对手都保持压倒性胜率而作为 COIN 对阵同级别 MCTS 对手时胜率下降65-35 vs 同 Bot 行这些数据是评估新模型时必须对照的分侧基线。内置对手与 MCTS 实现当selfplay 0bot 模式时agent 在puf_step内与内置 bot 对局。对手由opponent参数选择枚举见 guerrillacheckers.hRandomGC_BOT_RANDOM 0均匀随机挑选合法动作GreedyGC_BOT_GREEDY 1使用gc_action_capture_score对每个合法动作做不改动棋盘的即时吃子评估选取吃子数最多的动作并列时随机见gc_greedy_pickMCTSGC_BOT_MCTS 2完整 UCT 搜索实现在 ocean/guerrillacheckers/mcts.h 中。MCTS 对手的实现要点从源码结构看移植自参考实现nico/guerrillacheckers/src/mcts.nim采用完美信息单树 UCT每步决策构建一棵树wins 从移入该节点的玩家视角存储因此最大化子节点胜率即选择当前行动方的最优着法节点池化每次迭代最多展开一个节点因此池大小取itermax 1mcts.h迭代循环只克隆棋盘状态GuerrillaCheckers s *env后清空 agent 缓冲UCB1 选择探索常数默认0.7≈ sqrt(2)/2与参考引擎一致由mcts_exploration覆盖rollout 策略二选一mcts_rollout0为均匀随机 playout忠实 UCT1为 greedy 吃子最大化 playout——源码注释指出 greedy rollout 在宽阔的 Guerrilla 侧明显更强但单次迭代成本更高选择最终着法时采用最高访问次数子节点most-visited child而非最高胜率这是 UCT 的标准稳健做法。MCTS 的mcts_iterations默认 256、mcts_exploration默认 0.7、mcts_rollout默认 1三项旋钮全部来自 config/guerrillacheckers.ini 的[env]节在puf_init中读取并存入Env结构体。实操建议与注意事项用基线先行验证评估链路在评估任何新候选模型前先用guerrillacheckers_weights.binSHA-256f58615069b9a0e50105dd54b4729d366d602fe14b957a0042e4dc88089120398跑一遍--compare-candidate确认评估器能同时识别 587,264 字节的 biased 布局与 586,240 字节的 bias-free value-head 布局。关注分侧表现而非总胜率由于规则不对称同一模型的 Guerrilla Elo 与 COIN Elo 往往相差数百点。评估新模型时应分别对照 README 的十个分侧条目而不是只看整体胜率。自对弈健康度监控训练日志中的invalid_rate、slot_0_score_as_guerrilla/slot_0_score_as_coin与hist_score_bank_*分别反映合法性、分侧强度与历史对手池的对抗进程对手池交换被刻意推迟到所有 tagged 游戏到达 episode boundary这是保证策略切换干净的关键设计。超时兜底语义max_episode_length超时判 Guerrilla 负而非当前行动方负guerrillacheckers.h 注释这在 bot 模式下避免超时总是落在学习者头上——理解这一点对解释边界样本的奖励归属很重要。构建环境所有构建入口统一在仓库根目录的 build.sh无需修改任何源码即可完成./puffer train guerrillacheckers、独立客户端构建与--compare-candidate评估全流程。小结Guerrilla Checkers 是一个罕见的非对称混合规则棋盘博弈PufferLib 为其提供了完整的训练、评估与基线闭环genuine alternating self-play的双槽位机制与历史银行保证了稳定的对手进化586,240 / 587,264两种检查点布局的自动识别让新旧模型可以在同一契约下对局分侧 Elo 与交叉胜负表则给出了透明、可复现的评估锚点。对研究非对称博弈、回合节奏差异与稀疏奖励的读者来说这是一套可以立即上手的实验台。赞分享强化学习深度学习人工智能【免费下载链接】PufferLibPuffing up reinforcement learning项目地址https://gitcode.com/gh_mirrors/pu/PufferLib点击查看免费下载相关推荐KaTrain 完全指南基于 KataGo 的围棋复盘、AI 对弈与分布式训练实战手册KaTrain 完全指南基于 KataGo 的围棋复盘、AI 对弈与分布式训练实战手册 KaTrain 是一款以 KataGo 分析引擎为核心的围棋BaduAI 应用桌面应用教育KaTrain围棋AI训练平台5步完成智能对弈环境搭建终极指南KaTrain围棋AI训练平台5步完成智能对弈环境搭建终极指南 想要通过AI技术快速提升围棋水平吗KaTrain正是你需要的智能对弈伙伴这个基于KataGAI 应用桌面应用教育PaddleNLP 向量检索模型对比学习训练与评估实战指南PaddleNLP 向量检索模型对比学习训练与评估实战指南 导读 本文基于 PaddleNLP 仓库中 slm/pipelines/examples/contr人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇Flink Hive Dialect ALTER 语句完全指南数据库、表与视图的元数据变更实战下一篇Apache APISIX Script脚本机制详解在 Route 上直接运行自定义 Lua 代码创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考