4.8 Best-First Search最佳优先搜索

在由回溯算法遍历的搜索树中,假设节点的分支按照值排序启发式排序,最左边的分支最有希望(或者至少不比右边的任何分支更没有希望)。然后回溯算法对搜索树进行深度优先遍历,按从左到右的顺序访问节点的分支。当CSP实例不能满足要求,必须遍历整个搜索树时,深度优先搜索显然是最佳选择。然而,当已知或可以安全地假设CSP实例是可满足的时,其他搜索策略(如最佳优先搜索)就变得可行。在本节中,我将调查基于差异的搜索策略,这些策略可以看作是最佳优先搜索的变体。

Harvey和Ginsberg[64,65]首先提出了一种基于差异的搜索策略,其算法称为有限差异搜索。不一致的情况是,搜索不遵循值排序启发式,也不从节点中提取最左边的分支。有限差异搜索背后的思想是通过增加差异的数量迭代地搜索树,更喜欢发生在树的根部附近的差异。这允许搜索从搜索早期所犯的错误中恢复(请参见定义4.11)。与此相反,对于回溯(或深度优先)搜索,在树的根附近所犯的错误要发现和撤销可能代价高昂。在第i次迭代中,有限差异算法访问从根到叶的路径中有最多i个差异的所有叶节点。当找到解决方案或迭代结束时,算法终止。有限差异搜索迭代调用i = 0,1,…,k。如果k≥n,其中n是搜索树的深度,该算法完成;否则就是不完整的。Harvey和Ginsberg从理论和实验两方面证明,当存在较好的值序启发式时,有限差异搜索优于深度优先搜索

Korf[80]提出了一种对有限差异算法的修改,使其在后续迭代中访问的重复节点更少。在第i次迭代中,Korf算法访问了所有叶子节点,从根到叶子的路径恰好有i个出入。然而,为了实现这些节省,Korf的算法更喜欢树中更深层次的差异。Korf指出,有限的差异搜索可以看作是最佳优先搜索的一种变体,其中节点p的成本是搜索树从根到p的路径中的差异数量。在best-first搜索中,选择成本最低的节点作为下一个要扩展的节点。在Harvey和Ginsberg的提议中,通过选择离根最近的节点来打破成本最低的关系。在Korf的提议中,通过选择离根最远的节点来打破连接。

Walsh[133](独立Meseguer[95])认为,价值排序启发式往往信息较少,而且更容易在搜索树的顶部附近出错。Walsh提出了深度有界差异搜索 depth-bounded discrepancy search ,它使搜索偏向树顶附近的差异,但访问的冗余节点比有限差异搜索要少。在第i次迭代中,深度有界差异搜索算法访问所有叶子节点,其中从根到叶子的路径中的所有差异都发生在深度i以下。Meseguer[95]提出了交错深度优先搜索 interleaved depth-first search ,这也使得搜索偏向于接近树顶的差异。基本思想是使用循环调度的变体来划分节点外分支的搜索时间。每个分支——或者更确切地说,根在分支上的每个子树——使用深度优先搜索来搜索给定的时间片。如果在时间片内没有找到解决方案,搜索将暂停,下一个分支将激活。在暂停对最后一个分支的搜索后,第一个分支再次激活。这种情况会一直持续下去,直到找到解决方案或者彻底搜索所有子树为止。该策略可以在子树中递归应用。

Meseguer和Walsh[96]实验比较了使用传统深度优先搜索的回溯算法和上述四种基于差异的搜索策略。在一个由随机二进制、拟群补全和数字分区csp组成的测试平台上,发现基于差异的搜索策略比深度优先的搜索策略要好得多。与随机化和重新启动一样,基于差异的搜索策略是一种克服搜索早期出现的值排序错误的方法

猜你喜欢

转载自blog.csdn.net/weixin_38354912/article/details/84847999
4.8