【发布时间】:2016-12-31 16:10:28
【问题描述】:
我正在使用 MiniMax 和 Alpha Beta 修剪为黑白棋游戏实现 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
【问题讨论】:
-
不是结果值 - 但你也需要它。您需要退回 2 件东西。确切的答案取决于您的
node、编程语言等的定义。 -
@HenkHolterman 为什么我需要返回结果值?例如,如果我的树是二叉搜索树,我只需要知道要选择 2 个节点中的哪一个,而不是值是什么?当然,虽然我需要该值来确定选择哪个节点
-
您刚刚回答了自己:“确定哪个...”
-
我认为你不明白我的问题。该算法确定采取哪条路径并获得应获得的正确结果。我只需要回溯以找出它选择的初始节点,但由于我只有最终结果,我如何知道具有该值的节点的路径?
标签: tree artificial-intelligence evaluation minimax pruning