ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用easyAI求解博弈游戏:迭代加深与深度优先搜索算法实战

用easyAI求解博弈游戏:迭代加深与深度优先搜索算法实战 用easyAI求解博弈游戏迭代加深与深度优先搜索算法实战【免费下载链接】easyAIPython artificial intelligence framework for games项目地址: https://gitcode.com/gh_mirrors/ea/easyAIeasyAI 是一个纯 Python 编写的人工智能框架专为井字棋、四子棋、黑白棋等双人博弈游戏设计。它不仅能让你快速搭建游戏并和 AI 对战还内置了完整的博弈游戏求解能力通过迭代加深搜索Iterative Deepening与深度优先搜索Depth First Search两种核心算法你可以在几分钟内算出一个游戏在双方都完美发挥前提下的最终结局并提取必胜策略。本文将通过真实案例带你零基础掌握这两种算法在 easyAI 中的实战用法。为什么需要求解一个博弈游戏普通对战只关心这步棋怎么下赢而求解Solving要回答一个更根本的问题如果双方都不犯错先手能赢吗1表示先手必胜-1表示先手必败0表示可以逼平求解结果可以直接转化为必胜策略这正是 easyAI 最强大的功能之一。相关实现位于easyAI/AI/solving.py底层由easyAI/AI/Negamax.py的负极大值算法含 alpha-beta 剪枝驱动。认识两种求解算法迭代加深 vs 深度优先搜索迭代加深搜索层层逼近最优解 迭代加深搜索的思路很直观先用浅的搜索深度比如只看 2 步跑一次 Negamax再逐步加深4 步、6 步、8 步……直到某一层的得分能明确判定胜负才停止。它的好处是浅层搜索的结果会被保留下来帮助深层搜索更快收敛同时每一层都从初始局面出发保证越算越准。在 easyAI 中对应的函数是solve_with_iterative_deepening。深度优先搜索一路钻到底 ️深度优先搜索则完全不同它一口气把棋局探索到终局分出胜负或和棋然后从终局倒推标记每个局面的属性——所有走法都通向失败的局面记为必败存在一步能让对手必败的局面记为必胜层层回溯直到根节点。这种方式不需要设置搜索深度逻辑简单直接但不适合步数无限的游戏也不会告诉你最快几步赢。实战第一步安装与准备 ⚙️先克隆或安装项目git clone https://gitcode.com/gh_mirrors/ea/easyAI cd easyAI pip install -e .或者直接用 pip 安装pip install easyAI依赖安装完成后就可以开始求解了。以下案例代码都可参考项目中的easyAI/games/Nim.py和tests/test_negamax.py。实战用迭代加深算法求解取子游戏以经典的骨头堆游戏GameOfBones为例一堆骨头双方轮流取 1~3 根取走最后一根的人输。定义游戏类只需继承easyAI/TwoPlayerGame.py中的TwoPlayerGame实现possible_moves、make_move、is_over等几个方法即可。然后一行代码求解from easyAI import solve_with_iterative_deepening result, depth, move solve_with_iterative_deepening( gameGameOfBones(), # 游戏实例 ai_depthsrange(2, 20), # 从2层逐步加深到19层 win_score100, # 超过该分数视为获胜 )解读结果 r / d / m 迭代加深求解会返回三个值含义非常明确返回值含义本例结果r结局判定1 必胜 / -1 必败 / 0 平局1先手必胜d最多几步内分出胜负105 个回合内m先手第一步的最佳走法3先取 3 根也就是说只要先手第一步取 3 根之后每一步都按最优解走就稳操胜券。实战用深度优先搜索算法求解游戏如果想验证另一种算法用solve_with_depth_first_search即可它只返回结局判定from easyAI import solve_with_depth_first_search r solve_with_depth_first_search( gameNim(), # 四堆五子的尼姆游戏 win_score80, )运行后r同样为-1、0或1三者之一表示先手的最终命运。注意它不返回步数与走法信息量比迭代加深少一些。快速对比两种算法怎么选⚖️对比项迭代加深搜索深度优先搜索函数solve_with_iterative_deepeningsolve_with_depth_first_search思路由浅入深重复搜索一路搜索到终局再回溯返回值结局 步数 最佳首步仅结局适用场景绝大多数游戏步数有限的游戏限制需指定深度列表无限步数的游戏不可用选择建议想拿到完整攻略第一步走哪、几步赢选迭代加深只关心最终胜负、追求简单直接选深度优先搜索。提速技巧置换表Transposition Table博弈树中大量局面会重复出现。置换表把这些局面及其最优走法缓存下来避免重复计算可大幅加速求解。from easyAI.AI import TranspositionTable tt TranspositionTable() GameOfBones.ttentry lambda game: game.pile # 局面唯一标识 result, depth, move solve_with_iterative_deepening( gameGameOfBones(), ai_depthsrange(2, 20), win_score100, tttt, # 传入置换表加速 )实现细节可查看easyAI/AI/TranspositionTable.py。进阶玩法让 AI背下必胜策略 求解完成后tt里已经存满了每个局面的最优走法。这时你可以直接把它当作 AI 棋手它甚至不需要思考就能完美对局from easyAI import AI_Player, Human_Player game GameOfBones([AI_Player(tt), Human_Player()]) game.play() # 你将永远无法战胜它 这就是离线求解 在线秒下的经典模式也是 easyAI 的魅力所在。总结通过本文的实战你已经掌握了两大博弈游戏求解算法的核心用法迭代加深搜索用于获取完整必胜策略深度优先搜索用于快速判定胜负配合置换表还能大幅提速。如果你也想亲手验证井字棋、尼姆、四子棋这些内置游戏都在easyAI/games/目录下的先手胜负现在就 clone 项目动手试试吧【免费下载链接】easyAIPython artificial intelligence framework for games项目地址: https://gitcode.com/gh_mirrors/ea/easyAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表