如何使用Alpha Beta选择节点

时间:2016-12-31 16:10:28

标签: tree artificial-intelligence evaluation minimax pruning

我正在使用带有Alpha Beta修剪的MiniMax为奥赛罗游戏实现AI。我已经实现了一个Alpha Beta算法,告诉我我可以获得的值,但不是我应该选择哪个节点?所以我的问题是如何使用Alpha-Beta告诉我应该选择哪个节点,而不是结果值。这是我的Alpha-Beta算法的伪代码。

01 function alphabeta(node, depth, α, β, maximizingPlayer)
02      if depth = 0 or node is a terminal node
03          return the heuristic value of node
04      if maximizingPlayer
05          v := -∞
06          for each child of node
07              v := max(v, alphabeta(child, depth – 1, α, β, FALSE))
08              α := max(α, v)
09              if β ≤ α
10                  break (* β cut-off *)
11          return v
12      else
13          v := ∞
14          for each child of node
15              v := min(v, alphabeta(child, depth – 1, α, β, TRUE))
16              β := min(β, v)
17              if β ≤ α
18                  break (* α cut-off *)
19          return v

1 个答案:

答案 0 :(得分:0)

如果您只想知道根位置的最佳移动,则足以记住根位置中哪个移动得分最高。为此,只需返回分数即可。不需要修改伪代码。

当您询问关键节点的路径时,我想您正在询问重建principal variation的方法,该方法可以深入了解搜索所期望的一系列移动。

理论上,您只需返回递归调用的值和主要变体即可。这允许您重建路径。 Triangular PV-Tables是为此目的而优化的数据结构。

如果您的搜索使用transposition table,更简单的方法就是启动根位置并在转置表中查找最佳移动。然后进行移动并重复(查找最佳移动,进行最佳移动,再次查找等),直到游戏结束或未找到任何条目。最后,所做的动作是主要的变化。

转置表方法不像显式跟踪主要变化那样精确,但实现起来很简单,并且在搜索过程中不会增加任何开销。