转置表是否会导致搜索不稳定

时间:2014-12-22 16:04:14

标签: c++ artificial-intelligence chess minimax

我正在写一个国际象棋引擎并且最近添加了一个换位表。

当进行一些测试时,我发现尽管搜索仍然返回了相同的最佳移动,但移动的值(对于最大化玩家有多好)会波动。

这是换位表的正常行为吗?我记得读过换位表会导致搜索不稳定。这是什么意思?那么这是我的代码中的正常事件还是严重错误?

2 个答案:

答案 0 :(得分:4)

是的,转置表会引入搜索不稳定性。

幸运的是,很少发生转置表的优点远远超过复杂性。

<强> 1。换位表的功能是什么?

在您的程序中添加转置表(TT)后,您应该注意到两个主要区别:

  1. 改善移动顺序:从TT移动通常是最好的移动
  2. 早期截止:当您再次到达已经搜索过更远距离的位置时,您可以停止并使用存储在TT条目中的值
  3. 在国际象棋中,改进的动作顺序是最重要的因素。只有在游戏中,换位的可能性才会增加,你会看到更多的早期截止。

    那么,搜索不稳定意味着什么?这意味着当您搜索具有给定距离的一个位置并稍后重复相同的搜索(相同位置,相同距离)时,您将得到相同的结果。

    <强> 2。简单的minimax / alpha beta搜索algorthm

    让我们先忽略搜索扩展,然后从简单的minimax或alpha-beta搜索开始。

    请注意,搜索将具有搜索可重复的属性,并且不会发现搜索不稳定。即使您通过从换位表移动来改善移动顺序,您仍然会在每次搜索时获得相同的结果。然而,在添加TT之后,来自更深层次搜索的额外截止通常会破坏该属性并引入不稳定性。

    例如,考虑一个包含深层策略的位置:

    • 距离较远的搜索可能看不到,但距离较远的搜索会。
    • 在将结果存储在TT中后,使用低距离重新搜索也会看到该策略。现在,与原始搜索相比,它的行为有所不同。
    • 更糟糕的是,当TT条目被覆盖时,改进后的知识会再次出现。

    因此,使用额外的知识强迫早期截止是导致不稳定的一个因素。 (但在实践中,这是值得的,因为它更像是一个理论问题。)

    第3。搜索扩展程序

    当应用于简单的alpha beta搜索时,改进的移动排序本身不会导致搜索不稳定。在实现许多扩展的现实搜索算法中,情况更复杂。其中一些扩展也对移动排序很敏感。

    一个突出的例子叫做Late Move Reduction (LMR)。它使用的事实是,移动顺序的质量通常很高,只有前几个移动必须彻底搜索,而其他移动很可能是坏移动,只会缩短距离进行搜索。

    LMR只是移动排序使搜索不太可重复的一个例子。但同样,优势占主导地位。

    <强> 4。搜索不稳定是多少?

    没有明确的答案。在实践中,你无法完全消除不稳定性,但如果不稳定性失控,你的搜索将变得效率低下。

    当然,错误也可能是不稳定背后的原因。那么,这是你搜索中的一个错误吗?好吧,我不知道。可能。 : - )

答案 1 :(得分:3)

  

这是换位表的正常行为吗?我记得读过   转置表可能导致搜索不稳定。这是什么   那意味着什么?

  

这是我的代码中的正常事件或严重错误吗?

Jonathan Schaeffer的advice(&#34;攻击计划&#34;):

  

如果您最初限制TT查找仅在表中有效   深度与您需要的深度完全匹配,然后TT不会   更改固定深度alpha-beta搜索的结果。这应该,   但是,减少搜索的节点数量。验证确实如此   工作正常。

     

添加迭代深化并移动排序。如果你这样做,它   不应该改变搜索的最终结果,但是,它应该   减少搜索的节点数。

     

只有当您确定以上所有内容都是100%有效时才移动   更多的搜索增强功能和更好的评估功能。