You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AI井字棋Minimax算法代码疑问及原理咨询

AI井字棋Minimax算法疑问解答

问题1:代码设计逻辑及返回值大于负无穷的原因

这段代码是Minimax算法中最大化/最小化玩家的初始状态初始化逻辑:

  • 当当前玩家是max_player(即要最大化得分的玩家,比如AI自身)时,初始化best的分数为-math.inf(负无穷)。这是因为max_player需要在所有可能的落子中选择得分最高的选项,负无穷是最小的可能值,任何合法的后续得分都会比它大,确保第一次比较时就能更新best的分数。
  • 当当前玩家是对手(min_player,要最小化得分的玩家)时,初始化best的分数为math.inf(正无穷)。同理,min_player要选得分最低的选项,正无穷是最大的可能值,任何合法后续得分都会比它小,保证第一次比较就能更新。

至于返回值大于初始负无穷的原因:
Minimax递归会一直走到游戏终止状态(某玩家获胜、平局),此时会返回具体的得分(比如获胜得+10、失败得-10、平局得0),这些得分都远大于-math.inf。递归回溯时,每一层的玩家都会基于子节点的得分更新best的分数,最终返回的是经过筛选后的实际游戏得分,必然大于初始的负无穷值。

问题2:传入other_player的设计原因及是否需要max_player

传入other_player是为了实现玩家交替落子的模拟:
Minimax算法的核心是模拟双方轮流决策的过程,当前玩家走完一步后,下一个决策的是对方玩家,所以递归调用时需要切换为other_player,让下一层递归处理对方的回合。

不需要额外传入max_player的原因:
max_player是整个算法的固定参考(比如AI自身就是max_player),在递归的每一层中,只需要对比当前player和max_player,就能判断当前是最大化层还是最小化层,进而执行对应的选优逻辑(选最大分/最小分)。max_player通常是在Minimax函数的入口处就确定的,不需要在递归中重复传递。

问题3:Minimax算法的递归运行机制

结合井字棋场景,递归运行流程如下:

  1. 初始调用:从当前真实棋盘状态出发,以AI(max_player)作为当前玩家调用Minimax函数。
  2. 遍历合法落子:当前玩家遍历棋盘上所有空位置,对每个位置模拟落子,生成新的棋盘状态。
  3. 递归进入下一层:将新棋盘状态和对方玩家(other_player)传入Minimax,让对方玩家进行决策。
  4. 终止条件判断:当递归到终止状态(棋盘满、某玩家连成三子)时,根据结果返回对应得分:
    • AI获胜:返回+10
    • 人类玩家获胜:返回-10
    • 平局:返回0
  5. 回溯选优:
    • 若当前是max_player层:从所有子节点的得分中选最大的那个,作为当前落子的得分,同时记录对应的落子位置。
    • 若当前是min_player层:从所有子节点的得分中选最小的那个,作为当前落子的得分。
  6. 返回结果:最终递归回溯到初始调用层,返回AI的最优落子位置和对应得分。

内容的提问来源于stack exchange,提问作者d2w3t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:45:17