迭代深化 A* 搜索是一种算法,可以找到指定起始节点和一组目标的任何成员之间的最短路径。
A* 算法通过结合到达节点的成本和从节点到目标的成本来评估节点。迭代深化 A* 如何优于 A* 算法?
迭代深化 A* 搜索是一种算法,可以找到指定起始节点和一组目标的任何成员之间的最短路径。
A* 算法通过结合到达节点的成本和从节点到目标的成本来评估节点。迭代深化 A* 如何优于 A* 算法?
A*是一种最佳优先搜索算法,这意味着它是一种既使用“过去知识”的算法,又是在探索搜索空间时收集的,记为,和一个可接受的启发式函数,表示为,它估计每个节点到目标节点的距离. 还有其他最佳优先搜索算法,它们仅在“评估函数”的定义上有所不同,表示为. 例如,A* 的评价函数为, 在哪里是可以接受的。
A* 是最优的,即它找到起始和目标节点或状态之间的最优路径。A* 的最优性是由于使用了一个可接受的启发式函数,该启发式函数总是低估到目标的距离。A* 也是完整的,即它最终找到了这条最优路径。然而,在许多现实世界的情况下,A* 的问题在于它具有指数空间复杂度;更具体地说,它的空间复杂度是, 在哪里是(最大)分支因子和是搜索树的最大深度。它的时间复杂度也为,但在实践中,它往往会非常“快速”地找到解决方案(对于相对较小的搜索空间)。
IDA*结合了 A* 和IDDFS(或 IDS)。它做得“好”,因此它获得了两种算法的优势。它可以被认为是使用评估函数而不是深度的 IDDFS作为“成本门槛”或“截止”。在 IDA* 算法中,一个子一个节点的被添加到边界(或边缘或边界)如果. 这个门槛是,在算法开始时,从起始节点到目标的距离的估计, 那是,.在算法的每次迭代中增加(有关详细信息,请参见IDA* 算法的伪代码)。
IDA* 也是完整且最优的,但与 A* 相比,它具有多项式空间复杂度,更具体地说,, 在哪里是(最大)分支因子和是树的最大深度。IDA* 仍然具有 A* 的指数时间复杂度。
总而言之,IDA* 比 A* 具有更好的内存使用率。与 A* 中一样,与 IDDFS 不同,它专注于探索最有希望的节点,因此不会在搜索树的任何地方都到达相同的深度(而普通 IDDFS 会)。A* 可以被认为是一种动态规划算法。IDA* 通常会多次探索相同的节点(如 IDDFS),但渐近地,A* 和 IDA* 都具有相同的指数时间复杂度,即.
那么,哪一个是最好的呢?由于内存限制,当搜索空间很大时,A* 变得不切实际。因此,在这些情况下,IDA* 肯定更合适。一般来说,IDA* 是目前最好的最佳状态空间搜索技术之一。然而,A* 在概念上比 IDA* 更简单。因此,在实践中,A* 可能比 IDA* 更容易实现,但在实际场景中,这并不是真正的问题,因为它们都相对容易实现(无论如何)。