0

在阅读了国际象棋编程维基和其他资源之后,我一直对迭代深化的确切目的感到困惑。我原来的理解是这样的:

它包括在深度 = 1、深度 = 2 等处执行的极小极大搜索,直到达到所需的深度。在对每个深度进行极小极大搜索之后,根据该搜索的结果对根节点的移动进行排序,以便在下一次搜索中以深度+1 的最佳移动排序,因此在下一次更深的搜索中,搜索 PV 移动,然后是下一个最佳移动,然后是之后的下一个最佳移动,依此类推。

这个对吗?当我读到关于 MVV-LVA 排序,特别是关于排序捕获,以及使用哈希表等时,我产生了疑问。例如,此页面推荐以下移动顺序:

  1. 最左边路径的迭代深化框架的上一次迭代的主要变化的 PV 移动,通常由 2 隐式完成。
  2. 从哈希表中移动哈希
  3. 获奖捕获/促销
  4. 平等的捕获/促销
  5. 杀手动作(非捕获),通常首先是伴侣杀手
  6. 按历史启发式排序的非捕获等
  7. 丢失捕获

如果是这样,那么如果只需要 PV-move,那么从每个深度对 minimax 进行排序又有什么意义呢?另一方面,如果 ID 的全部点是 PV-move,那么从每个单个 minimax 深度搜索到所需的深度只是为了计算每个深度的 PV-move 不是浪费吗?

ID的具体用途是什么,它节省了多少计算量?

4

1 回答 1

0

如果我错了,请纠正我,但我认为你在这里混合了 2 个不同的概念。

迭代深化主要用于设置每一步的最大搜索时间。人工智能会越来越深,然后当确定的时间结束时,它会从完成搜索的最新深度返回移动。由于深度的每次增加都会导致搜索时间呈指数增长,因此从例如 1 到 12 搜索每个深度所花费的时间几乎与仅搜索深度 12 所花费的时间相同。

对移动进行排序以最大化 alpha-beta 修剪的效果。如果您想要最佳的 alpha-beta 修剪,您首先要查看最佳移动。这当然不可能事先知道,但你上面所说的几点是一个很好的猜测。只需确保排序算法不会减慢递归函数的速度,并消除 alhpa-beta 的影响。

希望这会有所帮助,并且我正确理解了您的问题。

于 2020-01-13T11:24:50.147 回答