【问题标题】:Alpha-beta pruning: Fail-hard VS. Fail-softAlpha-beta 修剪:Fail-hard VS。软故障
【发布时间】:2021-11-20 23:25:39
【问题描述】:

分析 Alpha-beta 剪枝算法在其 fail-hard 和 fail-soft 版本中,我找不到它的行为差异:

故障排除

function alphabeta(node, depth, α, β, maximizingPlayer) is
    if depth = 0 or node is a terminal node then
        return the heuristic value of node
    if maximizingPlayer then
        value := −∞
        for each child of node do
            value := max(value, alphabeta(child, depth − 1, α, β, FALSE))
            if value ≥ β then
                break (* β cutoff *)
            α := max(α, value)
        return value
    else
        value := +∞
        for each child of node do
            value := min(value, alphabeta(child, depth − 1, α, β, TRUE))
            if value ≤ α then
                break (* α cutoff *)
            β := min(β, value)
        return value

软故障

function alphabeta(node, depth, α, β, maximizingPlayer) is
    if depth = 0 or node is a terminal node then
        return the heuristic value of node
    if maximizingPlayer then
        value := −∞
        for each child of node do
            value := max(value, alphabeta(child, depth − 1, α, β, FALSE))
            α := max(α, value)
            if value ≥ β then
                break (* β cutoff *)
        return value
    else
        value := +∞
        for each child of node do
            value := min(value, alphabeta(child, depth − 1, α, β, TRUE))
            β := min(β, value)
            if value ≤ α then
                break (* α cutoff *)
        return value

我了解在 fail-soft 中,alpha 和 beta 都是在评估 break de for-loop(分支)之前确定的,但是:

  • 如果必须结束分支中的分析,则确定的 alpha 和 beta 值不会影响将在其上方找到的其余其他分支中执行的分析。我没有正确理解伪代码吗?

非常感谢!

【问题讨论】:

    标签: algorithm alpha-beta-pruning


    【解决方案1】:

    fail-hard 和 fail-soft 之间的主要区别在于,fail-hard 将返回值限制在 alpha 和 beta 之间,而 fail-soft 则没有。

    您可以检查是否应将初始值设置为 alpha/beta,而不是在 fail-hard 版本中设置为negative_infinity/infinity。

    如你的fail-soft伪代码所示,alpha和beta在检查是否剪枝之前会更新。因此,fail-soft 返回更严格的界限,提供更多信息。

    如果您使用转置表,则下次查找现有状态时,其更紧密的界限将改善您的搜索。

    【讨论】:

      【解决方案2】:

      你是对的,这两个代码 sn-ps 具有相同的行为——它们实际上都是“失败软”变体。 (代码来自维基百科,已添加到Alpha–beta pruning article on 5 June 2021。)

      真正的“fail-hard”变体(两者中较旧)将value 在最大化时初始化为 α,在最小化时初始化为 β,而不是初始化为 -∞ 和 +∞。

      John Fishburn 在他 1983 年的文章“Alpha-beta 搜索的另一种优化”(SIGART Bull.,第 84 页(1983 年 4 月):37–38 中介绍了“软失败”变体。 DOI [付费])。以下是摘录:

      我们假设读者熟悉 alpha-beta 搜索 算法:[1]

      ab(p,alpha,beta)
      position p; int alpha,beta;
      {
          int m,d;
          if p is a leaf return(staticvalue(p));
          let p[1]...p[d] be the successors of p;
          m = alpha;
          for(i=1;i<=d;i++){
              m = max(m, -ab(p[i],-beta,-m));
              if(m >= beta) return(m);
          }
          return(m);
      }
      

      函数 ab(p,alpha,beta) 返回的值 ab 给出 p的真正负最大值nm的以下信息:

      如果 ab 如果 ab >= beta 那么 nm >= beta
      如果 alpha

      如果我们将变量 m 初始化为 -∞ 而不是 alpha,并取 注意不要更改传递给递归调用的值 过程中,我们得到以下例程,称为 fab 用于 fail-soft alpha-beta search

      fab(p,alpha,beta)
      position p; int alpha,beta;
      {
          int m,d;
          if p is a leaf return(staticvalue(p));
          let p[1]...p[d] be the successors of p;
          m = -∞;
          for(i=1;i<=d;i++){
                  m = max(m, -fab(p[i],-beta,-max(m,alpha)));
                  if(m >= beta) return(m);
          }
          return(m);
      }
      

      fab(p,alpha,beta) 有时返回的值 fab 当搜索失败高或低时,nm 的边界比 ab 更紧密:[强调添加]

      如果 fab fab
      如果 fab >= beta 那么 nm >= fab
      如果 alpha

      优化本身似乎已经够明显了,上面的 不等式不难证明。难的是找到用途 为晶圆厂。不幸的是,目前的算法完全搜索 与 ab 相同的节点。 Fab 似乎是一种解决方案 问题。然而,稍微思考一下,建议以下可能 应用:

      1. 已经有几个无穷小窗口方案 [2,3] 发现比正常的 alpha-beta 更有效 实用的游戏程序。当搜索 这些窗口之一失败高,节点必须是 用普通窗口再次搜索。更紧密的界限 由 fab 提供的可以用来使这个正常 窗口更小。

             ...

      参考资料:

      1. D.E. Knuth 和 R.W. Moore,“α-β 修剪分析”,人工智能,上校。 6(4),第 293-326 页(1975 年冬季)。

      2. J.P. Fishburn,alpha-beta 搜索的三个优化,大学计算机科学系 威斯康星州 - 麦迪逊(1981 年 5 月)。博士附录论文。

      3. J。珀尔,“极小极大树和博弈搜索程序的渐近性质”,人工智能,上校。 14(2),第 113-13 页

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 1970-01-01
        • 1970-01-01
        • 2017-03-22
        • 2015-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多