早些时候,我遇到了一个涉及我的主要变体被alpha-beta搜索截断的问题。实际上,这似乎是一个普遍的问题。来自Crafty的作者:
具有更差特性的另一种解决方案是提取完整的PV 从转置表中,避免使用三角形数组 完全。如果换位表足够大,那么 什么都没有被覆盖,这几乎可以工作。但是还有 一个隐藏的“陷阱”。搜索PV后,继续搜索 树的其他部分,你会经常遇到一些 那些相同的立场,但哈希草案将不够深入 允许使用该条目。你继续搜索,现在必须 覆盖该条目(确切的哈希签名匹配需要这个)和 你现在将转置“跟踪”留给另一个端点,一个 这与原来的分数不符。或任何一个trans / ref 根和实际PV端点之间的条目被覆盖 完全不同的位置,你现在无法搜索 转置表,用于查找要显示的实际端点。 有几种使用这种方法来生产PV,并且抱怨是 一般频繁和响亮,因为评价配对 无关的PV对于调试或分析都不是很有用 你自己的游戏。
这很有道理。
考虑主要变体是ABCDEF,但AB将棋盘返回到原始位置。然后,后面检查的替代线可能是CDEFGH,这导致与早期的CDEF搜索不同的评估。因此,AB之后的电路板状态的转置表条目被覆盖,可能是一个将被alpha-beta(!!)切断的节点,并且ABCDEF的PV将永远被破坏。
有没有办法解决这个问题,还是我必须使用外部数据结构来保存PV?
具体来说,当且仅当新条目更深更准确时更换有什么问题?这似乎不起作用,但我不确定原因。