【问题标题】:Trouble applying the Alpha Beta Pruning algorithm to this tree将 Alpha Beta Pruning 算法应用于此树时遇到问题
【发布时间】:2012-12-29 22:31:40
【问题描述】:

我正在尝试将 alpha beta 修剪算法应用于这个给定的树。

当我点击节点 C 时我被卡住了,因为在展开 B 的所有子节点后,我给 A >= -4,然后我展开 C 得到 I =-3,它大于 -4 (-3 >= -4)。因此,我是否将 A 更新为 -3?如果是这样,那么我之后是否修剪 J 和 K 因为 -3 >= -3 ?当我处理这个例子时,我修剪了 J、K、M 和 N。我真的不确定这个 =(

编辑:

另一个问题:在探索 B 并将 B 的值传递给 A 之后,我们是否将该值传递给 C 进而传递给 I?我看到一个例子就是这种情况。这里是:http://web.cecs.pdx.edu/~mm/AIFall2011/alphabeta-example.pdf

然而,在这个例子中,http://web.cecs.pdx.edu/~mm/AIFall2011/alphabeta-example.pdf,它似乎没有向下传递值,而是似乎只向上传播值。我不确定哪一个是正确的,或者它是否会产生影响。

【问题讨论】:

    标签: algorithm search artificial-intelligence alpha-beta-pruning


    【解决方案1】:

    展开B的所有子节点后,A就有α=-4, β=∞

    当你到达I,然后是α=-4, β=-3α < β 所以JK 不会被修剪。需要对它们进行评估以确保它们不小于 -3,从而降低对 C 的评估。 C展开后,A的值更新为α=-3, β=∞。在评估 J 时,您不能使用更新后的 alpha 值 A,因为它还没有更新。

    JK 如果 I 改为 -5 将被修剪。在那种情况下,JK 是什么无关紧要,因为我们已经知道 C 的评估比 B 差,因为 -5 < -4JK 只能做到这一点更糟。

    每个节点将 alpha 和 beta 值传递给它的子节点。然后,孩子们将根据轮到谁来更新他们自己的 alpha 或 beta 值副本,并返回该节点的最终评估。然后用于更新父级的 alpha 或 beta 值。

    例如见Alpha-Beta pruning

    function alphabeta(node, depth, α, β, Player)         
        if depth = 0 or node is a terminal node
            return the heuristic value of node
        if Player = MaxPlayer
            for each child of node
                α := max(α, alphabeta(child, depth-1, α, β, not(Player)))     
                if β ≤ α
                    break // Beta cut-off
            return α
        else
            for each child of node
                β := min(β, alphabeta(child, depth-1, α, β, not(Player)))     
                if β ≤ α
                    break // Alpha cut-off
            return β
    
    // Initial call
    alphabeta(origin, depth, -infinity, +infinity, MaxPlayer)
    

    【讨论】:

    • 嗯,谢谢。我仍然不确定当我们将值从根节点传递给它的子节点时会发生什么。我们现在扩展了 C 节点,我们发现最小值是 -3,我们也将根节点更新为 -3,因为这是迄今为止的最高值。那么我们如何处理节点 D 中的 -3 呢?我们是否将它传递给节点 D 并使用它来评估它的子节点,以便它询问子节点 = -4 从根节点开始,所以我们修剪 M 和 N?我做对了吗? :S
    • 是的,A的alpha值为-3,传给D。D发现beta值为-4,所以剪掉M和N。
    • 啊,这是我不明白的。在完全扩展节点 B 后返回节点 C。我们的根 A >=-4。它将它传递给 C 节点,该节点要求
    • 如果 I、J、K 不小于 -4,你期望会发生什么? C 将检查是否有任何值
    • 尝试编写单独的 alpha 和 beta 值。 C 的父级的 alpha 为 -4,其子级的 beta 为 -3,因此 alpha
    【解决方案2】:

    每当我需要刷新对算法的理解时,我都会使用这个: http://homepage.ufp.pt/jtorres/ensino/ia/alfabeta.html

    您可以在那里输入您的树并逐步执行算法。您想要的值是:

    3 3 3 3

    -2 -4 3 等

    我发现从一个例子中推导出算法可以加深理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多