專利名稱:一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及道路搜索方法,尤其涉及一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法。
背景技術(shù):
最短路徑問題一直是各類學科研究的熱點問題,被應用于城市規(guī)劃、交通運輸、應急管理等領(lǐng)域。研究最佳路線問題通常將城市道路網(wǎng)抽象為圖論意義下的網(wǎng)絡問題,問題的核心就變成了網(wǎng)絡圖中的最短路徑問題。在網(wǎng)絡模型中,尋找兩節(jié)點間阻礙最小的路徑;在時間模型中,計算兩節(jié)點間用時最少的路徑;在經(jīng)濟模型中,尋找該事件的最低消耗方法;這些模型中的關(guān)鍵方法都是最短路徑方法。同時,該問題也是GIS網(wǎng)絡分析中的一個基本問題。我們可以利用GIS技術(shù),將在交通網(wǎng)絡分析中的最短路徑問題的研究轉(zhuǎn)化為在矢量地圖中求解最短路徑方法的研究。現(xiàn)有的最短路徑的基本方法可分為:廣度優(yōu)先搜索法和深度優(yōu)先搜索法。廣度優(yōu)先搜索法的典型方法為Dijkstra方法,它是目前GIS應用領(lǐng)域用于求解最短路徑問題的首選方法,同時也是經(jīng)典方法,其優(yōu)點在于能夠求得初始點到目標點之間的所有最短路徑。這種方法在解決單對頂點之間的最短路徑時會產(chǎn)生數(shù)據(jù)冗余,因此不適合應用于實際的求解過程中。目前廣泛被采納的優(yōu)化方法有改進的A*方法、K則最優(yōu)路徑方法和最短路徑的蟻群方法等。其中A*方法是人工智能中一種典型的啟發(fā)式搜索方法,也是一種最優(yōu)優(yōu)先搜索方法,該方法在節(jié)點擴展過程中使用了啟發(fā)信息,使得方法的搜索方向智能地趨向目標節(jié)點,從而很大程度上提高了搜索效率。而深度優(yōu)先搜索法還未有普遍認可的典型方法。由于其盲目性,導致目前為止利用其對最短路徑 求解的相關(guān)研究較少,但是在道路交通路徑搜索中,深度優(yōu)先搜索法其優(yōu)越性的一面。該方法不僅能夠計算出最短路徑,同時可以得到多個備選優(yōu)化路徑形成最短路徑組,最大程度地滿足用戶對不同路徑的選擇需求。王杰臣等基于一種被其稱為圖的節(jié)點弧段聯(lián)合結(jié)構(gòu)表示法,避開采用大規(guī)模數(shù)組,提出了利用深度優(yōu)先原則來計算最短路徑的方法,從而節(jié)約了存儲空間、提高了運算速度,但文章并沒有對深度優(yōu)先方法本身進行改進。莊明在深度優(yōu)先搜索法的基礎(chǔ)上,提出了在搜索過程中采用標記距離的方法,利用預先對路的判斷條件,解決了避免進入循環(huán)圈,和不必要的重復搜索問題,實現(xiàn)了在含障礙網(wǎng)絡的單源最短距離求解問題,但該方法需要事先人為地進行控制優(yōu)化,要求操作人員對搜索路網(wǎng)有一定熟悉程度。張連蓬等則是提出一種方向?qū)?yōu)的快速搜索方法,從而提高搜索到最優(yōu)路徑的速度,但該方法依舊需要遍歷整個節(jié)點網(wǎng)絡,沒有提高整體搜索速度,尤其對于具有大量節(jié)點的交通網(wǎng)絡,必然產(chǎn)生冗余。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)的不足,提供一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法。
基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法的步驟如下:I)確定路徑搜索的道路網(wǎng)信息,包括每個道路節(jié)點的坐標信息、道路的長度和道路兩端節(jié)點信息,然后在道路網(wǎng)中選擇出發(fā)節(jié)點和目標節(jié)點,進行最短路徑的搜索;2)將所有節(jié)點狀態(tài)初始化,將道路網(wǎng)所有的節(jié)點狀態(tài)設置為空,即標志為未搜索狀態(tài),存儲于原始集合中,并將步驟I)中確定的出發(fā)節(jié)點取出,放入開放集合,即作為當前正在搜索的當前節(jié)點Si ;3)搜索道路網(wǎng)中與當前節(jié)點Si相連的節(jié)點,根據(jù)方向?qū)?yōu)原則,排除不滿足方向?qū)?yōu)搜索條件的節(jié)點,同時排除那些關(guān)閉集合中父節(jié)點為當前節(jié)點Si,即已被擴展過的節(jié)點,從而剩下的即為當前節(jié)點Si的可擴展節(jié)點;4)更新可擴展節(jié)點的F值,F(xiàn)值是以可擴展節(jié)點為中間點的最短路徑估算值,并將可擴展節(jié)點的父節(jié)點更新為當前節(jié)點Si,然后將存在于原始集合中的可擴展節(jié)點放入臨時表;5)對臨時表進行排序,將具有最小F值且可擴展節(jié)點的父節(jié)點為當前節(jié)點Si的點放入開放集合,并將可擴展節(jié)點作為當前節(jié)點Si,并重復步驟3) 步驟5);若不存在滿足條件的可擴展節(jié)點,判斷當前節(jié)點Si是否為原始節(jié)點,若不是,則將當前節(jié)點Si放入關(guān)閉集合中,選擇當前節(jié)點Si的父節(jié)點作為當前點Si,重復步驟3) 步驟5);若為原始節(jié)點,進入步驟6); 6)道路節(jié)點搜索完畢后,根據(jù)目標節(jié)點的父節(jié)點,層層回退至初始節(jié)點,該路徑即為最短路徑。所述的步驟4)為:獲取當前節(jié)點Si的每個可擴展節(jié)點對應的F值,F(xiàn)值是從起始節(jié)點出發(fā),經(jīng)過當前節(jié)點Si和該擴展點,到達目標節(jié)點的估算值,對于原始集合中的可擴展節(jié)點,能直接更新F值和賦值可擴展節(jié)點的父節(jié)點為當前節(jié)點Si,并放入臨時集合中,用來篩選下一搜索節(jié)點;對于關(guān)閉表中的可擴展節(jié)點,需要比較之前的F值和現(xiàn)在的F值大小,若現(xiàn)在的路徑花銷較小,則更新原有的F值,將關(guān)閉表中的可擴展節(jié)點的父節(jié)點賦值為當前節(jié)點Si,同時對關(guān)閉表中的可擴展節(jié)點的子節(jié)點采用級聯(lián)更新。所述的步驟5)為:判斷臨時表中是否存在父節(jié)點為當前節(jié)點Si的節(jié)點,若存在,將具有最小F值的節(jié)點取出,作為當前節(jié)點Si,并重復步驟3) 步驟5);若不存在,說明當前節(jié)點Si的所有節(jié)點都被搜索過,則需要判讀當前節(jié)點Si是否為初始節(jié)點,若是,則說明所有從初始節(jié)點出發(fā)的所有可擴展節(jié)點都已搜索完畢,循環(huán)結(jié)束;若不是,則重新回退到當前節(jié)點Si的父節(jié)點,進行搜索,即將當前節(jié)點Si的父節(jié)點作為當前節(jié)點Si,并重復步驟3) 步驟5)。本發(fā)明首先通過對擴展節(jié)點進行方向性選擇,縮小了搜索的范圍,提高了方法的效率,避免對不必要的結(jié)點的搜索。同時,引入啟發(fā)式搜索方法,采用啟發(fā)函數(shù)的思想,優(yōu)先選擇權(quán)值較低的點進行擴展,降低了原有方法的盲目性,提高找到搜索最短路徑的效率。
:圖1是本發(fā)明的方向?qū)?yōu)原則示意圖;圖2是本發(fā)明的啟發(fā)式方法示意圖;圖3是基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法流程圖示意圖。
具體實施方式
:如圖1所示,在一般的城市道路交通網(wǎng)中,最短路徑所經(jīng)道路結(jié)點一般都位于起點和終點一定范圍的內(nèi),因此通過建立適當?shù)暮Y選條件,選擇符合條件的節(jié)點,可以提高計算效率,避免對不必要的結(jié)點的搜索,因此本方法采用了方向?qū)?yōu)原則,在擴展當前節(jié)點之前,首先,計算出兩個夾角值Θ1和Θ 2,判斷該節(jié)點是否在當前節(jié)點和終點的距離范圍內(nèi)。如圖2,建立以當前節(jié)點為原點0,以原點到終點I連線方向為X軸的直角坐標系,Θ I為擴展節(jié)點2,當前節(jié)點O和終點I之間的夾角,Θ 2為擴展節(jié)點2,終點I和當前節(jié)點O之間的夾角。當Θ1和Θ 2同時滿足小于90°時,才將其納入當前節(jié)點的可擴展節(jié)點集合中。該步驟相當于對數(shù)據(jù)節(jié)點進行預處理。計算公式:
權(quán)利要求
1.一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法,其特征在于它的步驟如下: 1)確定路徑搜索的道路網(wǎng)信息,包括每個道路節(jié)點的坐標信息、道路的長度和道路兩端節(jié)點信息,然后在道路網(wǎng)中選擇出發(fā)節(jié)點和目標節(jié)點,進行最短路徑的搜索; 2)將所有節(jié)點狀態(tài)初始化,將道路網(wǎng)所有的節(jié)點狀態(tài)設置為空,即標志為未搜索狀態(tài),存儲于原始集合中,并將步驟I)中確定的出發(fā)節(jié)點取出,放入開放集合,即作為當前正在搜索的當前節(jié)點Si ; 3)搜索道路網(wǎng)中與當前節(jié)點Si相連的節(jié)點,根據(jù)方向?qū)?yōu)原則,排除不滿足方向?qū)?yōu)搜索條件的節(jié)點,同時排除那些關(guān)閉集合中父節(jié)點為當前節(jié)點Si,即已被擴展過的節(jié)點,從而剩下的即為當前節(jié)點Si的可擴展節(jié)點; 4)更新可擴展節(jié)點的F值,F(xiàn)值是以可擴展節(jié)點為中間點的最短路徑估算值,并將可擴展節(jié)點的父節(jié)點更新為當前節(jié)點Si,然后將存在于原始集合中的可擴展節(jié)點放入臨時表; 5)對臨時表進行排序,將具有最小F值且可擴展節(jié)點的父節(jié)點為當前節(jié)點Si的點放入開放集合,并將可擴展節(jié)點 作為當前節(jié)點Si,并重復步驟3) 步驟5);若不存在滿足條件的可擴展節(jié)點,判斷當前節(jié)點Si是否為原始節(jié)點,若不是,則將當前節(jié)點Si放入關(guān)閉集合中,選擇當前節(jié)點Si的父節(jié)點作為當前點Si,重復步驟3) 步驟5);若為原始節(jié)點,進入步驟6); 6)道路節(jié)點搜索完畢后,根據(jù)目標節(jié)點的父節(jié)點,層層回退至初始節(jié)點,該路徑即為最短路徑。
2.根據(jù)權(quán)利要求1所述的一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法,其特征在于所述的步驟4)為:獲取當前節(jié)點Si的每個可擴展節(jié)點對應的F值,F(xiàn)值是從起始節(jié)點出發(fā),經(jīng)過當前節(jié)點Si和該擴展點,到達目標節(jié)點的估算值,對于原始集合中的可擴展節(jié)點,能直接更新F值和賦值可擴展節(jié)點的父節(jié)點為當前節(jié)點Si,并放入臨時集合中,用來篩選下一搜索節(jié)點;對于關(guān)閉表中的可擴展節(jié)點,需要比較之前的F值和現(xiàn)在的F值大小,若現(xiàn)在的路徑花銷較小,則更新原有的F值,將關(guān)閉表中的可擴展節(jié)點的父節(jié)點賦值為當前節(jié)點Si,同時對關(guān)閉表中的可擴展節(jié)點的子節(jié)點采用級聯(lián)更新。
3.根據(jù)權(quán)利要求1所述的一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法,其特征在于所述的步驟5)為:判斷臨時表中是否存在父節(jié)點為當前節(jié)點Si的節(jié)點,若存在,將具有最小F值的節(jié)點取出,作為當前節(jié)點Si,并重復步驟3) 步驟5);若不存在,說明當前節(jié)點Si的所有節(jié)點都被搜索過,則需要判讀當前節(jié)點Si是否為初始節(jié)點,若是,則說明所有從初始節(jié)點出發(fā)的所有可擴展節(jié)點都已搜索完畢,循環(huán)結(jié)束;若不是,則重新回退到當前節(jié)點Si的父節(jié)點,進行搜索,即將當前節(jié)點Si的父節(jié)點作為當前節(jié)點Si,并重復步驟3) 步驟5)。
全文摘要
本發(fā)明公開了一種基于方向?qū)?yōu)的啟發(fā)式最短路徑搜索方法。該方法首先對當前節(jié)點的可擴展節(jié)點進行方向性選擇,縮小了節(jié)點搜索的范圍。然后根據(jù)啟發(fā)式搜索函數(shù),對滿足要求的節(jié)點的路徑估算值進行比較,優(yōu)先選擇權(quán)值較低的點進行擴展,并記錄下其父節(jié)點信息。通過深度優(yōu)先的方式,步步深入搜索道路節(jié)點,直至所有可擴展節(jié)點都被遍歷為止。本發(fā)明的優(yōu)點在于利用方向?qū)?yōu)的原則大大降低了節(jié)點的遍歷個數(shù),提高了搜索速度,同時引入啟發(fā)式函數(shù)能夠降低深度優(yōu)先方法在擴展節(jié)點時的盲目性,優(yōu)先考慮最優(yōu)節(jié)點進行擴展,從而能夠在搜索早期找到最短路徑,還能夠提供多條備選路徑。
文檔編號G06F17/30GK103226581SQ20131011412
公開日2013年7月31日 申請日期2013年4月2日 優(yōu)先權(quán)日2013年4月2日
發(fā)明者杜震洪, 張豐, 劉仁義, 房佳, 徐聰 申請人:浙江大學