我正在实现一个Alpha Beta修剪算法,该算法将用于在奥赛罗游戏中获得最佳移动。当算法到达叶节点(即没有有效移动或达到最大深度)时,我基于此计算该节点的启发式值:
最大化玩家(正在运行算法并将使用算法返回的移动的玩家)在这个节点的棋盘上有多少块砖块?(每个砖块1块)
最大化玩家在这个节点上有多少有效动作?(每招10)
最大化玩家有多少角砖?(每块角砖100)
问题是:当不是玩家在叶节点中交出的最大化时,我该怎么办?然后就不可能计算出他的有效动作,因为轮不到他。我可能误解了整个 alpha-beta 修剪算法,或者至少误解了启发式函数应该如何工作。有人可以给我一个提示吗?
谢谢。
无论您使用的是传统的算法最小极大公式,还是negamax公式,您都应该从要移动的一侧的角度来评估板。
然后,两种算法以不同的方式处理值;minimax只是有单独的代码段,无论是MAX还是MIN玩家,而negamax分配“val = - negamax(child)”。
ChessProgrammingWiki有很好的解释和伪代码:Minimax和Negamax。
我有以下奥赛罗(reversi)游戏的阿尔法-贝塔极小值的实现。不知怎的,这永远不会返回正确的行动。它似乎返回了我在函数(0,0)中设置的默认操作和第二个值-32768,这意味着它在MAX子例程中被删减了。关于我可以改进什么以及如何解决这个问题,有什么建议吗? 注意:我已经确定了大部分正确返回的继任者。目前的最大深度是8。电脑玩家的pn(玩家数量)是1,人类玩家的是0。第一阶段,0,是MINIMA
在我的方法newminimax49中,我有一个minimax算法,它利用了本文中建议给我的记忆和其他一般性改进。该方法使用一个简单的启发式电路板评估函数。我的问题基本上是关于alpha-beta修剪,即我的minimax方法是否使用alpha-beta修剪。据我所知,我相信这是真的,然而,我用来实现它的东西似乎太简单了,不可能是真的。此外,其他人建议我使用alpha-beta剪枝,正如我所说的,我
我有一个Tic Tac Toe游戏,它使用了极大极小算法。我想通过添加alpha-beta修剪来改进这一点。然而,阿尔法-贝塔法似乎无法有效地计算移动。它只是把它的一块放在下一个可用的空间里,不管它是不是最佳的移动。我对极小极大法没有这个问题。我确信这是我一直忽略的一些简单的事情,所以请原谅我。我用这个教程来学习minimax,用这个教程来学习alpha-beta修剪。 这是极小极大类。它包括阿尔
我正在用Java做一个国际象棋游戏,并且(我认为)已经成功地为AI玩家实现了Negamax。我在添加阿尔法贝塔剪枝来改进算法时遇到了一些麻烦。我已经尝试了下面的教程和示例代码,但就是不明白它是如何工作的。 以下是我目前必须获得最佳移动的代码: 这是我尝试将aplha-beta修剪添加到我的(工作)内切方法中: 最后是控制台的外观 任何帮助都将不胜感激。提前感谢。
我目前正在从事我的第一个C项目,并选择使用基于Minimax的AI编写一个Connect Four(又名Score 4),更具体地说是基于Alpha-Beta修剪方法。 到目前为止,我了解到AB修剪包含在一个递归算法中,该算法考虑了一个alpha和一个beta参数,这是您在游戏树中找不到的“极限”。此外,我们定义了最大化和最小化玩家,前者是第一个开始玩游戏的玩家。最后,还有一个“深度”,我把它理解
我正在尝试用Java开发游戏《奥赛罗》,我正在努力寻找玩家可用的动作(而不是电脑)。 比如我是玩家1,我在玩白色的棋子, 检查按钮是否是空的。(我使用按钮作为瓷砖) 检查是否有相反颜色的邻居。 如果有,继续检查每个方向有相反的颜色,直到 如果我们到达边界-返回false. 如果我们达到我们的颜色-把所有的碎片变成我的颜色。 我在努力实现3。五,。 我如何迭代通过所有的方向(最大的8个方向,如果我在