如果符合以下条件,使用alpha beta修剪的多线程的效果如何:
迭代地使用多线程。例如,线程1将查看第一个分支,第二个线程将查看第二个线程,等等。我认为这应该只在第一个深度完成(AI制作的下一步),因为其他深度可能是隔断。
一个线程在第一个"移动"生成搜索到生成的移动集的一半,第二个线程在最后一个"移动"生成并搜索到移动集的一半。在这里,我认为可能会增加加速,因为最后一步可能被认为是最好的举动,因此,第二个线程可能导致第一个线程无法切断。
多线程用于思考对手的时间。例如,假设对手花了一些时间思考并采取行动。人工智能可以反复加深搜索并找到结果,而对手正在思考,我想象,不一定会导致加速,但有更多时间进行极小极大分析。
我可能会想到其他一些优化,但这些是我想到的少数优化。但我不知道他们是否真的会改善任何事情。
答案 0 :(得分:1)
如果我理解你的想法,你打算平行搜索根位置的移动。与严格顺序算法相比,它应该更好,但我不希望它能够很好地扩展(使用多个CPU)。
为了进行比较,以下是国际象棋中现有并行化策略的摘要:
由于alpha-beta是一种顺序算法,所有并行化策略都是推测性的。因此,您希望避免花时间搜索搜索树的部分内容,最终会被其他移动切割。避免搜索不相关的子树的一个相对简单的策略称为Young Brothers Wait Concept。
还有一些算法具有改进的可扩展性,但代价是更难以理解和实施。例如,支持work-stealing应该可以提高可伸缩性。