并行国际象棋搜索的共享哈希表

时间:2017-05-18 21:43:47

标签: chess alpha-beta-pruning

这是关于并行国际象棋搜索shared hashtable algorithm的概念性问题。

我已经实现了一个alpha-beta搜索,它产生了4个线程,每个线程进行搜索并返回最佳移动/评估。但是,我观察搜索不稳定性,其中线程返回不同的结果。我正在使用链接中描述的无锁哈希表,因此某些条目可能会被覆盖或损坏,尽管实际上永远不会使用损坏的数据。

为什么搜索线程会返回不同的结果?这是并行搜索的预期结果,还是一个问题?如果需要,我如何知道要选择哪个移动?

1 个答案:

答案 0 :(得分:1)

并行搜索应该是非确定性的。一旦你通过转置表(也就是哈希表)分享知识,你就会产生这种效果。

如果您运行并行搜索,则无法轻松确定正确的结果。所以,你可以做什么?如果你有四个线程,你可以尝试多数投票,但我不知道引擎那样做。

请注意,一旦开始使用转置表,搜索稳定性就会出现在顺序搜索算法中的问题。

如果您使用转置表运行顺序搜索算法,然后重复相同的搜索(不重置转置表),则无法保证获得相同的结果。对于并行搜索也是如此,只是并行搜索甚至不是确定性的。

搜索稳定性和确定性不是一回事:

  • 在顺序搜索中,您可以实现确定性(对调试很有用)。在并行搜索中,您无法在实践中避免它。
  • 顺序搜索和并行搜索都不能在实践中排除搜索稳定性。然而,在一个好的搜索算法中,它应该是相对不太可能的。

要解释为什么换位表会导致搜索不稳定,请查看this question