專利名稱:尋找?guī)Ъs束的最短路徑的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種尋找最短路徑的方法,尤其是涉及一種尋找?guī)Ъs束的最短路徑的方法。
背景技術(shù):
尋找最短路徑在許多領(lǐng)域中都有應(yīng)用,如機器人尋路、智能交通中車輛導(dǎo)航路徑計算等。尋找最短路徑通常在一個抽象的圖中進行,圖由邊和節(jié)點組成,其中邊可對應(yīng)到實際的道路,節(jié)點對應(yīng)到連接各道路的路口。
傳統(tǒng)的尋找最短路徑的方法有如Dijkstra方法,可尋找指定起點和圖中任意點作為終點的最短路徑,其基本思想就是從起點開始尋找與已找到的節(jié)點最近的節(jié)點,直到找到目的節(jié)點。Dijkstra方法實質(zhì)上是一種寬度優(yōu)先的搜索,通常尋找路徑是希望找到指定起點和終點之間的最短路徑,然而Dijkstra方法并不利用終點信息,只是從起點開始盲目地向各個方向?qū)ふ?,因此效率較低,通常在找到終點前需要先找到起點到很多不相關(guān)的點的最短路徑。對此的改進有A*路徑尋找方法,這是一種啟發(fā)式的尋找最短路徑的方法, 其方法框架與Dijkstra方法類似,但在尋找的過程中利用了終點的信息,查找節(jié)點時不僅僅考慮與已找到的節(jié)點最近的節(jié)點,還考慮了這一點與終點的距離。由于在找到終點前并不知道這些點到終點的實際路程,因此用直線距離代替,成為一個啟發(fā)式參數(shù)。因為考慮了到終點的距離,A*路徑尋找方法會快速地向終點方向前進,而不會過多地考慮背向終點的方向,從而提高了路徑尋找的效率。
在車輛導(dǎo)航的路徑計算中,路網(wǎng)被抽象成圖,若起點和終點都是路口節(jié)點,可直接采用A*路徑尋找方法找到一條最短路徑。但是在實際的車輛導(dǎo)航中,除了路網(wǎng)本身的拓?fù)浣Y(jié)構(gòu)外,還需要考慮到交通規(guī)則的額外約束,如單行線、路口禁止向某個方向轉(zhuǎn)彎等。其中單行線只需要將表示路網(wǎng)的圖結(jié)構(gòu)改為有向圖,去掉禁行方向的那些邊后仍可直接采用A* 路徑尋找方法。而路口禁止轉(zhuǎn)彎涉及到三個相鄰節(jié)點之間的關(guān)系,無法通過去除邊等修改原有圖的方法來描述這種關(guān)系,需要額外的禁行信息,稱為約束,因此尋找最短路徑過程中涉及到的圖就是帶有了約束的圖。發(fā)明內(nèi)容
為了克服現(xiàn)有的A*路徑尋找方法不支持在帶有無法在圖直接表示的約束的圖中進行路徑尋找,本發(fā)明的目的在于提供一種尋找?guī)Ъs束的最短路徑的方法,能夠在一個帶有約束的路網(wǎng)中尋找指定起點和終點間可行的最短路徑。
本發(fā)明采用的技術(shù)方案的步驟如下1. 1在給定的路網(wǎng)上尋找指定起點和終點的最短路徑,路網(wǎng)是由表示路口的節(jié)點和表示連接路口的道路的邊組成,指定的起點和終點都是圖中的節(jié)點;路網(wǎng)有額外的禁行規(guī)則約束;1. 2創(chuàng)建兩個空表,分別稱為OPEN和CLOSE,將路徑的起點放入OPEN表;將路徑起點的g屬性設(shè)為0,h屬性設(shè)為起點和終點的直線距離,f屬性設(shè)為g和h的和,parent屬性和 parent_set屬性設(shè)為空;1. 3若OPEN表不是空表,從OPEN表中取出其中f最小的節(jié)點,表示為v,若ν不是終點則對于與ν有邊連通的每個節(jié)點c執(zhí)行以下操作后將ν移入CLOSE表1. 3. 1若ν不是起點,則在ν的parent_set屬性中找一個節(jié)點到達(dá)信息gParent, gParent的node屬性代表這一節(jié)點,使得從node經(jīng)過ν到達(dá)c是允許的,且選擇的gParent 是ν的parent_Set中所有可行節(jié)點中使得從起點經(jīng)過ν到c的路徑是最短的,若ν不是起點且找不到gParent則放棄當(dāng)前節(jié)點c,繼續(xù)處理下一節(jié)點;1. 3. 2若節(jié)點c已有比gParent的path更短的路徑,則將節(jié)點ν作為c的一個可行的到達(dá)節(jié)點加入c的parent_Set,若存在不允許從任意節(jié)點經(jīng)過c到達(dá)其他節(jié)點的禁行規(guī)則, 則此時有可能通過ν經(jīng)c到達(dá),因此將c加入OPEN表以便進一步更新c的后續(xù)節(jié)點;1. 3. 3若gParent的path比節(jié)點c已有的路徑更短,或c沒有已有路徑,則將其c的 parent設(shè)為v,c的g屬性設(shè)為此路徑的長度,c的h屬性設(shè)為c到終點的直線距離,c的f 屬性設(shè)為g和h的和;若ν不是起點,則將ν和gParent的路徑組成的節(jié)點到達(dá)信息作為c 的一條路徑加入c的parent_set,否則直接將ν放入parent_set,并把c放入OPEN表,以便進一步更新c的后續(xù)節(jié)點的路徑;1.4若OPEN表是空表則所需路徑不存在,尋找失?。蝗鬙PEN表中取出的節(jié)點ν為終點則尋找成功,從終點的parent_Set屬性中找到對應(yīng)于終點的parent屬性的路徑即為從起點到終點的最短路徑。
2、所述的表示路網(wǎng)的圖中的每個節(jié)點ν帶有f、g、h、parent和parent_set屬性, 其意義為2.Ig表示起點到節(jié)點ν的已找到的最短路徑長度; 2. 2h表示節(jié)點ν到終點的直線距離;2. 3f為節(jié)點ν的g和h的和;2. 4parent_set屬性為一個集合,集合中每一項是一個三元組(node,len, path),稱為節(jié)點到達(dá)信息,表示已找到的從起點經(jīng)過節(jié)點node后直接到節(jié)點ν的一條路徑,此路徑為 path,長度為Ien ;直接到達(dá)指node經(jīng)過一條邊就能到達(dá)ν ;2. 5parent是節(jié)點ν的parent_set中Ien最短的三元組中的node,即節(jié)點ν到所有路徑中最短路徑中的ν的前一節(jié)點。
3、所述的禁行規(guī)則表示為由三個節(jié)點組成的三元組(a,b, c),意義是不允許從節(jié)點a經(jīng)過節(jié)點b到達(dá)節(jié)點c ;在尋找最短路徑時保證路徑不違反任何一條進行規(guī)則。
4、所述的ν的parent_set屬性中查找gParent節(jié)點的過程是對于ν的parent_ set中的每一節(jié)點到達(dá)信息p,執(zhí)行以下操作若不存在從P的node經(jīng)過ν到達(dá)c的禁行規(guī)則且從node經(jīng)過ν到達(dá)c的路徑比當(dāng)前找到的路徑更短,則將當(dāng)前找到的路徑設(shè)為此路徑,并將gParent設(shè)為ρ。
5、所述的將ν和gParent的路徑組成的節(jié)點到達(dá)信息作為c的一條路徑加入c的 parent_set的過程包括以下操作5. 1若c的parent_set中已經(jīng)包含node為ν的節(jié)點到達(dá)信息,則從parent_set中刪除這一節(jié)點到達(dá)信息;5. 2創(chuàng)建一個新的節(jié)點到達(dá)信息三元組,三元組中的node為v,Ien為gParent的Ien 與V、c之間的邊長之和,path為gParent的path屬性加上從ν到c的邊。
本發(fā)明能夠在一個帶有約束的路網(wǎng)中尋找指定起點和終點間可行的最短路徑。發(fā)明用由多個節(jié)點和邊組成的圖表示路網(wǎng),用三個節(jié)點組成的三元組(a,b,c)表示無法從a 經(jīng)過b到達(dá)c的禁行規(guī)則。本發(fā)明公開的尋找?guī)Ъs束的最短路徑的方法是在尋找路徑時記錄每個節(jié)點可能到達(dá)的所有路徑,并在尋找下一節(jié)點時只選擇不違反禁行規(guī)則約束的路徑。最終通過對節(jié)點的選擇尋找到滿足約束條件的最短路徑。
本發(fā)明具有的有益效果是能夠在帶有禁行規(guī)則約束的路網(wǎng)上尋找最短路徑,解決了傳統(tǒng)最短路徑尋找方法無法處理禁行約束的問題,滿足智能交通等領(lǐng)域的實際需求。
圖1是尋找?guī)Ъs束的最短路徑方法的流程圖。
圖2是具體實施方式
中的實施例所用的路網(wǎng),由節(jié)點(空心圓)和邊(連接節(jié)點的線)組成,節(jié)點表示路口,邊表示連接路口的道路,邊帶有箭頭,表示對應(yīng)道路允許的通行方向,路口邊上的字母表示路口編號,道路邊上的數(shù)字為對應(yīng)道路的長度。
具體實施方式
下面結(jié)合附圖和實施例對本發(fā)明作進一步說明。
本發(fā)明如圖1所示1. 1在給定的路網(wǎng)上尋找指定起點和終點的最短路徑,路網(wǎng)是由表示路口的節(jié)點和表示連接路口的道路的邊組成,指定的起點和終點都是圖中的節(jié)點;路網(wǎng)有額外的禁行規(guī)則約束;1. 2創(chuàng)建兩個空表,分別稱為OPEN和CLOSE,將路徑的起點放入OPEN表;將路徑起點的 g屬性設(shè)為0,h屬性設(shè)為起點和終點的直線距離,f屬性設(shè)為g和h的和,parent屬性和 parent_set屬性設(shè)為空;1. 3判斷OPEN表是否非空,若否,執(zhí)行1. 4的操作,若是則執(zhí)行1. 5的操作; 1. 4判斷最短路徑尋找失敗,尋找流程結(jié)束。
1.5從OPEN表中取出其中f最小的節(jié)點,表示為ν ;之后按照1. 6操作 1. 6判斷ν是否為終點,若是執(zhí)行1. 7的操作,若否執(zhí)行1. 8的操作;1.7判斷最短路徑尋找成功,從終點的parent_Set屬性中找到對應(yīng)于終點的parent屬性的路徑作為從起點到終點的最短路徑,尋找流程結(jié)束。
1. 8判斷ν是否為起點,或者ν是否存在一個gParent使得從gParent經(jīng)過ν到達(dá)c是允許的;若是則按照1. 9操作,若否則按照1. 13操作;1. 9判斷節(jié)點c是否已有比gParent的path更短的路徑,若是則按照1. 10操作,若否則按照1. 12操作;1. 10將節(jié)點ν作為c的一個可行的到達(dá)節(jié)點加入c的parent_set,之后按照1. 11操作;1.11判斷是否存在規(guī)則(*,C, *),若是則說明此時有可能通過V經(jīng)(3到達(dá),因此按照1. 16操作,若否則按照1. 13操作;1. 12將c的parent設(shè)為v,c的g屬性設(shè)為此路徑的長度,c的h屬性設(shè)為c到終點的直線距離,c的f屬性設(shè)為g和h的和,并將ν和對應(yīng)的路徑加入c的parentset屬性,之后按照1. 16操作;1. 13判斷是否還有未考察的和ν直接相連的節(jié)點c,若是則按照1. 14操作,若否則按照1. 15操作;1. 14在現(xiàn)有到達(dá)ν的路徑中尋找經(jīng)過ν到達(dá)c的可行最短路徑gParent,之后按照1. 8 操作;1. 15將ν從OPEN表移入CLOSE表,之后按照1. 3操作;1.16將c加入OPEN表,之后按照1. 13操作;2、所述的表示路網(wǎng)的圖中的每個節(jié)點ν帶有f、g、Kparent和parentjet屬性,其意義為2. Ig表示起點到節(jié)點ν的已找到的最短路徑長度; 2. 2h表示節(jié)點ν到終點的直線距離; 2. 3f為節(jié)點ν的g和h的和;2. 4parent_set屬性為一個集合,集合中每一項是一個三元組(node,len, path),稱為節(jié)點到達(dá)信息,表示已找到的從起點經(jīng)過節(jié)點node后直接到節(jié)點ν的一條路徑,此路徑為 path,長度為Ien ;直接到達(dá)指node經(jīng)過一條邊就能到達(dá)ν ;2. 5parent是節(jié)點ν的parent_set中Ien最短的三元組中的node,即節(jié)點ν到所有路徑中最短路徑中的ν的前一節(jié)點。
3、所述的禁行規(guī)則表示為由三個節(jié)點組成的三元組(a,b, c),意義是不允許從節(jié)點a經(jīng)過節(jié)點b到達(dá)節(jié)點c ;在尋找最短路徑時保證路徑不違反任何一條進行規(guī)則。
4、所述的ν的parent_set屬性中查找gParent節(jié)點的過程是對于ν的parent_ set中的每一節(jié)點到達(dá)信息p,執(zhí)行以下操作若不存在從P的node經(jīng)過ν到達(dá)c的禁行規(guī)則且從node經(jīng)過ν到達(dá)c的路徑比當(dāng)前找到的路徑更短,則將當(dāng)前找到的路徑設(shè)為此路徑,并將gParent設(shè)為ρ。
5、所述的將ν和gParent的路徑組成的節(jié)點到達(dá)信息作為c的一條路徑加入c的 parent_set的過程包括以下操作5. 1若c的parent_set中已經(jīng)包含node為ν的節(jié)點到達(dá)信息,則從parent_set中刪除這一節(jié)點到達(dá)信息;5. 2創(chuàng)建一個新的節(jié)點到達(dá)信息三元組,三元組中的node為v,Ien為gParent的Ien 與V、c之間的邊長之和,path為gParent的path屬性加上從ν到c的邊。
以下舉例說明本發(fā)明的具體實施過程,舉例所使用的路網(wǎng)如圖2所示,并且還有一條額外的禁行規(guī)則,(A,B, H),即不允許從節(jié)點A經(jīng)過節(jié)點B到達(dá)節(jié)點H。目標(biāo)是尋找從路口 A到路口 H的最短路徑。
初始化首先創(chuàng)建兩個空表OPEN和CLOSE,將起點A存入OPEN表,將A的g屬性設(shè)為0,h屬性設(shè)為A到H的直線距離12. 2 (這一距離通過A和H的經(jīng)緯度計算得到)。將 A的parent屬性和parent_set屬性設(shè)為空,f屬性為h+g即12. 2。
迭代1 此時OPEN表不是空表,由于OPEN表中只有A因此取出A,因為A不是終點,于是對與A有邊連通的每個節(jié)點執(zhí)行操作后將A放入CLOSE表。A與B、D、F都有邊連通,對B、D、F的操作如下對于B,由于A是起點,因此將B的parent設(shè)為A,B的g設(shè)為從起點A到B的路徑長度,即7,B的h設(shè)為B到H的直線距離,即10,B的f設(shè)為h+g即17,將三元組(A, 7, A-B) 放入B的parent_set,并把B放入OPEN表。
對于D,由于A是起點,因此將D的parent設(shè)為A,D的g設(shè)為從起點A到D的路徑長度,即15,DWh設(shè)為D到H的直線距離,即19. 2,D的f設(shè)為h+g即34. 2,將三元組 (A, 15,A-D)放入 D 的 parent_set,并把 D 放入 OPEN 表。
對于F,由于A是起點,因此將F的parent設(shè)為A,F(xiàn)的g設(shè)為從起點A到F的路徑長度4,即7,F(xiàn)的h設(shè)為F到H的直線距離,即14. 9,F(xiàn)的f設(shè)為h+g即21. 9,將三元組 (A, 4,A-F)放入 F 的 parent_set,并把 F 放入 OPEN 表。
迭代2 此時OPEN表中有B、D、F三個節(jié)點,且其中f最小的節(jié)點為B,因此從OPEN 表中取出B存入CLOSE表,對于與B相連的節(jié)點A、H、C操作如下對于節(jié)點A,因為B不是起點,在B的parent_set中找gParent,gParent為(A,7,A-B), 由于不存在禁行規(guī)則(A,B,A),因此從A經(jīng)過B到達(dá)A是可行的。由于A已有比A-B-A更短的路徑(長度為0),將(B,14,A-B-A)加入A的parentjet,由于不存在符合(*,A, *)的禁行規(guī)則,A不會被重新放入OPEN表。
對于節(jié)點H,因為B不是起點,在B的parent_set中找gParent為(A,7,A-B),由于存在進行規(guī)則(A,B,H),因而節(jié)點H目前不可到達(dá),繼續(xù)處理下一節(jié)點C。
對于節(jié)點C,因為B不是起點,在B的parent_set中找gParent為(A,7,A-B),由于不存在禁行規(guī)則(A,B, C),因此從A經(jīng)過B到達(dá)C是可行的。由于C沒有已有路徑,因此將 C的parent屬性設(shè)為B,C的g屬性設(shè)為16,C的h屬性設(shè)為19,C的f屬性為h+g即35, 將(B,16,A-B-C)加入 C 的 parent_set,再將 C 放入 OPEN 表。
迭代3 此時OPEN表中有D、F、C三個節(jié)點,其中f最小的節(jié)點為F,因此從OPEN表中取出F并放入CLOSE表,對于F相連的節(jié)點A、G、E操作如下對于節(jié)點A,因為F不是起點,在F的parent_set中找gParent為(A,4,A-F),由于不存在禁行規(guī)則(A,F(xiàn),A),因此從A經(jīng)過F到達(dá)A是可行的。由于A已有比A-F-A更短的路徑 (長度為0),將(F,8,A-F-A)加入A的parentjet,由于不存在符合(*,A, *)的禁行規(guī)則,A 不會被重新放入OPEN表。
對于節(jié)點G,因為F不是起點,在F的parent_set中找gParent為(A,4,A-F),由于不存在禁行規(guī)則(A,F(xiàn), G),因此從A經(jīng)過F到達(dá)G是可行的。由于G沒有已有路徑,因此將G的parent屬性設(shè)為F,G的g屬性設(shè)為10,G的h屬性設(shè)為8. 9,G的f屬性為h+g即 18. 9,將(F,10, A-F-G)加入 G 的 parent_set,再將 G 放入 OPEN 表。
對于節(jié)點E,因為F不是起點,在F的parent_set中找gParent為(A,4,A-F),由于不存在禁行規(guī)則(A,F(xiàn), E),因此從A經(jīng)過F到達(dá)E是可行的。由于E沒有已有路徑,因此將 E的parent屬性設(shè)為F,E的g屬性設(shè)為13,E的h屬性設(shè)為22,將f屬性設(shè)為h+g即35, 將(F,13,A-F-E)加入 E 的 parent_set,再將 E 放入 OPEN 表。
迭代4 此時OPEN表中有D、C、G、E四個節(jié)點,其中f最小的節(jié)點為G,因此從OPEN 表中取出G并放入CLOSE表,對于G相連的節(jié)點H、F操作如下對于節(jié)點H,因為G不是起點,在G的parent_set中找gParent為(F,10, A-F-G),由于不存在禁行規(guī)則(F,G, H),因此從F經(jīng)過G到達(dá)H是可行的,由于H沒有已有路徑,因此將 H的parent屬性設(shè)為G,H的g屬性設(shè)為18,H的h屬性設(shè)為0,H的f屬性為h+g即18,將 (G, 17,A-F-G-H)加入 H 的 parent_set,在將 H 放入 OPEN 表。
對于節(jié)點F,因為G不是起點,在G的parent_set中找gParent為(F, 10,A-F-G), 由于不存在禁行規(guī)則(F,G, F),因此從F經(jīng)過G到達(dá)F是可行的,由于F現(xiàn)有路徑比A-F-G-F 更短,因此將(G,16,A-F-G-F)加入F的parentjet,由于不存在符合(*,F(xiàn), *)的禁行規(guī)則, F不會被重新放入OPEN表。
搜索成功此時OPEN表中有D、C、E、H四個節(jié)點,其中f最小的節(jié)點為H,將H從 OPEN表中取出,且H是終點,則路徑尋找成功,從H的parent_set中找到對應(yīng)于H的parent 即G的路徑A-F-G-H即為所需的路徑。
上例中雖然長度為17的路徑A-B-H比長度為18的路徑A-F-G-H更短,但其因為存在禁行規(guī)則(A,B, H),因此沒有被選用,本發(fā)明提出的方法正確選擇了除此之外的最短路徑 A-F-G-H。
權(quán)利要求
1. 一種尋找?guī)Ъs束的最短路徑的方法,其特征在于該方法的步驟如下 1.1在給定的路網(wǎng)上尋找指定起點和終點的最短路徑,路網(wǎng)是由表示路口的節(jié)點和表示連接路口的道路的邊組成,指定的起點和終點都是圖中的節(jié)點;路網(wǎng)有額外的禁行規(guī)則約束;1. 2創(chuàng)建兩個空表,分別稱為OPEN和CLOSE,將路徑的起點放入OPEN表;將路徑起點的 g屬性設(shè)為0,h屬性設(shè)為起點和終點的直線距離,f屬性設(shè)為g和h的和,parent屬性和 parent_set屬性設(shè)為空;1. 3若OPEN表不是空表,從OPEN表中取出其中f最小的節(jié)點,表示為v,若ν不是終點則對于與ν有邊連通的每個節(jié)點c執(zhí)行以下操作后將ν移入CLOSE表1. 3. 1若ν不是起點,則在ν的parent_set屬性中找一個節(jié)點到達(dá)信息gParent, gParent的node屬性代表這一節(jié)點,使得從node經(jīng)過ν到達(dá)c是允許的,且選擇的gParent 是ν的parent_Set中所有可行節(jié)點中使得從起點經(jīng)過ν到c的路徑是最短的,若ν不是起點且找不到gParent則放棄當(dāng)前節(jié)點c,繼續(xù)處理下一節(jié)點;1. 3. 2若節(jié)點c已有比gParent的path更短的路徑,則將節(jié)點ν作為c的一個可行的到達(dá)節(jié)點加入c的parent_set,若存在不允許從任意節(jié)點經(jīng)過c到達(dá)其他節(jié)點的禁行規(guī)則, 則此時有可能通過ν經(jīng)c到達(dá),因此將c加入OPEN表以便進一步更新c的后續(xù)節(jié)點;1. 3. 3若gParent的path比節(jié)點c已有的路徑更短,或c沒有已有路徑,則將其c的 parent設(shè)為v,c的g屬性設(shè)為此路徑的長度,c的h屬性設(shè)為c到終點的直線距離,c的f 屬性設(shè)為g和h的和;若ν不是起點,則將ν和gParent的路徑組成的節(jié)點到達(dá)信息作為c 的一條路徑加入c的parent_set,否則直接將ν放入parent_set,并把c放入OPEN表,以便進一步更新c的后續(xù)節(jié)點的路徑;1.4若OPEN表是空表則所需路徑不存在,尋找失敗;若OPEN表中取出的節(jié)點ν為終點則尋找成功,從終點的parent_Set屬性中找到對應(yīng)于終點的parent屬性的路徑即為從起點到終點的最短路徑。
2.根據(jù)權(quán)利要求1所述的一種尋找?guī)Ъs束的最短路徑的方法,其特征在于所述的表示路網(wǎng)的圖中的每個節(jié)點ν帶有f、g、Kparent和parentjet屬性,其意義為2. Ig表示起點到節(jié)點ν的已找到的最短路徑長度; 2. 2h表示節(jié)點ν到終點的直線距離; 2. 3f為節(jié)點ν的g和h的和;2. 4parent_set屬性為一個集合,集合中每一項是一個三元組(node,len, path),稱為節(jié)點到達(dá)信息,表示已找到的從起點經(jīng)過節(jié)點node后直接到節(jié)點ν的一條路徑,此路徑為 path,長度為Ien ;直接到達(dá)指node經(jīng)過一條邊就能到達(dá)ν ;2.5parent是節(jié)點ν的parent_set中Ien最短的三元組中的node,即節(jié)點ν到所有路徑中最短路徑中的ν的前一節(jié)點。
3.根據(jù)權(quán)利要求1所述的一種尋找?guī)Ъs束的最短路徑的方法,其特征在于所述的禁行規(guī)則表示為由三個節(jié)點組成的三元組( b, c),意義是不允許從節(jié)點a經(jīng)過節(jié)點b到達(dá)節(jié)點c ;在尋找最短路徑時保證路徑不違反任何一條進行規(guī)則。
4.根據(jù)權(quán)利要求1所述的一種尋找?guī)Ъs束的最短路徑的方法,其特征在于所述的ν 的parent_set屬性中查找gParent節(jié)點的過程是對于ν的parent_set中的每一節(jié)點到達(dá)信息P,執(zhí)行以下操作若不存在從P的node經(jīng)過ν到達(dá)c的禁行規(guī)則且從node經(jīng)過ν到達(dá)c的路徑比當(dāng)前找到的路徑更短,則將當(dāng)前找到的路徑設(shè)為此路徑,并將gParent設(shè)為ρ。
5.根據(jù)權(quán)利要求1所述的一種尋找?guī)Ъs束的最短路徑的方法,其特征在于所述的將ν 和gParent的路徑組成的節(jié)點到達(dá)信息作為c的一條路徑加入c的parent^et的過程包括以下操作5. 1若c的parent_set中已經(jīng)包含node為ν的節(jié)點到達(dá)信息,則從parent_set中刪除這一節(jié)點到達(dá)信息;5. 2創(chuàng)建一個新的節(jié)點到達(dá)信息三元組,三元組中的node為v,Ien為gParent的Ien 與V、c之間的邊長之和,path為gParent的path屬性加上從ν到c的邊。
全文摘要
本發(fā)明公開了一種尋找?guī)Ъs束的最短路徑的方法。能夠在一個帶有約束的路網(wǎng)中尋找指定起點和終點間可行的最短路徑。用由多個節(jié)點和邊組成的圖表示路網(wǎng),用三個節(jié)點組成的三元組(a,b,c)表示無法從a經(jīng)過b到達(dá)c的禁行規(guī)則。本發(fā)明是在尋找路徑時記錄每個節(jié)點可能到達(dá)的所有路徑,并在尋找下一節(jié)點時只選擇不違反禁行規(guī)則約束的路徑。最終通過對節(jié)點的選擇尋找到滿足約束條件的最短路徑。本發(fā)明解決了傳統(tǒng)最短路徑尋找方法無法處理禁行約束的問題,滿足智能交通等領(lǐng)域的實際需求。
文檔編號G06Q10/04GK102506849SQ201110294318
公開日2012年6月20日 申請日期2011年9月28日 優(yōu)先權(quán)日2011年9月28日
發(fā)明者俞立呈, 史梳酥, 王總輝, 陳文智 申請人:浙江大學(xué)