我理解的是:一名白人球员采取行动(让我们称之为move1)。第一个动作保存为alpha(玩家可以保证的最小值)。现在,如果我们通过白色(move2)移动到下一个可能的移动,并且看到黑色玩家的第一个响应导致比alpha更差的估值,我们可以跳过所有可能的黑色反击移动,因为我们已经知道当白色移动时2 ,最糟糕的结果可能比move1的最坏结果更糟糕。
但是,我不明白的是beta变量。从国际象棋编程wiki我读到:'最小化玩家得到保证的最高分'。但我无法真正理解它背后的想法。
有人可以用非常简单的术语解释一下吗?非常感谢你。
答案 0 :(得分:3)
在国际象棋中,没有简单的方法来判断move1是否优于move2(来自你的例子)。通过查看“硬”参数来实现近似:片段的数量和值,双或自由棋子的存在,......通常这样的近似被插入到极小极大算法中。
简单来说,这个想法如下:首先,扩展所有可能的移动(白 - 黑 - 白 - 黑 - ......),直到达到预定义的深度或时间限制。这将创建一个棋盘位置树(移动为边缘),并使用启发式(如上所述)评估叶子。然后,树被折叠,最终导致对move1与move 2的评估。
崩溃是如何工作的?它从树的叶子开始,并为每个节点(也称为板位置)分配一个值。对于已知所有子项的值的每个节点,将汇总子项的值:如果它是白色的,则获取白色的最佳值(最大值);如果它是黑色的,那么最差(最小)。因此名称为minimax。重复此过程,直到达到根。
假设以下董事会职位:
A
| \
B1 B2
| | \
A11 A21 A22
现在假设以下评估:A11 = 0,A21 = -1,A22 = +1(正值对白色有利)。我们从近似中假设位置A21优于A22(对于黑色),因此我们将-1分配给节点B2。对于B1,这是明确的,它的值是0.现在我们假设B1比白色的B2好,因此A的值是0,白色应该移动到达到位置B1。
这里的想法不是构建整棵树,而是为了实现早期截止,深度优先搜索更有希望的移动。在上面的例子中,如果我们首先从左到右走树(A-B1-A11-B2-A21 -...),我们知道在评估A21后,位置B2比白色的位置B1更差。因此,不再需要评估A22。 Alpha和beta只是存储当前已知的最佳白色移动的评估,以及当前已知的最佳黑色回复。树的节点走的顺序(初始排序)确定是否以及有多少可能的截止。来自维基百科:
通常在alpha-beta期间,子树暂时由第一个玩家优势(当许多第一个玩家移动是好的时候,并且在每个搜索深度,第一个玩家检查的第一个移动是足够的,但是所有第二个玩家响应)被要求试图找到反驳),反之亦然。 ...
如果排序不是最理想的,则必须完全探索更多的子树。
另见 iterative deepening depth-first search
严格地说,树是DAG,因为相同的棋盘位置可以通过不同的移动组合来实现(例如,transpositons)。使用hash table来检测相同的位置,这将节省大量的计算工作。
答案 1 :(得分:2)
基本上这个想法是 alpha 和 beta 是最佳结果的上限和下限,来自你已经探索过的游戏树,所以超出这些界限的任何事情都不值得探索。
我已经有一段时间了解了minimax和alpha-beta修剪细节,但这是我记忆中的要点。
正如你所说,如果我们已经知道白色的move1
得分为10,而在检查move2
时,我们发现黑色会以这样的方式作出响应,即白色被强制为8分那么进一步研究move2
是不值得的;我们已经知道,我们可能做的最好的事情比我们所知道的另一种选择更糟糕。
但这只是minimax算法的一半。假设我们现在正在检查白色的move3
,并查看所有黑人的回答。我们探索了黑色的moveX
,发现白人对的回应可以强制得分至少为15.如果我们开始探索黑色的moveY
(仍然是对白色的原始move3
)并找到白色对moveY
的响应,这会强制得分至少为18,然后我们立即知道源自黑色moveY
的整个游戏树是毫无意义的;黑色永远不会成为moveY
,因为moveX
仅强制黑色让白色得分15,而moveY
强制黑色让白色得分18。
Alpha 表示我们已经知道white可以通过做出不同的选择来达到我们正在探索的最低分数。因此,一旦我们知道不可能超过 alpha ,就不值得继续探索任何路径,因为白色不允许我们到达那条道路。
Beta 表示我们已经知道黑人可以通过做出不同选择来达到我们正在探索的最大分数。因此,一旦我们知道不可能获得低于 beta 的可能性,就不值得继续探索任何路径,因为黑色不允许我们到达那条道路。