啟發式函數在A* 中的作用


啟發式函數h(n)告訴A*從任何結點n到目標結點的最小代價評估值。因此選擇一個好的啟發式函數很重要。

啟發式函數在A* 中的作用

    啟發式函數可以用來控制A*的行為。一種極端情況,如果h(n)是0,則只有g(n)起作用,此時A* 算法演變成Dijkstra算法,就能保證找到最短路徑。

    如果h(n)總是比從n移動到目標的代價小(或相等),那么A* 保證能找到一條最短路徑。h(n)越小,A* 需要擴展的點越多,運行速度越慢。

    如果h(n)正好等於從n移動到目標的代價,那么A* 將只遵循最佳路徑而不會擴展到其他任何結點,能夠運行地很快。盡管這不可能在所有情況下發生,但你仍可以在某些特                殊情況下讓h(n)正好等於實際代價值。只要所給的信息完善,A* 將運行得很完美。

    如果h(n)比從n移動到目標的代價高,則A* 不能保證找到一條最短路徑,但它可以運行得更快。

    另一種極端情況,如果h(n)比g(n)大很多,則只有h(n)起作用,同時A* 算法演變成貪婪最佳優先搜索算法(Greedy Best-First-Search)。

所以h(n)的選擇成了一個有趣的情況,它取決於我們想要A* 算法中獲得什么結果。h(n)合適的時候,我們會非常快速地得到最短路徑。如果h(n)估計的代價太低,

我們仍會得到最短路徑,但運行速度會減慢。如果估計的代價太高,我們就放棄最短路徑,但A* 將運行得更快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM