当前位置: 首页 > 知识库问答 >
问题:

了解Minimax的Alpha-Beta修剪版本

万俟飞语
2023-03-14

我目前正在从事我的第一个C项目,并选择使用基于Minimax的AI编写一个Connect Four(又名Score 4),更具体地说是基于Alpha-Beta修剪方法。

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

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

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

有人能解释一下我对这个算法的理解错在哪里吗?可以在维基百科上找到伪代码的一个版本。

提前非常感谢!

共有1个答案

别宏盛
2023-03-14

这意味着-无穷大分数在某一点上必然会丢失

正是因为交替的min, max截止函数,-infinity不会“丢失”:如果您的算法检测到丢失的情况,它将推断上层节点是一个丢失的移动(通过将其归因于min函数的-infinity值),因此该分支将从大父节点中剪除(通过选择另一个具有更高分数的分支凭借max函数)。

由于选择了另一个分支,所以“坏”分支不会被ai玩家拿走,从而避免了输球和输球的情况。

 类似资料:
  • 我试图让Alpha-beta修剪工作,但与我的Minimax函数相比,它给了我完全错误的动作。这是我的极大极小函数,它现在工作得很好。 这是我的Alphabeta修剪函数 两者都使用相同的评估,不确定这里出了什么问题。谢谢你的帮助。

  • 在我的方法newminimax49中,我有一个minimax算法,它利用了本文中建议给我的记忆和其他一般性改进。该方法使用一个简单的启发式电路板评估函数。我的问题基本上是关于alpha-beta修剪,即我的minimax方法是否使用alpha-beta修剪。据我所知,我相信这是真的,然而,我用来实现它的东西似乎太简单了,不可能是真的。此外,其他人建议我使用alpha-beta剪枝,正如我所说的,我

  • 我正在尝试为一个游戏创建一个AI播放器,使用带有alpha-beta修剪的minimax算法。我在正确地执行它时遇到了一些困难。我有两个功能要使用,一个用于评估给定玩家(返回一些分数)getBoardScore的当前棋盘状态,另一个用于返回每个可能移动(从给定玩家的给定棋盘状态)GetPossibleBoard创建的所有可能棋盘状态。 我的AI通过最初调用alphaBeta,将其传递到当前的板状态

  • 抱歉,这是我的笔记。 在最后一天,我一直在阅读极大极小树和阿尔法数据修剪,为我的项目做准备。这是c语言中奥赛罗的实现。 我阅读了大量关于它的资料,我知道它被问了很多。在我开始我的评估功能之前,我想充分了解这一点。 在随附的图像中,我无法弄清楚函数和究竟会做什么,任何输入将不胜感激。 如果任何人有任何提示或事情,我应该注意在实现这个和我的奥赛罗评估功能,我愿意采取任何帮助,我可以找到。

  • 这是我的极小极大方法,它实现了alpha beta修剪和记忆: 作为一个测试游戏,在我的主要方法中,我在某处放置一个X(X是玩家),然后调用newminimax499查看我应该在哪里放置O(计算机): } 该方法返回计算机应该在何处播放它的O(在本场景中为6),因此我按照指示放置O,自己播放X,调用newminimax499并再次运行代码以查看O要在何处播放,依此类推。 在这次特殊的运行之后,我得

  • 我正在使用minimax算法为connect four编写AI。为了增加深度,我正在使用alpha-beta修剪。然而,我的代码得到了错误的结果。我很难找出哪里出了问题。