alpha-beta 修剪会消除我的极小极大解中的随机性吗?

Will alpha-beta pruning remove randomness in my solution with minimax?

现有实现:
在我使用 minimax 实现 Tic-Tac-Toe 时,我寻找所有可以获得最佳结果的框并随机选择其中 1 个,这样就不会每次都显示相同的解决方案。

对于前。如果返回的列表是 [1, 0 , 1, -1],在某些时候,我会随机选择两个最高值。

关于Alpha-Beta修剪的问题:
根据我的理解,当算法发现它从一条路径中获胜时,它就不再需要寻找可能/可能不会导致获胜案例的其他路径。

那么,这是否会像我感觉的那样,导致导致最佳解决方案的最早可能的框显示为结果,并且每次看起来都一样?例如,在第一步时,所有动作都会导致平局。那么每次都会选中第一个框吗?

我怎样才能像 minimax 解决方案一样为解决方案带来随机性?我现在想到的一种方法可能是将索引随机传递给 alpha-beta 算法。所以结果将是该随机排序的位置列表中的第一个最佳解决方案。

提前致谢。如果有这方面的文献,我很乐意阅读。 如果有人可以 post 一些关于 aplha-beta 修剪的好参考,那将是非常好的,因为我很难理解如何应用它。

要在 alpha-beta 修剪中随机选择多个最佳解决方案(全部相等),您可以修改评估函数以在评估游戏状态时添加一个非常小的随机数。您应该只确保该随机数的大小永远不会大于两个状态评估之间的真实差异。

例如,如果您的游戏状态的真实评估函数只能 return 值 -101,您可以添加一个随机生成的[0.0, 0.01] 范围内的数字到每个游戏状态的评估。

没有这个,alpha-beta 修剪不一定只找到一个解决方案。考虑 this example from wikipedia。在中间,您看到找到了两个评估为 6 的解决方案,因此它可以找到多个。我确实认为它仍然会在根节点找到导致最佳解决方案的所有移动,但实际上并没有在树的深处找到所有解决方案。假设在示例图像中,中间得分为 9 的修剪节点实际得分为 6。它仍然会在那里被修剪,因此不会找到特定的解决方案,但是仍然会找到从根节点到它的移动(根的中间移动)。所以,最终,你将能够到达它。

一些有趣的笔记:

  • 此实现也适用于 minimax,并且无需存储多个(同样好的)解决方案的列表
  • 在比 Tic Tac Toe 更复杂的游戏中,您无法搜索完整状态 space,像这样为最大玩家添加一个小随机数并为最小玩家减去一个小随机数实际上可能略微改进您的启发式评估功能。其原因如下。假设在状态 A 中您有 5 步可用,而在状态 B 中您有 10 步可用,所有这些都会导致相同的启发式评估分数。直觉上,状态 B 的后继者可能稍微好一点,因为你有更多可用的动作;在许多游戏中,可用的移动越多意味着您处于更好的位置。因为您为状态 B 的 10 个后继者生成了 10 个随机数,所以生成的最高随机数也更有可能在这 10 个中(而不是为 A 的后继者生成的 5 个随机数)