【问题标题】:Alpha beta pruning pseudo code understandingAlpha beta 剪枝伪代码理解
【发布时间】:2017-07-18 01:43:21
【问题描述】:

我无法理解教科书中的以下伪代码。特别是,我不了解第一个功能。在我们计算了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

【问题讨论】:

  • 它只是意味着返回与值关联的操作。如果您从 MIN-VALUEMAX-VALUE 函数返回 tuples,您可以在调用堆栈中返回操作,例如 return a, v
  • @AChampion 这是有道理的。所以我们只在 MIN-VALUE 和 MAX-VALUE 函数的每个 return 语句中返回元组 (a,v)。如果动作空间是空的,你会只返回空动作吗?

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


【解决方案1】:

相信看了这个解释,你就会明白vaction的含义,并且能够实现这个伪代码。

让我们分解一下。

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

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

alpha <= price(state) <= beta

现在让我们了解方法:

1. MAX-VALUE(state, α, β)

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

它是如何做到的?好吧,对于从state 一步可以到达的每个状态,我们要考虑将我们移动到该状态的操作的价值(或“价格”)。这背后的直觉是,如果你坚持下去,你会知道最终状态的价格,对所有(仅相关的)最终状态执行此操作,并且你知道最佳的“最小-最大”解决方案。

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

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, α, β)。因为您现在正在“探索”一条新路径(到达next_state 的路径,您希望从该状态中获取所有可能性的最小(仅用于下一个级别)。那就是因为接下来轮到对手了,我们假设他玩得尽可能聪明(所以我们知道我们有最优路径)。 直观地说,这可以看作是“如果我选择使用next_state,最坏情况的价值是多少?”。

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

2。 MIN-VALUE(state, α, β)

这与MAX-VALUE 非常相似。你可以把这看作是“对手的回合”,因为他很“聪明”,所以他会选择他的下一步行动作为给你最小价值的行动(因此MIN-VALUE)。

3.寻找解决方案:

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

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

那么你需要什么来实现这个

  1. ACTIONS(state)

每个状态需要有一个集合或算子,每个返回一个新的状态,即应用算子逻辑后的原始状态。

  1. RESULT(state, action)

按照上面的解释,这个可以简单的看成state.action()或者action(state)。只需对状态应用操作并返回新状态。

  1. TERMINAL-TEST(state)

回答“这是一个终端状态吗?”问题的谓词。您需要能够在某处结束当前的分支搜索 - 这个谓词是每个分支的中断条件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 2017-09-06
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多