0

我目前正在处理我的第一个 C++ 项目,并选择使用基于Minimax的 AI 编写 Connect Four(又名得分 4) ,更具体地说,使用 Alpha Beta Pruning 方法。

到目前为止,我了解到 AB 修剪包含一个递归算法,该算法将参数 alpha 和 beta 纳入其中,这是您在游戏树中不会寻找的“限制”。此外,我们定义了一个最大化和最小化玩家,前者是第一个开始玩游戏的玩家。最后,还有一个“深度”,我理解为游戏的“难度级别”,AI越深入,它对动作的预测就越好;因此计算机赢得比赛的机会就越大。

但是,我的问题如下。假设在某个时刻,计算机注意到它的对手(人类玩家)有 3 连胜并且距离获胜仅一步之遥。因此,我的启发式函数应该返回 -infinity 以使 AI 了解“迫在眉睫的危险”并使其发挥作用以防止人类玩家获胜:因此递归停止。

但这里有一个问题:当递归停止时,算法会回到游戏的前几层(“较浅的深度级别”),在那里,第一个玩家max(alpha, alphabeta(depth - 1))和第二个玩家将交替阅读min (beta, alphabeta(depth - 1))。这意味着 -infinity 分数必然会在某个时候丢失,因此 AI 可能永远不会明白游戏输了。

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

首先十分感谢 !

4

1 回答 1

0

这意味着 -infinity 分数必然会在某些时候丢失

由于交替的最小、最大截止函数,-infinity 不会“丢失”:如果您的算法检测到失败的情况,它将推断上节点是失败的移动(通过将 -infinity 值归因于min 函数),因此该分支将从祖父节点中剪除(通过使用 max 函数选择另一个得分更高的分支)。

由于已经选择了另一个分支,“坏”分支不会被ai玩家采取,从而避免了失败的举动和失败的情况。

于 2015-02-03T06:45:50.797 回答