了解 Minimax 的 Alpha-Beta 剪枝版本

Understanding Alpha-Beta Pruning version for Minimax

我目前正在处理我的第一个 C++ 项目,并选择使用基于 Minimax 的 AI 编写 Connect Four(也称为 Score 4),更具体地说是在 Alpha 上Beta 修剪方法。

到目前为止,我了解到 AB 修剪包含一个递归算法,该算法将 alpha 和 beta 参数作为参数,"limits" 超过它们您将不会在您的游戏树中寻找。此外,我们定义了一个最大化玩家和一个最小化玩家,前者是第一个开始玩游戏的玩家。最后,有一个"depth",我理解为游戏的"difficulty level",随着AI走得越深,它对动作的预测就越好;因此计算机赢得比赛的机会就越大。

但是,我的问题如下。假设在某个时候,计算机注意到它的对手(人类玩家)有 3 连胜并且离获胜还有一步之遥。因此,我的启发式函数应该 return -infinity 让 AI 理解 "imminent danger" 并让它发挥作用以防止人类玩家获胜:因此递归停止。

但问题来了:当递归停止时,算法返回到游戏的前一层("shallower depths levels"),第一个玩家将交替读取 max(alpha, alphabeta(depth - 1)) 和第二名玩家 min (beta, alphabeta(depth - 1))。这意味着 -infinity 分数必然会在某个时候丢失,因此 AI 可能永远不会理解游戏已经失败。

有人可以向我解释一下我对这个算法的理解哪里错了吗?伪代码的一个版本可以在 Wikipedia 上找到。

非常感谢!

This means that the -infinity score will necessarily be lost at some point

-infinity 不会是 "lost" 正是因为交替的最小值、最大值截止函数:如果您的算法检测到失败的情况,它会推断出上面的节点是失败的移动(通过将其归因于由于 min 函数,该 -infinity 值),因此该分支将从祖父节点中删除(通过借助 max 函数选择另一个具有更高分数的分支)。

由于选择了另一个分支,所以"bad"分支不会被ai玩家,从而避免了输棋和输棋的情况。