不知情的搜索:运行广度优先搜索,然后在边界中的每个节点上迭代加深搜索

时间:2018-06-11 04:29:33

标签: algorithm search artificial-intelligence

我正在尝试结合广度优先搜索和迭代深化搜索。这本方法在AI书中提到,AI - 现代方法,第3章(第90页)。这个想法是从初始状态开始,运行广度优先搜索直到达到某个常量内存限制mB,然后在边界中的每个节点上运行迭代加深搜索。

此搜索算法是否合理?完成?最佳?

1 个答案:

答案 0 :(得分:1)

广度优先搜索本身是完整的,完整的和最优的。因此,对于BFS在达到内存限制之前已经找到解决方案的任何问题,都没有问题。我们只需要考虑在找到解决方案之前达到内存限制的情况下会发生什么,例如您将在边界节点上开始运行IDS的问题:

声音?

是的,IDS永远不会以某种方式返回不正确的结果。

完成?

这取决于您如何在边界中的每个节点上实施“IDS”。

如果您首先在边界的第一个节点上执行完整的IDS,然后在边界的第二个节点上执行完整的IDS等,则它将无法完成。考虑边界中第一个节点下面有无限大小搜索空间的情况,该节点不包含解决方案。如果您尝试首先在该节点上运行“完整”IDS,它将永远不会终止。

但是,如果您以不同的方式在边界节点上展开IDS流程,则可以完成。例如,如果您首先为边界中的所有节点执行深度为1的DFS,然后为边界中的所有节点执行深度为2的DFS,则算法将完成。

<强>最优吗

这里和完整性一样重要。如果在移动到第二个节点之前为边界中的第一个节点完成完整的IDS,您可能已经在边界的第一个节点下面找到了一个次优的解决方案,因此该算法将是次优的。

如果在边界中的所有节点上完成深度限制为1的DFS进程,则在前进到边界中任何节点的深度限制为2的DFS进程之前,并在移动到深度之前完成所有这些限制为3等,算法将是最优的。