簡體   English   中英

在 A* 中使用可接受和一致的啟發式方法

[英]Usage of admissible and consistent heuristics in A*

有人對為什么必須在 A* 中使用可接受的啟發式以及為什么“應該”使用一致的啟發式有一個簡單和/或直觀的解釋?

可受理

我們認為實現目標所需的成本並不比實際成本高。

為什么我們需要可受理性?

如果任何預期成本小於實際成本,則意味着最優路徑的預期成本總是小於或等於其真實成本,這將小於某些非最優路徑的真實成本。 由於我們總是首先探索具有最低預期總成本的節點,當我們達到目標時,我們只會查看真實成本,因此我們永遠無法通過非最優路徑到達目標。

如果我們認為它的成本會高於實際成本,我們實際上最終可能會走一條更昂貴的道路。 路徑 A 的預期成本可能高於路徑 B 的預期成本,但路徑 A 的實際成本可能更低。 這意味着我們將首先探索非最優路徑 B。

如果啟發式方法不可接受,理論上我們甚至可能永遠不會達到目標(或者至少我們會在到達目標之前探索整個可能的空間)。 雖然使用合理的啟發式方法不太可能做到這一點,但我們可以創建一種啟發式方法,在這種情況下,我們認為距離我們越遠達到目標的成本就越低,並且當遠離目標時,預期剩余成本下降得比實際成本更快。目標。 作為一個簡單(有限)的例子: heuristic = 100000000 - 2 * actual

一致

我們所做的任何舉動都不會降低預期的總成本。 換句話說:所做的任何移動都應減少啟發式,但不會超過該移動的成本。

預期成本 (f(n)) 是預期剩余成本 (h(n))加上到目前為止的成本 (g(n))。 例如,我們可能認為達到目標的總時間為 10 分鍾。 行駛5分鍾后,如果我們認為總時間(包括行駛的5分鍾)是11分鍾就可以了,但我們不應該認為總時間是9分鍾。

注意:對於剩余的費用,我們只考慮我們認為需要多長時間。 實際需要多長時間可能會有所不同。

除了上述之外,當我們已經達到目標時,一致啟發式還需要預期剩余成本為 0。

一致的啟發式也是可以接受的(但不一定相反)。 這是從上面得出的。

為什么我們需要一致性?

如果我們繼續采取行動(朝着目標或遠離目標),我們希望成本增加。 否則,在最終找到最佳路徑之前,我們最終可能會偏離目標並探索一大堆沒有希望的路徑。

注意:如果啟發式是可接受的但不一致,我們不會找到到達目標的非最佳路徑,但找到最佳路徑可能需要一段時間。

例子

h(n) = 啟發式,即從 n 到目標的預期(剩余)成本
g(n) = 從開始到 n 的成本(到目前為止)
t(n) = 從 n 到目標的真實(剩余)成本

h(n) = 10(h(goal) = 0 除外):如果移動成本小於 10,則不可接受,因為在 t(n) < 10 處會有一些 n。不一致,因為移動到目標將涉及減少從 10 到 0 的啟發式,但這樣做的成本低於 10。但是,如果每次移動至少花費 10,這將是可接受且一致的。

h(n) = 0:可接受,因為(對於正成本)達到目標的成本不能低於 0。 一致,因為啟發式永遠不會減少。 雖然不是特別有用。 這相當於Dijkstra 的算法

h(n) = t(n) / 2:可以接受,因為預期成本低於真實成本。 一致,因為移動的成本總是至少是該移動的預期成本的兩倍(如果遠離目標,它也會增加 h(n)),因此任何移動都會增加總的預期成本。

這只是為了讓您說找到的結果是“最佳的”,您可以使用任何您想要的啟發式方法,只是更難證明找到的結果是最佳的。

例如,當您高估到目標節點的距離時,實際距離可能小於估計的距離。 因此,找到的結果可能會被標記為“最佳”,而仍然有更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM