Minimax / Alpha beta修剪移动订购?

时间:2012-01-18 07:08:05

标签: artificial-intelligence minimax iterative-deepening

我已经阅读过(例如,http://radagast.se/othello/Help/order.html),首先搜索每个级别的最佳移动(可以使用迭代加深找到),使搜索速度更快。

如果不使用太多的额外内存和CPU时间,如何才能搜索最佳动作?

1 个答案:

答案 0 :(得分:2)

基本上有两种策略:

  1. 静态移动排序
  2. 动态移动排序
  3. 动态移动排序使用先前搜索的信息,因为您再次转置到相同位置,或者您已经在之前不太彻底的搜索中到达该位置。这就是你提到的迭代加深的想法,它不断增加搜索距离。

    动态移动排序非常强大。有很多方法可以做到,但最常见的两种方法是换位表和杀手动作:

    • 转置表会缓存有关以前搜索的信息,尤其是找到的最佳移动。再次达到相同位置时,您可以立即搜索上一次搜索中的最佳移动。很多时候,它被确认为深度搜索的最佳举措。

    • 杀手动作使用类似的方法,并具有额外的优势,即他们可以使用来自相似但不相同的位置的知识。然而,移动排序的杀手移动的质量通常比移位表的移动质量差。这就是为什么他们通常在换位移动后进行搜索。

    但是,如果之前的搜索中没有任何信息该怎么办?通常,您可以使用某些特定于域的知识来进行静态移动排序。例如,在国际象棋中有许多经验法则。一个是捕获移动比非捕获更有可能是最好的移动。有更复杂的策略(例如,静态重新捕获分析)但你必须要小心,因为更复杂的计算也会减慢搜索速度。

    通过结合静态和动态移动排序,国际象棋引擎通常可以猜测该位置的最佳移动,命中率超过90%。