我最近正在学习一些类似A *搜索算法的启发式算法。我知道一些关于启发式搜索算法的基本事实,如f(n)= g(n)+ h(n),我也知道每种方法的可接受性和一致性。但令我困惑的是启发式算法如何工作?如果启发式值更接近成本的实际值,为什么会更好?谢谢!
答案 0 :(得分:1)
启发式只是一个很好的教育猜测。近似值可以保证在一定范围内。 christofides算法是一种近似算法,但仅适用于满足三角不等式(metric tsp)的图。资料来源:https://cs.stackexchange.com/questions/10182/difference-between-heuristic-and-approximation-algorithm
答案 1 :(得分:0)
启发式函数就像估算完成端到端路径的最低剩余成本一样。 f(n) = g(n) + h(n)
从底部开始,延伸和完成路径g(n)
的成本最低。因此,对于允许的启发式函数,可以保证搜索成功。
启发式函数越近,搜索越快。考虑极端情况,即h(n) = 0
,您将进行A搜索,而如果h(n)
恰好是剩余成本,这意味着f(n)
是实际成本,那么搜索就完成了。
答案 2 :(得分:0)
考虑一个完美的启发式h(n)。它从n给出了与目标的确切最短距离。
因此,最短路径上的每个节点s的成本函数f(s)将是相同的并且等于最短路径的长度:到目前为止行进的距离加上到目标的确切最短距离。
因此,不难看出,对于所有最短路径节点s和任何给定的非最短路径节点n,我们有f(s)< F(N)。
现在想想A *算法如何使用这种启发式行为:在每个节点上,扩展到队列的所选下一个节点也将是最短路径上的下一个节点,因为它必须具有最小的可能值F。因此,算法将沿着最短路径直接从开始移动到目标节点,没有错误!
如果你没有完美的启发式算法,那么算法显然会产生失误,因为f(n)< f(s)是可能的,因此算法可以沿着不必要的分支“走出最短路径”。
算法的优点在于,只要启发式是可以接受的,它仍然会找到最短路径,只比完美路径慢。