LPA* 算法介紹

Lifelong Planning A Star

1.簡介

LPA*算法(全稱Lifelong Planning A*算法)時Koenig和Likhachev在2004年提出的,是一種參考人工智能的增量搜索進行改進的A*算法。它被用來處理動態環境下從給定起始點到給定目標點的最短路徑問題(劃重點!!!起始點和目標點是固定的)。

A*算法的相關內容不再贅述,本文針對LPA*論文的相關內容進行分析。

2.符號表示

S:地形圖中的路徑節點的集合,s屬於S

succ(s):successors,節點s的後續節點集合,例如節點1,2,3\cdots i按順序均已被搜索過,那麼除了1~i的其它結點均屬於succ(i)

pred(s):predecessors,類比上述,節點s的前代節點,與succ(s)的意義剛好相反。

c(s,s`):兩節點之間的代價函數。

g*(s):節點s到起始點SStart的實際最短距離。

g(s):節點s到起始點的預計最短距離,上面那個值是實際的最短距離,這個值是一個預計值,是隨着算法求解進程不斷變動的,當所有節點的g(s)=rhs(s)時,g(s)的值就是到起始點的實際最短距離,即g(s)=g*(s)。

rhs(s) :right hand sides,爲啥叫這名我也不知道,據說來自DynamicSWSF-FP算法。對於s的所有鄰接節點,求它們到s的距離加上鄰接節點自身的g值,其中最小的那個值作爲s的 rhs 值。具體求法可以見下面的公式

U:同A*算法中的優先隊列,依據每個節點的Key值進行排序。

Key[K1,K2]:優先隊列排序依據的鍵值,包含兩部分,K1與K2,優先比較K1,若相同則比較K2進行排序。K1等同於A*裏的f(s),K2等同於A*裏的g(s),K1與K2的計算方法見下面的圖。

h(s) :同A*中的類似,到目標點的估計距離,在論文中用的是到目標節點的絕對距離進行表示。

路徑搜索的主要過程與A*類似,通過由優先隊列裏不斷將Key最小的值取出來,通過相應的處理將相關鄰接節點或者狀態變動的節點加入到隊列中,直到滿足終止條件即可獲得最短路徑。具體搜索過程在後文介紹。

3.主要函數及公式

CalculateKey(s):計算節點s的Key值。

Initialize():初始化的函數。

UpdateVertex(u):更新當前節點u的值。

ComputeShortestPath():計算最短路徑的函數。

Main():主函數。

rhs的計算方法

上圖爲rhs的計算方法。
整個計算流程
上圖爲LPA*算法的僞代碼。

節點狀態定義:

局部連續(Locally Consistent):g(s)=rhs(s)。當所有節點均爲局部連續狀態時,g(s)的值等於s到起始點的最短距離(注意,反向不成立)。這個概念很重要,當上述條件滿足時,我們可以找到任意一點u到起始點的最短路徑,假設當前位置爲s,父輩節點s’(向着起始點前進的下一個節點)通過最小化(g(s’)+c(s,s’))來獲得,不斷重複直到到達sStart。然而,LPA*並不需要使所有節點均爲局部連續狀態,它通過啓發式搜索將關注點放在搜索上,並且只更新那些與計算最短路徑相關的節點的g值。

局部過連續(Locally Overconsistent):g(s)>rhs(s)。當優先隊列U中取出的節點爲局部過連續狀態時,意味着g(s)可以通過父輩節點使自己到起點的路徑更短,此時將設置g(s)=rhs(s),節點狀態變爲局部連續狀態。

局部欠連續(Locally Underconsistent):g(s)<rhs(s)。這種情況通常出現在父輩的某一節點突然變爲障礙的情況下,造成父輩節點到起點的路徑變大,從而需要修改g(s)的值,如果節點處於這種狀態,則當它由優先隊列中取出時,將其g值設置爲無窮大,即將該節點狀態變爲局部過連續,而局部過連續的點將會被再次添加到優先隊列中,這樣就可以在它下次被取出時將其作爲局部過連續狀態處理,最終達到局部連續狀態(如果這一節點與我們要搜索的最短路徑相關的話)。

4.算法實際演示

論文中以二維平面網格地圖作爲演示對象,每一個網格與周圍八個網格相連(相互之間可以直接到達),黑色網格爲障礙。

第一次搜索:地形發生變動之前的路徑搜索,與A*搜索基本相同。起點爲右上角的點,目標點爲左下角的點。第一張圖描述了各點的到起始點的最短距離以及各點到目標點的h值。左側爲g*值,右側爲h值。最開始所有點rhs和g均設爲無窮,然後由起始點開始,將起始點的rhs設置爲0,然後如上圖過程不斷迭代,直到獲得最短路徑。
第一次搜索
第一次搜索
第一次搜索
第一次搜索及結果

第二次搜索:當場景中地形狀態發生變動,在該例子中,節點(D,1)變爲障礙。首先對該節點進行更新,並將其後代節點置於優先隊列中,該節點的變動對父輩節點的狀態並無影響。同第一次搜索類似,不斷進行迭代直到再次找到到目標位置的最短路徑。
第二次搜索
第二次搜索
第二次搜索及結果

下圖顯示的是兩次搜索的結果圖,通過由目標位置開始不斷選擇最小的g+h值(即表格中的數值)直到到達起始點,來獲得到起始點的最短路徑。
在這裏插入圖片描述

5.總結

LPA*提出了一種解決動態環境下的最短路徑搜索方法,但是它針對的是起始點和目標點固定的情況,如果在機器人按照搜索到的最短路徑行走過程中,環境中某些節點發生變化,這時如果想獲得新的路徑,就得以機器人當前節點爲起始點,重新用LPA*算法解算一次,這效率是很低的。針對這種情況,該論文的作者隨後提出了D* Lite算法來作爲處理動態環境最短路徑問題的高效方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章