Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Artificial intelligence Minimax/Alpha-beta修剪移动顺序?_Artificial Intelligence_Minimax_Iterative Deepening - Fatal编程技术网

Artificial intelligence Minimax/Alpha-beta修剪移动顺序?

Artificial intelligence Minimax/Alpha-beta修剪移动顺序?,artificial-intelligence,minimax,iterative-deepening,Artificial Intelligence,Minimax,Iterative Deepening,我读过(例如)在每一级首先搜索最好的动作(可以通过迭代深化找到)会使搜索速度更快 如何在不占用太多额外内存和cpu时间的情况下搜索可能的最佳移动?如果您事先知道如何搜索最佳移动,那么您首先就不需要进行搜索。你能做的通常需要你在游戏中的一些专业知识。例如,在跳棋中,您可以尝试在不产生“王”的移动之前先计算所有产生“王”的移动 基本上有两种策略: 静态移动排序 动态移动排序 动态移动排序使用以前搜索中的信息,这可能是因为您再次转置到同一位置,或者您在以前不太彻底的搜索中已经到达该位置。这就是您提到的

我读过(例如)在每一级首先搜索最好的动作(可以通过迭代深化找到)会使搜索速度更快


如何在不占用太多额外内存和cpu时间的情况下搜索可能的最佳移动?

如果您事先知道如何搜索最佳移动,那么您首先就不需要进行搜索。你能做的通常需要你在游戏中的一些专业知识。例如,在跳棋中,您可以尝试在不产生“王”的移动之前先计算所有产生“王”的移动

基本上有两种策略:

  • 静态移动排序
  • 动态移动排序
  • 动态移动排序使用以前搜索中的信息,这可能是因为您再次转置到同一位置,或者您在以前不太彻底的搜索中已经到达该位置。这就是您提到的迭代深化思想,它不断地增加搜索距离

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

    • 换位表缓存有关以前搜索的信息,特别是找到的最佳移动。当再次到达相同位置时,您可以立即搜索上一次搜索的最佳移动。很多时候,通过更深入的搜索,它会被确认为最好的举措

    • 杀手招式使用类似的方法,还有一个额外的优势,那就是他们可以使用相似但不相同位置的知识。然而,移动顺序的杀手级移动的质量通常比换位表中的移动差。这就是为什么它们通常在换位运动后被搜索

    但是,如果以前的搜索没有任何信息,该怎么办?通常,您有一些特定于领域的知识,可以用于静态移动排序。例如,国际象棋有许多经验法则。其中一个原因是,与未捕获相比,捕获移动更有可能是最佳移动。有更复杂的策略(如静态再捕获分析),但您必须小心,因为更复杂的计算也会减慢搜索速度


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

    好的,那么您将如何准确地进行“先评估所有导致国王的移动,然后再评估不产生国王的移动”。好的,我所描述的想法的完整发展被称为板评估函数,这意味着,有一些函数(在数学意义上以及计算机意义上)将板位置作为输入,并返回一个数字作为输出。比如说,一个高的数字表示一个可疑的“好”动作,比如一个国王,而一个低的数字表示一个预期的坏动作。您可以考虑计算深度为n,并使用优先级队列或类似结构来选择下一级计算的顺序。