Alpha beta修剪伪代码理解

时间:2017-07-18 01:43:22

标签: algorithm graph-algorithm alpha-beta-pruning game-theory

我无法理解教科书中的以下伪代码。特别是,我不了解第一个功能。在我们计算v ← MAX-VALUE(state, −∞, +∞)之后,我们如何继续计算值v的操作?价值v的行动甚至意味着什么?是否为每个操作计算MAX-VALUE(Result(state, a) , −∞, +∞),并返回与v ← MAX-VALUE(state, −∞, +∞)相同的操作。通常情况下,我在本书中实现伪代码没有问题,但这次我严重陷入困境。有人可以帮我解释一下吗?

function ALPHA-BETA-SEARCH(state) returns an action
 v ← MAX-VALUE(state, −∞, +∞)
 return the action in ACTIONS(state) with value v

function MAX-VALUE(state, α, β) returns a utility value
 if TERMINAL-TEST(state) the return UTILITY(state)
 v ← −∞
 for each a in ACTIONS(state) do
   v ← MAX(v, MIN-VALUE(RESULT(state, a), α, β))
   if v ≥ β then return v
   α ← MAX(α, v)
 return v

function MIN-VALUE(state, α, β) returns a utility value
 if TERMINAL-TEST(state) the return UTILITY(state)
 v ← +∞
 for each a in ACTIONS(state) do
   v ← MIN(v, MAX-VALUE(RESULT(state, a), α, β))
   if v ≤ α then return v
   β ← MIN(β, v)
 return v

1 个答案:

答案 0 :(得分:1)

我相信如果您阅读此解释,您将理解vaction的含义,并能够实现此伪代码。

让我们分解。

state - 一个问题实例 alpha - 可能解决方案的最大下限 beta - 可能解决方案的最小上限

当新状态被视为解决方案的可能路径时,它必须具有:

alpha <= price(state) <= beta

现在让我们了解方法:

<强> 1。 MAX-VALUE(state, α, β)

返回子树的最大可能值,以state为根,ab为alpha和beta(分别)。

它是如何做到的?好吧,对于从state一步到位的每个州,我们想要考虑将我们带到该州的行动的价值(或者#34;价格&#34;)。这背后的直觉是,如果你坚持这一点,你就会知道最终状态的价格,为所有(仅相关的)最终状态做这个,并且你知道最佳状态&#34; mini- MAX&#34;溶液

在您的伪代码中,它在以下行中完成:

for each a in ACTIONS(state) do

此操作是操作,如果应用于当前state,则返回下一个state。例如,您可以将其想象为move player left,因此返回状态是原始state,仅在玩家现在向左一步的地方(愚蠢的例子,但它可能会有所帮助)。请注意,它在您的代码中被引用为RESULT(state, a) - 为了简单起见,我将使用next_state

现在让我们检查以下一行:

v ← MAX(v, MIN-VALUE(RESULT(state, a), α, β))

首先,让我们看一下MIN-VALUE(RESULT(state, a), α, β),或者更好:MIN-VALUE(next_state, α, β)。因为你现在正在探索&#34;一个新的路径(到达next_state的路径,你想从该状态获取所有可能性的最小(仅适用于下一个级别)。这是因为它是对手& #39;接下来,我们假设他尽可能聪明地玩(所以我们知道我们有最佳路径)。 直觉上,这可以被视为&#34;如果我选择使用next_state,那么最糟糕的情景是什么?&#34;。

好的,现在,为什么我们有这个MAX(v, ...)?这个非常简单,如果你已经通过不同的路径找到了更好的价值v,那就去吧,没理由和next_state一起使用。

<强> 2。 MIN-VALUE(state, α, β)

这与MAX-VALUE非常相似。你可以把这看作是对手的回合&#34;,因为他是&#34;聪明的&#34;,他选择他的下一步作为给你最小价值的那一步(因此MIN-VALUE)。

第3。寻找解决方案:

function ALPHA-BETA-SEARCH(state) returns an action
 v ← MAX-VALUE(state, −∞, +∞)

现在,要使用MAX-VALUEMIN-VALUE,您只需找到最佳解决方案,从根state开始,没有特定的alpha或{{1限制(这些限制将在betaMAX-VALUE中更新),因此您可以为其分配MIN-VALUE−∞值。

那么你需要实现这个

  1. +∞
  2. 每个州都需要有一个或多个运算符,每个都返回一个新状态,这是应用运算符逻辑后的原始状态。

    1. ACTIONS(state)
    2. 按照上述说明,可以简单地将其视为RESULT(state, action)state.action()。只需对状态应用操作并返回新状态。

      1. action(state)
      2. 回答问题的谓词&#34;这是终端状态吗?&#34;。您需要能够在某处结束当前的分支搜索 - 此谓词是每个分支的中断条件。

        我希望这有助于清除一些事情。