【问题标题】:What is the effectiveness of multithreaded alpha-beta-pruning?多线程 alpha-beta-pruning 的效果如何?
【发布时间】:2016-05-18 16:58:36
【问题描述】:

如果出现以下情况,多线程使用 alpha beta 剪枝的效果如何:

多线程被反复使用。例如,线程一会查看第一个分支,第二个线程会查看第二个线程,依此类推。我相信这应该只在第一个深度(AI 做出的下一步动作)进行,因为其他深度可能是隔断。

一个线程在第一次“移动”生成时搜索到生成的移动集的一半,第二个线程在最后一次“移动”生成并搜索回移动集的一半。在这里,我认为可以提高加速,因为最后一步可能被认为是最好的一步,因此,第二个线程可能会导致第一个线程无法中断。

多线程被用来考虑对手的时间。例如,假设对手花了一些时间思考并采取行动。 AI 可以在对手思考时迭代地加深搜索并找到结果,我想,这不一定会导致加速,但有更多时间进行极小极大分析。

我想可能还有其他优化,但这些是我想到的少数几个。不过,我不知道他们是否真的会有所改善。

【问题讨论】:

    标签: multithreading minimax alpha-beta-pruning


    【解决方案1】:

    如果我正确理解您的想法,您计划在根位置并行搜索移动。与严格的顺序算法相比,它应该更好,但我不希望它能够很好地扩展(使用多个 CPU)。

    为了比较,这里总结一下国际象棋中现有的并行化策略:

    由于 alpha-beta 是一种顺序算法,所有并行化策略都是推测性的。因此,您要避免花费时间在搜索树的某些部分上,这些部分最终会被其他移动所切断。避免搜索不相关子树的一种相对简单的策略称为Young Brothers Wait Concept

    还有一些算法具有改进的可扩展性,但代价是更难以理解和实施。例如,支持work-stealing 应该会提高可扩展性。

    【讨论】:

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