多线程 alpha-beta 剪枝的效果如何?
What is the effectiveness of multithreaded alpha-beta-pruning?
如果满足以下条件,多线程与 alpha beta 修剪的效果如何:
迭代使用了多线程。例如,第一个线程会查看第一个分支,第二个线程会查看第二个线程,等等。我认为这应该只在第一个深度(AI 的下一步)完成,因为其他深度可能是隔断。
一个线程在第一个 "move" 生成时搜索生成的 moveset 的一半,第二个线程在最后 "move" 生成并搜索回一半的 moveset。在这里,我认为可以提高加速,因为最后一步可以被认为是最好的一步,因此,第二个线程可能会导致第一个线程无法实现的中断。
用多线程来思考对方的时间。例如,假设对手花了一些时间思考和采取行动。人工智能可以在对手思考的同时迭代地加深搜索并找到结果,我想,这不一定会导致加速,但有更多时间进行极小极大分析。
我想可能还有其他优化,但这些是我想到的少数几个。不过,我不知道他们是否真的会有所改善。
如果我没理解错的话,你打算并行搜索根位置的着法。与严格顺序算法相比,它应该更好,但我不希望它能很好地扩展(使用多个 CPU)。
为了比较,这里总结了国际象棋中现有的并行化策略:
由于 alpha-beta 是一种顺序算法,所有并行化策略都是推测性的。因此,您要避免花时间搜索搜索树的某些部分,这些部分最终会被其他移动砍掉。一种避免搜索不相关子树的相对简单的策略称为 Young Brothers Wait Concept.
还有一些算法具有改进的可扩展性,但代价是更难以理解和实施。例如,支持 work-stealing 应该会提高可扩展性。
如果满足以下条件,多线程与 alpha beta 修剪的效果如何:
迭代使用了多线程。例如,第一个线程会查看第一个分支,第二个线程会查看第二个线程,等等。我认为这应该只在第一个深度(AI 的下一步)完成,因为其他深度可能是隔断。
一个线程在第一个 "move" 生成时搜索生成的 moveset 的一半,第二个线程在最后 "move" 生成并搜索回一半的 moveset。在这里,我认为可以提高加速,因为最后一步可以被认为是最好的一步,因此,第二个线程可能会导致第一个线程无法实现的中断。
用多线程来思考对方的时间。例如,假设对手花了一些时间思考和采取行动。人工智能可以在对手思考的同时迭代地加深搜索并找到结果,我想,这不一定会导致加速,但有更多时间进行极小极大分析。
我想可能还有其他优化,但这些是我想到的少数几个。不过,我不知道他们是否真的会有所改善。
如果我没理解错的话,你打算并行搜索根位置的着法。与严格顺序算法相比,它应该更好,但我不希望它能很好地扩展(使用多个 CPU)。
为了比较,这里总结了国际象棋中现有的并行化策略:
由于 alpha-beta 是一种顺序算法,所有并行化策略都是推测性的。因此,您要避免花时间搜索搜索树的某些部分,这些部分最终会被其他移动砍掉。一种避免搜索不相关子树的相对简单的策略称为 Young Brothers Wait Concept.
还有一些算法具有改进的可扩展性,但代价是更难以理解和实施。例如,支持 work-stealing 应该会提高可扩展性。