人工智能强化学习深度学习【免费下载链接】open_spielOpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games.项目地址https://gitcode.com/gh_mirrors/op/open_spiel点击查看免费下载OpenSpiel 的hive游戏模块位于 open_spiel/games/hive/实现了经典桌游 Hive虫虫棋及其 Mosquito、Ladybug、Pillbug 三个扩展并以与 AlphaZero 类算法训练兼容为首要目标棋盘状态被编码为适合 2D 卷积的多层特征张量动作被离散化为 7×28×28 的固定动作空间同时完整支持 Universal Hive ProtocolUHP棋局字符串的序列化与反序列化。阅读本文后你将掌握该模块的参数配置方法、观测张量与动作空间的设计原理、UHP 字符串格式以及各虫种移动生成的源码级实现细节。一、模块定位为强化学习而生的 Hive 环境Hive 是一款在无边界桌面上进行的双人零和桌游目标是通过围困使对方蜂后Queen被完全包围而获胜。正如 hive.h 开篇引用维基百科所述Hive 的棋子一旦落子便可按规则移动类似国际象棋且与一般棋类不同它没有固定的棋盘网格——棋局只受棋子总数约束。这个模块的设计意图见 hive.h非常明确提供一个与 AlphaZero或类似算法兼容的棋盘状态与动作空间表示。由于六边形棋子在 2D 卷积中难以直接表达且桌面理论上是无限的实现必须解决如何用有界网格表达无界棋盘这一核心问题。此外模块还支持 UHP 协议由 Mzinga 项目定义的 Hive 软件互操作标准使本实现可以作为 UHP 兼容引擎的一部分与其他 Hive 软件对接并复用社区积累的海量 Hive 对局数据用于训练见 hive.h。在 OpenSpiel 的游戏类型注册表中hive被声明为双人max_num_players2、顺序回合kSequential、无随机性kDeterministic、完美信息kPerfectInformation、零和kZeroSum、终止时结算奖励kTerminal并提供信息状态字符串与观测张量见 hive.cc。二、参数配置棋盘半径、扩展棋子与终端输出hive游戏通过 OpenSpiel 标准的GameParameters进行配置参数规格定义于 hive.cc 的kGameType注册表并在 hive.h 中有完整注释参数类型默认值说明board_sizeint8底层六边形棋盘的半径kDefaultBoardRadius最大为14kMaxBoardRadius见 hive_board.h。调小可降低张量稀疏度与计算复杂度uses_mosquitobooltrue是否使用 Mosquito蚊子扩展棋子uses_ladybugbooltrue是否使用 Ladybug瓢虫扩展棋子uses_pillbugbooltrue是否使用 Pillbug臭虫扩展棋子ansi_color_outputboolfalse是否在终端输出中启用 ANSI 彩色打印关闭时ToString()直接输出 UHP 字符串见 hive.cc典型用法如下hive hive(board_size14) hive(uses_mosquitofalse,uses_ladybugfalse,uses_pillbugfalse) hive(ansi_color_outputtrue)参数对张量与训练的影响board_size决定观测张量的空间尺寸——棋盘被建模为边长为2 * board_size 1的正方形网格SquareDimensions()见 hive_board.h。Hive 全部 28 枚棋子含扩展理论上可排成一条直线因此满半径棋盘需要约 29×29 的网格但实际对局中绝大多数棋子都落在初始棋子周围约 6 个单位内见 hive.h。使用小于kMaxBoardSize的半径意味着个别极端棋局无法被完美表示此时出界的移动会被判定失败并强制以平局终止见 hive.cc 的DoApplyAction与force_terminal_机制——不过 README 也明确指出能逼近边界长度的棋局在实践中极其罕见这个折中是可接受的。三个扩展开关共同决定虫种数量num_bug_types_基础 5 种Queen、Ant、Grasshopper、Spider、Beetle每启用一个扩展则1见 hive.cc 的HiveGame构造函数。棋子总数kBugCounts {1, 3, 3, 2, 2, 1, 1, 1}hive_board.h即 Queen×1、Ant×3、Grasshopper×3、Spider×2、Beetle×2 及三个扩展各×1双方合计 28 枚。三、状态表示从无限六边形平面到固定尺寸张量3.1 六边形网格的矩形化观测张量要求把六边形网格映射为矩形网格以便进行 2D 卷积。模块采用轴向坐标系(q, r)Axial Coordinates隐含第三个坐标s -q - r见 hive_board.h位置还带有高度hh0表示地面用于表示 Beetle 等可爬叠的棋子。棋盘内部存储为扁平的 2D 数组轴向位置(q, r)映射到索引grid_[R Radius()][Q Radius()]见 hive_board.h 的AxialToIndex。当棋子移动接近棋盘边缘时HiveBoard::RecenterBoard会把所有棋子整体向中心平移以重置棋盘从而用有界网格近似无限桌面见 hive_board.cc若平移后仍越界则移动失败。3.2 观测张量的特征平面HiveState::ObservationTensorhive.cc将状态编码为多个 2D 特征平面形状为[通道数, 2*radius1, 2*radius1]。通道数由ObservationTensorShape()计算hive.hnum_bug_types_ * 2 # 双方每种虫子的落子位置one-hot 2 # 双方被钉住articulation point的棋子 2 # 双方可放置新棋子的位置 2 # 双方被覆盖covered的棋子 1 # 当前行动方指示平面以全部扩展启用8 种虫为例各平面索引hive.h平面索引含义0–7当前玩家每种虫子的落子位置8–15对手每种虫子的落子位置16 / 17当前玩家 / 对手被钉住的棋子18 / 19当前玩家 / 对手的合法放置位置20 / 21当前玩家 / 对手被覆盖的棋子22全 0 表示白方行动全 1 表示黑方行动平面数量随扩展开关动态变化BugTypeToTensorIndexhive.cc会跳过未启用的虫种保证张量通道与启用虫种一一对应从而允许任意扩展组合。3.3 核心概念Pinned、Covered 与 PlaceablePinned钉住位于割点articulation point的棋子。割点即在连通图中移除后会分裂图结构的顶点。若某棋子处于割点位置移动它会违反蜂群一体One-Hive规则因此被禁止移动。割点集合由UpdateArticulationPoints用 DFS 的 low-point 算法维护见 hive_board.cc算法来源注释指向 biconnected component / cutpoints 经典资料。Covered被覆盖被爬叠在身上的其他棋子压住的棋子不能移动。棋盘最多允许 6 枚棋子爬上同一位置covered_tiles_数组容量为 7hive_board.h。Placeable可放置某玩家可以放置新棋子的空位需满足在自己影响范围内、不在对方影响范围内、且该位置为空三个条件IsPlaceablehive_board.cc。影响范围influence即己方所有地面棋子周围一圈的空位UpdateInfluencehive_board.cc。3.4 终端判定与回报胜负条件为对方蜂后六邻位全部被占IsQueenSurroundedhive_board.cc。Returns()返回 ±1一方胜或 0平局MinUtility-1、MaxUtility1、UtilitySum0hive.h。此外棋局达到kMaxGameLength 500步也强制平局hive.h。四、动作空间7 × 28 × 28 5488README 对动作空间给出了精确定义一次 Hive 动作包含三个要素——1) 选择要移动的棋子2) 选择它移动到的参照棋子或叠上去的棋子3) 相对参照棋子的方向六边形 6 条边 上方共 7 个方向见 hive_board.h 的Direction枚举。例如wA2 bL/表示白方第 2 只蚂蚁移动到黑方瓢虫的右上边缘。由于共有 28 枚棋子、7 个方向动作空间可视为 3D 矩阵尺寸为7 × 28 × 28 5488。源码中HiveGame::ActionsShape()返回{7, 28, 28}hive.hkNumDistinctActions 5488 11为 pass见 hive.h。4.1 动作编码MoveToAction/ActionToMovehive.cc实现了Move{from, to, direction}与动作 ID 的双向映射编码方式如同一维化 3D 数组[from][to][direction]首步特殊编码开局放置第一枚棋子没有参照物被编码为棋子叠在自身上方from to direction kAbove解码时还原为无参照hive.ccpass 动作为最后一个动作 IDNumDistinctActions() - 1hive.h。4.2 关于动作空间大小的说明README 明确指出这个表示并非完美存在少数永无可能被使用的动作例如把棋子移动到它自己旁边但它能覆盖所有合法移动。一个有趣的设计折中来自 Pillbug 扩展Pillbug 允许玩家移动对方的棋子因此不能假设被移动棋子一定属于当前玩家动作空间随之从 7×14×28 翻倍为 7×28×28。README 的待办清单中也将为不使用扩展棋子的棋局提供精简动作空间列为待实现事项。4.3 合法动作的生成LegalActions()调用HiveBoard::GenerateAllMoveshive_board.cc先生成放置动作若己方蜂后已落子则再为除最近移动过的棋子last_moved_Hive 规则禁止连续两次移动同一棋子外的所有己方在场棋子生成移动。若某玩家无任何合法动作则强制 passhive.cc。结果通过std::setAction去重后返回。放置规则的特殊性GeneratePlacementMoveshive_board.cc第 0 步白方必须在原点放置一枚非蜂后棋子编码为Move{tile, kNoneTile, kAbove}第 1 步黑方可以也是唯一一次允许紧贴对方棋子放置之后必须在己方影响范围内、且不与对方影响范围重叠的空位放置双方各自必须在第 4 回合总第 6、7 步之前落下蜂后否则只能选择蜂后。各类棋子的移动生成由GenerateMovesFor按虫种分发hive_board.cc虫种生成函数移动规则要点QueenGenerateValidSlides(distance1)滑移到相邻空位AntGenerateValidSlides(distance-1)无距离限制的滑移SpiderGenerateValidSlides(distance3)恰好 3 步滑移BeetleGenerateValidClimbs 地面滑移可爬叠高度差 ±1GrasshopperGenerateValidGrasshopperPositions沿某方向跨越棋子跳到首个空位LadybugGenerateValidLadybugPositions恰好 3 步爬上、横越、爬下只进不退Mosquito视邻位虫种而定在巢顶只能充当 Beetle地面可模仿相邻棋子PillbugGenerateValidSlides(1)GenerateValidPillbugSpecials特殊能力移动相邻的任意颜色棋子目标不能是 pinned/covered/刚移动过的滑移合法性三条件GenerateValidSlides注释hive_board.h1) 棋子未被 pinned2) 棋子未被覆盖3) 物理上能滑入——滑动方向两侧顺时针、逆时针各一个邻位中恰好一个为空位可滑入、另一个必须被占据以保持与蜂群连通One-Hive 规则。第三个条件由IsGated实现hive_board.cc它也正是 README 待办清单中点名的性能热点之一。五、UHP 协议与 Mzinga 等外部引擎互操作本实现遵循Universal Hive Protocol (UHP)由 Mzinga 项目定义的标准棋局状态可以序列化为合法 UHP 字符串也可以从 UHP 字符串反序列化恢复。配合简单的 I/O 处理本模块甚至可直接充当 UHP 兼容的 Hive 引擎README 明确说明该用途。5.1 UHP 字符串格式HiveState::Serialize()hive.cc将四段信息以分号拼接GameTypeString;GameStateString;TurnString;MoveString1;...;MoveStringN各段由 hive.cc 中的函数生成GameTypeString如Base、BaseM、BaseMLP全部扩展由UHPGameString()按启用开关拼接GameStateStringNotStarted/InProgress/WhiteWins/BlackWins/Draw常量定义于 hive.h由UHPProgressString()根据步数与终局回报计算TurnString形如White[3]/Black[7][n]为回合序号(move_number 2) / 2MoveString以分号分隔的历史动作例如wS1;bS1 wS1-;wQ -wS1;...。5.2 动作的 UHP 表示Move::ToUHP()hive_board.cc定义了方向的符号约定NE 为后缀/、E 为后缀-、SE 为后缀\、SW 为前缀/、W 为前缀-、NW 为前缀\、Above 无符号。棋子本身用颜色前缀 虫种缩写 序号表示如wA2完整映射见HiveTile::ToUHPhive_board.cc与HiveTile::UHPToTilehive_board.h。pass 动作编码为字符串pass。反向解析由StringToAction完成hive.cc。5.3 反序列化HiveGame::DeserializeStatehive.cc将 UHP 字符串切分为 token校验 GameTypeString 与本游戏参数一致后按历史动作逐一ApplyAction重放棋局最后校验 GameStateString 与重放结果一致。顶层辅助函数DeserializeUHPGameAndStatehive.cc更进一步从 GameTypeString 自动推断扩展开关、构造Game对象并反序列化状态这正适合从对局档案如 Mzinga 生态积累的数据批量加载棋局。六、测试验证逐虫种移动正确性hive_test.cc 提供了全面测试是理解各虫种行为的最佳入口基础冒烟测试BasicHiveTestsL141-L189LoadGameTest、NoChanceOutcomesTest、RandomSimTest覆盖胜负、平局draw_game、强制 passforce_pass_game及所有扩展组合如hive(uses_mosquitofalse,uses_pillbugfalse)和最大棋盘半径board_size14、ANSI 彩色输出逐虫种走法测试TestBugMovesL208-L238为 Queen、Ant、Grasshopper、Spider、Beetle 及 Mosquito、Ladybug、Pillbug 各构造一个标准 UHP 棋局字符串改编自 nokamute 项目的 uhp_tests.txt再逐一断言合法/非法移动的掩码TestMovesL191-L206。例如 Queen 在给定局面下合法移动为wQ wG2-;wQ -bG2;wQ wG1/非法移动为wQ -bB1;wQ -bQ;wQ \bS1同时还有 Beetle、Ladybug、Pillbug 的 gate 特殊用例。七、使用方式作为 OpenSpiel 的标准游戏hive可通过任意语言接口加载。C 中open_spiel::LoadGame(hive)即可获得游戏对象Python 接口对应pyspiel.load_game(hive(...))。反序列化历史棋局可使用DeserializeUHPGameAndState例如测试文件中的BaseMLP;InProgress;White[9];wS1;bS1 wS1-;wQ -wS1;...这类字符串。该模块已纳入 OpenSpiel 统一构建体系见 open_spiel/games/CMakeLists.txt按项目标准流程构建后即可运行测试目标。八、已知限制与未来方向源自 README 作者记录README 的 To-do 与 Future Improvements 部分记录了作者的计划与思考其中已实现的与仍待办的可作如下对照待办清单To-do优化性能热点HiveState::GenerateValidSlides()与HiveState::IsGated()已在上一节看到这正是滑移合法性检查的核心也是每步移动生成最耗时的部分实现 Zobrist 哈希以支持三次重复局面强制平局社区非官方规则实现Undo()、Perft()支持从文件批量加载 UHP 棋局字符串用于训练或统计创建独立的、带 I/O 处理的 UHP 兼容引擎二进制为不使用扩展棋子的棋局提供精简动作空间。未来改进思路按作者评估的潜力排序更精确的动作空间社区提出的 Direction-Based Notation 等替代记法可能更优其天然覆盖旋转与反射对称六边形 CNN / 专用滤波器README 指出当前对六边形数据做方形重排后再做 2D 卷积存在固有缺陷——标准 3×3 卷积核包含的 9 个值无法准确对应六边形的 6 个邻居多了对角线上的 2 个。改进选项包括自定义 3×3 核将对角线值置零或采用 HexCNN、旋转不变 CNN 等更先进的实现第一种方案最易嵌入现有 AlphaZero 框架图/节点表示鉴于 Hive 棋局本身结构如同图作者认为图神经网络GNN有学习潜力并引用了将 GNN 应用于 AlphaZero 棋类 AI 的近期研究作为佐证。九、小结OpenSpiel 的hive模块是一个以 AlphaZero 训练为目标而精心设计的 Hive 环境通过board_size参数化的有界六边形棋盘近似无限桌面通过 7×28×28 的固定动作空间覆盖全部合法移动并为 Pillbug 的跨色移动预留了空间通过 UHP 协议与外部 Hive 生态无缝互操作。源码中割点pinned、覆盖covered、影响范围influence、门控gated等判定逻辑加上逐虫种的严格测试共同保证了状态表示与移动生成的正确性。如果你正在为六边形棋盘类游戏设计强化学习环境或需要从 UHP 对局档案中批量加载训练数据本模块的实现思路见 open_spiel/games/hive/hive.cc、hive_board.h 与 hive_test.cc值得直接参考与复用。赞分享人工智能强化学习深度学习【免费下载链接】open_spielOpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games.项目地址https://gitcode.com/gh_mirrors/op/open_spiel点击查看免费下载相关推荐象棋游戏低层设计实战基于 C 的 8×8 棋盘、六类棋子与回合制流程实现解析象棋游戏低层设计实战基于 C 的 8×8 棋盘、六类棋子与回合制流程实现解析 这篇技术指南以 awesome low level design 仓库中 s示例工程AlphaZero Gomoku深度学习驱动的五子棋AI实现指南AlphaZero Gomoku深度学习驱动的五子棋AI实现指南 AlphaZero Gomoku项目展示了如何利用深度强化学习技术通过纯粹的自我对弈训练来人工智能强化学习深度学习终极指南如何用中国象棋AlphaZero打造你的AI象棋大师 终极指南如何用中国象棋AlphaZero打造你的AI象棋大师 中国象棋AlphaZeroCCZero是一款基于AlphaZero深度强化学习算法的中人工智能强化学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考