当进行一些测试时,我发现尽管搜索仍然返回了相同的最佳移动,但移动的值(对于最大化玩家有多好)会波动。
这是换位表的正常行为吗?我记得读过换位表会导致搜索不稳定。这是什么意思?那么这是我的代码中的正常事件还是严重错误?
答案 0 :(得分:4)
是的,转置表会引入搜索不稳定性。
幸运的是,很少发生转置表的优点远远超过复杂性。
<强> 1。换位表的功能是什么?
在您的程序中添加转置表(TT)后,您应该注意到两个主要区别:
在国际象棋中,改进的动作顺序是最重要的因素。只有在游戏中,换位的可能性才会增加,你会看到更多的早期截止。
那么,搜索不稳定意味着什么?这意味着当您搜索具有给定距离的一个位置并稍后重复相同的搜索(相同位置,相同距离)时,您将得到相同的结果。
<强> 2。简单的minimax / alpha beta搜索algorthm
让我们先忽略搜索扩展,然后从简单的minimax或alpha-beta搜索开始。
请注意,搜索将具有搜索可重复的属性,并且不会发现搜索不稳定。即使您通过从换位表移动来改善移动顺序,您仍然会在每次搜索时获得相同的结果。然而,在添加TT之后,来自更深层次搜索的额外截止通常会破坏该属性并引入不稳定性。
例如,考虑一个包含深层策略的位置:
因此,使用额外的知识强迫早期截止是导致不稳定的一个因素。 (但在实践中,这是值得的,因为它更像是一个理论问题。)
第3。搜索扩展程序
当应用于简单的alpha beta搜索时,改进的移动排序本身不会导致搜索不稳定。在实现许多扩展的现实搜索算法中,情况更复杂。其中一些扩展也对移动排序很敏感。
一个突出的例子叫做Late Move Reduction (LMR)。它使用的事实是,移动顺序的质量通常很高,只有前几个移动必须彻底搜索,而其他移动很可能是坏移动,只会缩短距离进行搜索。
LMR只是移动排序使搜索不太可重复的一个例子。但同样,优势占主导地位。
<强> 4。搜索不稳定是多少?
没有明确的答案。在实践中,你无法完全消除不稳定性,但如果不稳定性失控,你的搜索将变得效率低下。
当然,错误也可能是不稳定背后的原因。那么,这是你搜索中的一个错误吗?好吧,我不知道。可能。 : - )
答案 1 :(得分:3)
这是换位表的正常行为吗?我记得读过 转置表可能导致搜索不稳定。这是什么 那意味着什么?
是
这是我的代码中的正常事件或严重错误吗?
Jonathan Schaeffer的advice(&#34;攻击计划&#34;):
如果您最初限制TT查找仅在表中有效 深度与您需要的深度完全匹配,然后TT不会 更改固定深度alpha-beta搜索的结果。这应该, 但是,减少搜索的节点数量。验证确实如此 工作正常。
添加迭代深化并移动排序。如果你这样做,它 不应该改变搜索的最终结果,但是,它应该 减少搜索的节点数。
只有当您确定以上所有内容都是100%有效时才移动 更多的搜索增强功能和更好的评估功能。