本發(fā)明屬于導(dǎo)航技術(shù)領(lǐng)域,特別涉及一種路徑規(guī)劃方法,可用于交通控制、資源配置和車(chē)輛導(dǎo)航。
背景技術(shù):
路徑規(guī)劃是指,在具有障礙物的環(huán)境中,按照一定的評(píng)價(jià)標(biāo)準(zhǔn),尋找一條從起始狀態(tài)到目標(biāo)狀態(tài)的無(wú)碰撞路徑。路徑規(guī)劃問(wèn)題可以抽象成圖論中的最短路徑搜索問(wèn)題,即圖論中求解帶權(quán)有向圖的最優(yōu)路徑問(wèn)題。在交通控制、資源配置、車(chē)輛導(dǎo)航等領(lǐng)域,最短路徑算法越來(lái)越成為研究的熱點(diǎn)。
在路徑規(guī)劃方面,許多學(xué)者提出一系列解決從起點(diǎn)到終點(diǎn)最大效益的規(guī)劃方法,其中比較經(jīng)典的是基于Dijkstra算法的路徑規(guī)劃和基于A*算法的路徑規(guī)劃。
Dijkstra算法按照路徑長(zhǎng)度遞增的次序產(chǎn)生最短路徑,基于起點(diǎn)和終點(diǎn)的鄰接節(jié)點(diǎn)不斷向外擴(kuò)展搜索范圍,每一次擴(kuò)展鄰接節(jié)點(diǎn)都需要比較節(jié)點(diǎn)所在弧段長(zhǎng)度,需要將節(jié)點(diǎn)集合分為臨時(shí)標(biāo)記節(jié)點(diǎn)、永久性標(biāo)記節(jié)點(diǎn)、未標(biāo)記節(jié)點(diǎn),直到終點(diǎn)與起點(diǎn)擴(kuò)展的永久性節(jié)點(diǎn)存在公共節(jié)點(diǎn)。隨著Dijkstra算法中節(jié)點(diǎn)集合無(wú)方向性四周擴(kuò)充,搜索范圍不斷增大,其算法運(yùn)行效率正比于節(jié)點(diǎn)數(shù)目的平方。為了縮小搜索范圍,改進(jìn)的Dijkstra算法有限制區(qū)域的距離最短路徑規(guī)劃算法。A*算法引入估值函數(shù),克服Dijkstra算法四周盲目性搜索的缺點(diǎn),該方法在選擇下一個(gè)被搜索的節(jié)點(diǎn)時(shí),對(duì)當(dāng)前節(jié)點(diǎn)距離終點(diǎn)的長(zhǎng)度進(jìn)行評(píng)估,選擇可能性大的節(jié)點(diǎn)進(jìn)行搜索,減少了路徑搜索節(jié)點(diǎn)。
Dijkstra算法和A*算法建立在“節(jié)點(diǎn)-弧段”模型上,每一條道路被節(jié)點(diǎn)分段為許多弧段,路網(wǎng)數(shù)據(jù)瑣碎,每一步搜索需要訪問(wèn)大量的節(jié)點(diǎn)與弧段信息,搜索空間大,計(jì)算量增多,算法運(yùn)行效率降低。其次,Dijkstra算法和A*算法在路徑規(guī)劃上精確度高,但是道路連續(xù)性差,拐角數(shù)目多,不符合人們對(duì)道路的感性認(rèn)識(shí)。如何結(jié)合道路網(wǎng)的特點(diǎn),找到一種符合感性認(rèn)識(shí)的路徑規(guī)劃算法是一個(gè)亟待解決的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對(duì)上述現(xiàn)有技術(shù)的不足,提出一種基于路鏈的路徑規(guī)劃方法,以縮小路徑搜索空間,減少路徑拐角數(shù)目,提高路徑連續(xù)性。
本發(fā)明的技術(shù)思路是依據(jù)“良好連續(xù)性”原則將瑣碎弧段連成路鏈結(jié)構(gòu),保持了道路的連續(xù)性;以路鏈為基本單位,采用雙向搜索路徑規(guī)劃算法,縮小了路徑搜索空間,減少了最優(yōu)路徑的拐角數(shù)目,其實(shí)現(xiàn)步驟包括如下:
1)從道路網(wǎng)中獲取節(jié)點(diǎn)-弧段信息,并利用節(jié)點(diǎn)—弧段信息提取路鏈信息;
2)利用路鏈信息和導(dǎo)航系統(tǒng)的輸入起點(diǎn)和終點(diǎn)位置,雙向搜索從起點(diǎn)到終點(diǎn)的可行路徑:
2a)確定起點(diǎn)、終點(diǎn)所在的路鏈,用所有起點(diǎn)、終點(diǎn)所在路鏈分別組成起點(diǎn)路鏈集合S0和終點(diǎn)路鏈集合E0;
2b)判斷起點(diǎn)路鏈集合S0與終點(diǎn)路鏈集合E0是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3),如果不存在公共路鏈,則執(zhí)行步驟2c);
2c)初始化路鏈集合等級(jí)n=1;
2d)獲得第n級(jí)起點(diǎn)路鏈集合Sn,即查詢路鏈集合S(n-1)中的每一條路鏈的鄰接路鏈,如果鄰接路鏈已經(jīng)被設(shè)置了父路鏈,則該鄰接路鏈不存放在第n級(jí)起點(diǎn)路鏈集合Sn中,如果鄰接路鏈沒(méi)有被設(shè)置父路鏈,則將當(dāng)前查詢的路鏈設(shè)置為其鄰接路鏈的父路鏈,新設(shè)置了父路鏈的鄰接路鏈存放在第n級(jí)起點(diǎn)路鏈集合Sn中;
2e)判斷第n級(jí)起點(diǎn)路鏈集合Sn與第n-1級(jí)終點(diǎn)路鏈集合E(n-1)是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3);如果不存在公共路鏈,執(zhí)行步驟2f);
2f)獲得第n級(jí)終點(diǎn)路鏈集合En,即查詢終點(diǎn)路鏈集合E(n-1)中的每一條路鏈的鄰接路鏈,如果鄰接路鏈已經(jīng)被設(shè)置了父路鏈,則該鄰接路鏈不存放在第n級(jí)終點(diǎn)路鏈集合En中,如果鄰接路鏈沒(méi)有被設(shè)置父路鏈,則將當(dāng)前查詢的路鏈設(shè)置為其鄰接路鏈的父路鏈,新設(shè)置了父路鏈的鄰接路鏈存放在第n級(jí)終點(diǎn)路鏈集合En中;
2g)判斷第n級(jí)起點(diǎn)路鏈集合Sn與第n級(jí)終點(diǎn)路鏈集合En是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3);如果不存在公共路鏈,n=n+1,返回步驟2d);
3)獲取最優(yōu)路徑:
3a)利用標(biāo)記的父路鏈,從公共路鏈開(kāi)始分別逆序從每一級(jí)起點(diǎn)路鏈集合和終點(diǎn)路鏈集合提取路鏈,獲得起點(diǎn)路鏈串集合和終點(diǎn)路鏈串集合,以公共路鏈為中間路鏈連接起點(diǎn)路鏈串集合與終點(diǎn)路鏈串集合,得到可行路徑;
3b)計(jì)算每一條可行路徑的權(quán)重,取權(quán)重最小的路徑為最優(yōu)路徑。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點(diǎn):
第一,本發(fā)明由于在路鏈的基礎(chǔ)上進(jìn)行路徑規(guī)劃,即以路鏈為基本單元向外擴(kuò)展,減小了搜索空間,縮短了計(jì)算時(shí)間,路徑規(guī)劃實(shí)現(xiàn)方便快速。
第二,本發(fā)明由于對(duì)道路網(wǎng)提取路鏈,降低了路網(wǎng)的瑣碎,保持了道路的整體性,使得可行路徑直線性強(qiáng),減少了拐彎點(diǎn),符合大眾選擇出行路線的心理需求。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施場(chǎng)景示意圖;
圖2為本發(fā)明的流程圖;
具體實(shí)施方式
下面結(jié)合圖1對(duì)本發(fā)明做進(jìn)一步的描述:
參照?qǐng)D1,本發(fā)明具體實(shí)施方式的場(chǎng)景示意圖中,圓點(diǎn)表示道路網(wǎng)中的節(jié)點(diǎn),分別用1-16編號(hào),黑色直線表示道路網(wǎng)中的弧段,分別用A1-M編號(hào),空心圓點(diǎn)11代表終點(diǎn),空心圓點(diǎn)4代表起點(diǎn)。
參照?qǐng)D2,本發(fā)明的實(shí)現(xiàn)步驟如下:
步驟1,獲取節(jié)點(diǎn)-弧段信息,并利用節(jié)點(diǎn)—弧段信息提取路鏈信息。
1.1)獲取道路網(wǎng)節(jié)點(diǎn)-弧段信息:
1.11)提取道路網(wǎng)中的點(diǎn)要素作為交匯點(diǎn),提取線要素作為邊;
1.12)按照邊-邊連通性策略、交匯點(diǎn)-邊連通性策略、高程字段使用規(guī)則建立邊與邊、邊與交匯點(diǎn)、交匯點(diǎn)與交匯點(diǎn)之間的連通關(guān)系;
1.13)利用上述建立的連通關(guān)系提取交匯點(diǎn)的編號(hào)、交匯點(diǎn)的坐標(biāo)、交匯點(diǎn)鄰接的交匯點(diǎn)、交匯點(diǎn)所在的邊,提取邊的編號(hào)、邊的關(guān)聯(lián)邊、邊的起始交匯點(diǎn)和邊的權(quán)重;將提取的這些全部?jī)?nèi)容統(tǒng)稱為節(jié)點(diǎn)-弧段信息;
1.2)利用節(jié)點(diǎn)-弧段信息提取路鏈信息:
1.21)選取未被提取成路鏈的弧段作為種子弧段,查找該弧段的關(guān)聯(lián)弧段;
1.22)如果選取的種子弧段存在關(guān)聯(lián)弧段,執(zhí)行步驟1.23);如果選取的種子弧段不存在關(guān)聯(lián)弧段,直接將該弧段提取成路鏈,執(zhí)行步驟1.28);
本實(shí)例是在圖1中任意選取弧段D1作為種子弧段,弧段D1存在關(guān)聯(lián)弧段,關(guān)聯(lián)弧段為弧段C、弧段D2、和弧段M,故執(zhí)行步驟1.23;
1.23)計(jì)算每一條關(guān)聯(lián)弧段與該弧段的夾角:
首先,獲取任意弧段起止節(jié)點(diǎn)的坐標(biāo)(x1,y1)和(x0,y0),假設(shè)該弧段存在以節(jié)點(diǎn)(x0,y0)為公共節(jié)點(diǎn)的關(guān)聯(lián)弧段,關(guān)聯(lián)弧段另一節(jié)點(diǎn)坐標(biāo)為(x2,y2);
其次,計(jì)算如下參數(shù):
任意弧段向量:A(x1-x0,y1-y0),任意弧段向量A的模:
關(guān)聯(lián)弧段向量:B(x2-x0,y2-y0),關(guān)連弧段向量B的模:
任意弧段向量A與關(guān)聯(lián)弧段向量B的乘積:A·B=(x1-x0)*(x2-x0)+(y1-y0)*(y2-y0);
任意弧段與關(guān)聯(lián)弧段弧段夾角a的余弦值:
然后,利用反余弦求解任意弧段與關(guān)聯(lián)弧段夾角a的值:
本實(shí)例獲取弧段節(jié)點(diǎn)的坐標(biāo)為:
弧段D1和關(guān)聯(lián)弧段D2的公共節(jié)點(diǎn)6坐標(biāo)為(5,2),弧段D1的終止節(jié)點(diǎn)5坐標(biāo)為(1,0),關(guān)聯(lián)弧段D2的終止節(jié)點(diǎn)7坐標(biāo)為(12,8);弧段D2和關(guān)聯(lián)弧段M的公共節(jié)點(diǎn)6坐標(biāo)為(5,2)關(guān)聯(lián)弧段M的終止節(jié)點(diǎn)16坐標(biāo)為(4,10);
本實(shí)例計(jì)算的參數(shù)如下:
弧段D1的弧段向量坐標(biāo)為(4,2);
弧段D1的模值:
關(guān)聯(lián)弧段D2的弧段向量坐標(biāo)為(7,6);
關(guān)聯(lián)弧段D2的模值:
關(guān)聯(lián)弧段M的弧段向量坐標(biāo)為(-1,8);
關(guān)聯(lián)弧段M的模值:
本實(shí)例計(jì)算弧段D1與關(guān)聯(lián)弧段D2的夾角值a和弧段D1與關(guān)聯(lián)弧段M的夾角值b如下:
1.24)如果存在夾角值大于120°的關(guān)聯(lián)弧段,取其中夾角值最接近180°的關(guān)聯(lián)弧段作為新的種子弧段,執(zhí)行步驟1.25);如果不存在夾角值大于120°的關(guān)聯(lián)弧段,直接將該弧段提取成路鏈,執(zhí)行步驟1.28);
本實(shí)例參照?qǐng)D1,獲得弧段D1與關(guān)聯(lián)弧段D2的夾角a大于120°,弧段D1與關(guān)聯(lián)弧段M的夾角b小于120°,故將關(guān)聯(lián)弧段D2作為新的種子弧段,執(zhí)行步驟1.25;
1.25)繼續(xù)查找新的種子弧段的關(guān)聯(lián)弧段,如果存在新的關(guān)聯(lián)弧段,執(zhí)行步驟1.26);如果不存在新的關(guān)聯(lián)弧段,執(zhí)行步驟1.27);
本實(shí)例參照?qǐng)D1,獲得新的種子弧段D2存在新的關(guān)聯(lián)弧段,新的關(guān)聯(lián)弧段為弧段M和弧段E2,故執(zhí)行步驟1.26;
1.26)依次計(jì)算新的弧段與新的種子弧段的夾角值,如果存在夾角值大于120°的新的關(guān)聯(lián)弧段,取夾角值最接近180°的新的關(guān)聯(lián)弧段繼續(xù)作為新的種子弧段,返回步驟1.25);如果不存在夾角值大于120°的新的關(guān)聯(lián)弧段,執(zhí)行步驟1.27);
1.27)連接滿足條件的關(guān)聯(lián)弧段,構(gòu)成一條完整路鏈,并記錄該路鏈的編號(hào)、路鏈經(jīng)過(guò)的節(jié)點(diǎn)、路鏈的鄰接路鏈、路鏈與路鏈交叉點(diǎn);
1.28)遍歷所有弧段,如果存在未被提取成路鏈的弧段,返回步驟1.21);如果弧段全部被提取成路鏈,則提取路鏈結(jié)束。
本實(shí)例參照?qǐng)D1,遍歷道路網(wǎng)所有弧段提取如下路鏈:
弧段A1、A2連接成路鏈A:(A1,A2),弧段D1、D2連接成路鏈D:(D1,D2),弧段E1、E2、E3連接成路鏈E:(E1,E2,E3),弧段I1、I2連接成路鏈I:(I1,I2),弧段J1、J2連接成路鏈J:(J1,J2),弧段K1、K2連接成路鏈K:(K1,K2),弧段B、弧段C、弧段G、弧段H、弧段L和弧段M分別單獨(dú)生成路鏈B、路鏈C、路鏈G、路鏈H、路鏈L、路鏈M。
步驟2,利用路鏈信息和導(dǎo)航系統(tǒng)的輸入起點(diǎn)和終點(diǎn)位置,雙向搜索從起點(diǎn)到終點(diǎn)的可行路徑。
2.1)確定起點(diǎn)、終點(diǎn)所在的路鏈,用所有起點(diǎn)、終點(diǎn)所在路鏈分別組成起點(diǎn)路鏈集合S0和終點(diǎn)路鏈集合E0;
本實(shí)例參照?qǐng)D1,其起點(diǎn)4屬于路鏈B和路鏈C,故起點(diǎn)路鏈集合S0={B,C};終點(diǎn)11屬于路鏈G和路鏈H,故終點(diǎn)路鏈集合E0={G,H};
2.2)判斷起點(diǎn)路鏈集合S0與終點(diǎn)路鏈集合E0是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3),如果不存在公共路鏈,則執(zhí)行步驟2.3);
公共路鏈?zhǔn)侵妇哂邢嗤锋溇幪?hào)的路鏈,且路鏈只有唯一的編號(hào)。
本實(shí)例參考圖1,其起點(diǎn)路鏈集合S0={B,C}和終點(diǎn)路鏈集合E0={G,H}中不存在公共路鏈,故執(zhí)行步驟2.3;
2.3)初始化路鏈集合等級(jí)n=1;
2.4)獲得第n級(jí)起點(diǎn)路鏈集合Sn,即查詢路鏈集合S(n-1)中的每一條路鏈的鄰接路鏈,如果鄰接路鏈已經(jīng)被設(shè)置了父路鏈,則該鄰接路鏈不存放在第n級(jí)起點(diǎn)路鏈集合Sn中,如果鄰接路鏈沒(méi)有被設(shè)置父路鏈,則將當(dāng)前查詢的路鏈設(shè)置為其鄰接路鏈的父路鏈,新設(shè)置了父路鏈的鄰接路鏈存放在第n級(jí)起點(diǎn)路鏈集合Sn中;
本實(shí)例參照?qǐng)D1,獲取第1級(jí)起點(diǎn)路鏈集合S1:其起點(diǎn)路鏈集合S0={B,C},其中路鏈B的鄰接路鏈為路鏈A,將路鏈B記為路鏈A的父路鏈,路鏈C的鄰接路鏈為路鏈D,將路鏈C記為路鏈D的父路鏈,第1級(jí)起點(diǎn)路鏈集合S1={A,D};
2.5)判斷第n級(jí)起點(diǎn)路鏈集合Sn與第n-1級(jí)終點(diǎn)路鏈集合E(n-1)是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3);如果不存在公共路鏈,執(zhí)行步驟2.6);
公共路鏈?zhǔn)侵妇哂邢嗤锋溇幪?hào)的路鏈,且路鏈只有唯一的編號(hào)。
本實(shí)例參照?qǐng)D1,其第1級(jí)起點(diǎn)路鏈集合S1={A,D}和終點(diǎn)路鏈集合E0={G,H}不存在公共路鏈,故執(zhí)行步驟2.6;
2.6)獲得第n級(jí)終點(diǎn)路鏈集合En,即查詢終點(diǎn)路鏈集合E(n-1)中的每一條路鏈的鄰接路鏈,如果鄰接路鏈已經(jīng)被設(shè)置了父路鏈,則該鄰接路鏈不存放在第n級(jí)終點(diǎn)路鏈集合En中,如果鄰接路鏈沒(méi)有被設(shè)置父路鏈,則將當(dāng)前查詢的路鏈設(shè)置為其鄰接路鏈的父路鏈,新設(shè)置了父路鏈的鄰接路鏈存放在第n級(jí)終點(diǎn)路鏈集合En中;
本實(shí)例參照?qǐng)D1,獲取第1級(jí)終點(diǎn)路鏈集合E1:其終點(diǎn)路鏈集合E0={G,H},其中路鏈G的鄰接路鏈為路鏈E,將路鏈G標(biāo)記為路鏈E的父路鏈,路鏈H的鄰接路鏈為路鏈I,將路鏈H記為路鏈I的父路鏈,第1級(jí)終點(diǎn)路鏈集合E1={E,I};
2.7)判斷第n級(jí)起點(diǎn)路鏈集合Sn與第n級(jí)終點(diǎn)路鏈集合En是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3);如果不存在公共路鏈,n=n+1;返回步驟2.4);
公共路鏈?zhǔn)侵妇哂邢嗤锋溇幪?hào)的路鏈,且路鏈只有唯一的編號(hào)。
本實(shí)例參照?qǐng)D1,其第1級(jí)終點(diǎn)路鏈集合E1={E,I}和第1級(jí)起點(diǎn)路鏈集合S1={A,D}不存在公共路鏈,故路鏈集合等級(jí)n=2,返回步驟2.4,獲得第2級(jí)起點(diǎn)路鏈集合S2;
本實(shí)例參照?qǐng)D1,其第1級(jí)起點(diǎn)路鏈集合S1={A,D},其中路鏈A的鄰接路鏈為路鏈L和路鏈I,將路鏈A標(biāo)記為路鏈L和路鏈I的父路鏈;路鏈D的鄰接路鏈為路鏈E和路鏈M,將路鏈D標(biāo)記為路鏈E和路鏈M的父路鏈,第2級(jí)起點(diǎn)路鏈集合S2={L,I,E,M};
判斷第2級(jí)起點(diǎn)路鏈集合S2與第1級(jí)終點(diǎn)路鏈集合E1是否存在公共路鏈,如果存在公共路鏈,則搜索從起點(diǎn)到終點(diǎn)的可行路徑結(jié)束,執(zhí)行步驟3);如果不存在公共路鏈,獲得第2級(jí)終點(diǎn)路鏈集合E2。
本實(shí)例參照?qǐng)D1,其第2級(jí)起點(diǎn)路鏈集合S2={L,I,E,M}和第1級(jí)終點(diǎn)路鏈集合E1={E,I}存在公共路鏈E和公共路鏈I,故執(zhí)行步驟3;
步驟3,獲取最優(yōu)路徑。
3.1)利用父路鏈標(biāo)記,獲得起點(diǎn)路鏈串集合:
3.1a)假設(shè)起點(diǎn)路鏈為路鏈C、終點(diǎn)路鏈為路鏈D,第n+2級(jí)起點(diǎn)路鏈集合和第m+2級(jí)終點(diǎn)路鏈集合存在公共路鏈S,創(chuàng)建起點(diǎn)路鏈串集合F,將公共路鏈S存放在起點(diǎn)路鏈串集合F;
本實(shí)例獲得的第2級(jí)起點(diǎn)路鏈集合S2={L,I,E,M}和第1級(jí)終點(diǎn)路鏈集合E1={E,I}存在公共路鏈E和公共路鏈I,故在創(chuàng)建公共路鏈I的路鏈串集合時(shí),將路鏈I存放在起點(diǎn)路鏈串集合F中,得到起點(diǎn)路鏈串集合F={I};
3.1b)查詢公共路鏈S在第n+1級(jí)起點(diǎn)路鏈集合中的父路鏈N0,將父路鏈N0存放在起點(diǎn)路鏈串集合F中;
本實(shí)例中的公共路鏈I在第1級(jí)起點(diǎn)路鏈集合S1中的父路鏈為路鏈A,將父路鏈A存放在起點(diǎn)路鏈串集合F中,得到起點(diǎn)路鏈串集合F={I,A};
3.1c)判斷父路鏈N0與起點(diǎn)路鏈C是否相同,如果父路鏈N0與起點(diǎn)路鏈C相同,則組建起點(diǎn)路鏈串集合F結(jié)束,如果父路鏈N0與起點(diǎn)路鏈C不相同,則父路鏈N0作為新的路鏈N0,執(zhí)行步驟3.1d);
本實(shí)例中的父路鏈A不是起點(diǎn)4所在的路鏈,故將父路鏈A作為新的路鏈A,執(zhí)行步驟3.1d);
3.1d)查詢新的路鏈N0在第n級(jí)起點(diǎn)路鏈集合中的父路鏈N1,將父路鏈N1存放在起點(diǎn)路鏈串集合F中;
本實(shí)例中,新的路鏈A在起點(diǎn)路鏈集合S0中的父路鏈為路鏈B,將父路鏈B存放在起點(diǎn)路鏈串集合F中,得到起點(diǎn)路鏈串集合F={I,A,B};
3.1e)判斷父路鏈N1與起點(diǎn)路鏈C是否相同,如果父路鏈N1與起點(diǎn)路鏈C相同,則組建起點(diǎn)路鏈串集合F結(jié)束,如果父路鏈N1與起點(diǎn)路鏈C不相同,則將父路鏈N1作為新的路鏈N0,執(zhí)行步驟3.1f);
本實(shí)例中,父路鏈B是起點(diǎn)4所在的路鏈,故起點(diǎn)路鏈串集合F組建完成。
3.1f)令n=n-1,返回步驟3.1d);
3.2)利用父路鏈標(biāo)記,獲得終點(diǎn)路鏈串集合:
3.2a)假設(shè)起點(diǎn)路鏈為路鏈C、終點(diǎn)路鏈為路鏈D,第n+2級(jí)起點(diǎn)路鏈集合和第m+2級(jí)終點(diǎn)路鏈集合存在公共路鏈S,創(chuàng)建終點(diǎn)路鏈串集合G,將公共路鏈S終點(diǎn)路鏈串集合G中;
本實(shí)例獲得的第2級(jí)起點(diǎn)路鏈集合S2={L,I,E,M}和第1級(jí)終點(diǎn)路鏈集合E1={E,I}存在公共路鏈E和公共路鏈I,故在創(chuàng)建公共路鏈I的終點(diǎn)路鏈串集合時(shí),將路鏈I存放在終點(diǎn)路鏈串集合G中,得到終點(diǎn)路鏈串集合G={I};
3.2b)查詢公共路鏈S在第m+1級(jí)終點(diǎn)路鏈集合中的父路鏈M0,將父路鏈M0存放在終點(diǎn)路鏈串集合G中;
本實(shí)例中的公共路鏈I在終點(diǎn)路鏈集合E0中的父路鏈為路鏈H,將父路鏈H存放在終點(diǎn)路鏈串集合G中,得到終點(diǎn)路鏈串集合G={I,H};
3.2c)判斷父路鏈M0與終點(diǎn)路鏈D是否相同,如果父路鏈M0與終點(diǎn)路鏈D相同,則組建終點(diǎn)路鏈串集合G結(jié)束;如果父路鏈M0與終點(diǎn)路鏈D不相同,則將父路鏈M0作為新的路鏈M0,執(zhí)行步驟3.2d);
本實(shí)例中,父路鏈H是終點(diǎn)11所在的路鏈,故終點(diǎn)路鏈串集合G組建完成。
3.2d)查詢新的路鏈M0在第m級(jí)終點(diǎn)路鏈集合中的父路鏈M1,將父路鏈M1存放在終點(diǎn)路鏈串集合G中;
3.2e)判斷父路鏈M1與終點(diǎn)路鏈D是否相同,如果父路鏈M1與終點(diǎn)路鏈D相同,則組建終點(diǎn)路鏈串集合G結(jié)束,如果父路鏈M1與終點(diǎn)路鏈D不相同,則將父路鏈M1作為新的路鏈M0,執(zhí)行步驟3.2f);
3.2f)令m=m-1,返回步驟3.2d);
3.3)以公共路鏈為中間路鏈連接起點(diǎn)路鏈串集合與終點(diǎn)路鏈串集合,得到可行路徑:
本實(shí)例中獲得起點(diǎn)路鏈串集合F={I,A,B},終點(diǎn)路鏈串集合G={I,H},以公共路鏈I連接起點(diǎn)路鏈串集合F和終點(diǎn)路鏈串集合G,得到可行路徑1由四條路鏈(B,A,I,H)組成;公共路鏈E用同樣的方法獲得起點(diǎn)路鏈串集合F={E、D、C}和終點(diǎn)路鏈串集合G={E、G},將兩個(gè)集合以公共路鏈E連接,得到可行路徑2由四條路鏈(C,D,E,G)組成。
3.4)計(jì)算每一條可行路徑的權(quán)重:
3.4a)假設(shè)可行路徑由四條路鏈(A,B,C,D)連接組成;
本實(shí)例獲得:可行路徑1由四條路鏈(B,A,I,H)組成,
可行路徑2由四條路鏈(C,D,E,G)組成;
3.4b)遍歷路鏈信息和節(jié)點(diǎn)-弧段信息,分別查找這四條路鏈(A,B,C,D)包含的弧段權(quán)重;
本實(shí)例獲得如下信息:
路鏈B由弧段B組成,弧段B的權(quán)重為10;
路鏈A由弧段A1和A2組成,弧段A1、弧段A2權(quán)重分別為5、15;
路鏈I由弧段I1和I2組成,弧段I1、弧段I2權(quán)重分別為10、10;
路鏈H由弧段H組成,弧段H的權(quán)重為8;
路鏈C由弧段C組成,弧段C的權(quán)重為6;
路鏈D由弧段D1和D2組成,弧段D1、弧段D2權(quán)重分別為5、10;
路鏈G由弧段G組成,弧段G的權(quán)重為7;
路鏈E由弧段E1、E2、E3組成,弧段E1、弧段E2、弧段E3權(quán)重分別為5、3、9;
3.4c)將每一條路鏈包含的弧段權(quán)重相加,分別獲得路鏈A的權(quán)重Wa、路鏈B的權(quán)重Wb、路鏈C的權(quán)重Wc、路鏈D的權(quán)重Wd;
本實(shí)例獲得如下信息:
路鏈A的權(quán)重Wa=20,路鏈B的權(quán)重Wb=10,路鏈I的權(quán)重Wi=20,路鏈H的權(quán)重Wh=8;
路鏈C的權(quán)重Wc=6,路鏈D的權(quán)重Wd=15,路鏈E的權(quán)重We=17,路鏈G的權(quán)重Wg=7;
3.4d)計(jì)算四條路鏈(A,B,C,D)的權(quán)重之和W=Wa+Wb+Wc+Wd,作為可行路徑的權(quán)重。
本實(shí)例中,可行路徑1的權(quán)重W1=20+10+20+8=58;
可行路徑2的權(quán)重W2=6+15+17+7=45;
3.5)比較可行路徑的權(quán)重,權(quán)重最小的路徑為最優(yōu)路徑。
本實(shí)例中,由于可行路徑1的權(quán)重W1>可行路徑2的權(quán)重W2,所以將可行路徑2作為從起點(diǎn)4到終點(diǎn)11的最優(yōu)路徑。
以上描述僅是本發(fā)明的一個(gè)具體實(shí)例,不構(gòu)成對(duì)本發(fā)明的任何限制,顯然對(duì)于本發(fā)明的專業(yè)人員來(lái)說(shuō),在了解了本發(fā)明內(nèi)容和原理后,都可能在不背離本發(fā)明原理、結(jié)構(gòu)的情況下,進(jìn)行形式和細(xì)節(jié)上的各種修正和改變,但是這些基于本發(fā)明思想的修正和改變?nèi)栽诒景l(fā)明的權(quán)利要求保護(hù)范圍之內(nèi)。