我正在學習最近的一種啓發式算法,如A *搜索算法。我知道關於啓發式搜索算法的一些基本事實,如f(n)= g(n)+ h(n),我也知道每種方法的可接受性和一致性。但令我困惑的是啓發式算法如何工作?爲什麼啓發式價值更接近成本的實際價值會更好?謝謝!啓發式算法如何工作?
0
A
回答
0
想想一個完美的啓發式h(n)。它給出從n到目標的確切最短距離。
因此,最短路徑上每個節點的成本函數f(s)將相同並等於最短路徑的長度:到目前爲止行進的距離加上到目標的確切最短距離。因此不難看出,對於所有的最短路徑節點和任何給定的非最短路徑節點n,我們都有f(s)< f(n)。
現在考慮A *算法如何以這樣一種啓發式行爲:在每個節點上,選定的下一個要擴展到隊列中的節點也將是最短路徑上的下一個節點,因爲它必須具有最小的可能值f。因此,該算法將沿着最短路徑從開始直接移動到目標節點,而不會出現任何失誤!
如果你沒有完美的啓發式算法,算法顯然可能會造成失誤,因爲f(n)< f(s)是可能的,所以算法可以沿着不必要的分支「走出最短路徑」。
該算法的優點是,只要啓發式是可接受的,它仍然會找到最短路徑,只比完美路徑慢。
1
啓發式只是一個良好的教育猜測。近似值有保證在一定範圍內。 Christofides算法是一種近似算法,但僅適用於滿足三角不等式(度量tsp)的圖。來源:https://cs.stackexchange.com/questions/10182/difference-between-heuristic-and-approximation-algorithm
0
啓發函數的作用類似於完成端到端路徑的最低剩餘成本估計。 f(n) = g(n) + h(n)
從底部有限的最低成本延伸並完成路徑g(n)
。因此,對於可接受的啓發函數,保證搜索將成功。
啓發式功能越接近,搜索速度越快。想想極端的情況,那h(n) = 0
,你會有一個A搜索,而如果h(n)
正好是剩餘的成本,這意味着f(n)
是真正的成本,那麼搜索就完成了。
相關問題
- 1. A *算法的啓發式
- 2. Trivago算法,如何工作?
- 3. MD5Sum算法如何工作?
- 4. CIMedianFilter如何工作? (算法)
- 5. 如何將遺傳算法與一些啓發式算法混合
- 6. 加權圖中A *算法的啓發式算法
- 7. 啓發式算法和算法之間的聯繫是什麼?
- 8. 無法啓動JBoss開發工作室
- 9. Java併發API工作竊取算法
- 10. Hill Climbing算法是如何工作的?
- 11. NSDictionary算法如何在iOS中工作?
- 12. 文檔差異算法如何工作?
- 13. MapReduce排序算法如何工作?
- 14. 這個算法是如何工作的?
- 15. 比較軟件算法如何工作?
- 16. 如何獲取BucketSort算法的工作?
- 17. Cauchy Reed-Solomon算法如何工作?
- 18. CYK算法是如何工作的?
- 19. 當啓發式算法總是低估時,A *算法的最優性證明
- 20. 爲什麼A *算法的啓發式算法是不可接受的?
- 21. 最佳搜索算法不允許啓發式
- 22. 列生成是精確還是啓發式算法?
- 23. 回溯算法是否被認爲是啓發式的?
- 24. 搜索子集,算法(最佳或啓發式)
- 25. A *算法和使用F和G啓發式
- 26. 我應該採用哪種TSP啓發式算法?
- 27. 星型算法 - 可接受的啓發式
- 28. 爲A *算法獲取2個座標的啓發式
- 29. 從函數中尋找最小值的啓發式算法
- 30. 啓發式路徑算法(波爾)完整性