我目前正在处理我的第一个 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上找到伪代码的一个版本。
首先十分感谢 !