You need to enable JavaScript to run this app. 基于minimax算法的井字棋AI无法找到最优走法问题排查
优惠活动
大模型
产品
解决方案
定价
更多

基于minimax算法的井字棋AI无法找到最优走法问题排查

井字棋minimax AI得分异常问题排查

核心代码错误点

  • 最优走法选择逻辑作用域错位
    你写的最优得分筛选循环,被放在了遍历空落子位置的for循环内部:每尝试完1个落子、把走法推入possibleMoves数组后,就立刻执行一次选最优的逻辑,完全没等所有可能的落子遍历完成。
    这种写法下,假设第一个被遍历到的落子是会导致输局的位置,这时候possibleMoves数组里只有这1个元素,会直接把它标记为最优走法;后续哪怕遍历到能直接获胜的走法,因为循环内作用域和var变量提升的影响,最优索引的计算很容易被干扰,根本没法在全量走法集合里选出最高的10分赢局走法。
  • 空格判断的数据源引用错误
    代码中计算emptyCells时,使用了全局board数组做过滤,而非函数传入的gameBoard参数。递归过程中临时修改的是传入的gameBoard引用,空格判断却始终读取外层的原始棋盘数据,会导致递归分支漏算合法落子位置,棋盘状态和分支推演的实际状态不匹配,本应存在的获胜分支甚至不会被纳入计算。
  • 嵌套循环的变量重名问题
    外层遍历空格的循环用了变量i,内层筛选最优走法的循环也重新声明了i,在var的变量提升机制下,会直接修改外层循环的计数,导致空格遍历提前中断,漏算大量走法分支。

正确的逻辑顺序

所有可能的走法必须先全部收集完成,再统一做最优值筛选:

  1. 遍历所有空单元格,逐次模拟落子、递归计算对应走法的得分、撤销棋盘修改,把所有走法和得分存入possibleMoves数组
  2. 等全量走法收集完毕后,再根据当前是bot(取最高分max)还是人类玩家(取最低分min),统一遍历possibleMoves选出对应最优得分的走法
  3. 空格计算直接基于传入的gameBoard做过滤,不引用外部全局棋盘变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 18:27:03