本發(fā)明主要涉及最短路獲取領(lǐng)域,特別地,涉及一種無序經(jīng)過必經(jīng)點的最短路徑獲取方法及獲取裝置。
背景技術(shù):
最短路徑問題是一類受普遍重視和研究的網(wǎng)絡(luò)優(yōu)化問題,廣泛應(yīng)用于計算機科學,交通工程,通信工程,運籌學,信息論,控制理論,軍事等眾多領(lǐng)域。它為研究更復雜的網(wǎng)絡(luò)流問題提供了基礎(chǔ),是解決其他許多復雜網(wǎng)絡(luò)優(yōu)化問題的子問題之一。
傳統(tǒng)的最短路徑問題是固定起點和終點的簡單模型。用于解決最短路徑問題的算法叫做最短路徑算法。最常用的最短路徑算法有:Dijkstra算法,A*算法,SPFA算法,Bellman-Ford算法和Floyd-Warshall算法。而在實際應(yīng)用中,經(jīng)常會對路徑加以限定條件,比如要求先經(jīng)過超市,然后經(jīng)過加油站,最后再到目的地。此外,軍事人員及物資的運輸中通常也要考慮必經(jīng)點,該必經(jīng)點可能是一些重要的城市、橋梁、加油站、彈藥庫、中轉(zhuǎn)站等;故必經(jīng)點的考慮也必將是未來智能交通誘導系統(tǒng)的發(fā)展趨勢。
但是在實際應(yīng)用需求中,會出現(xiàn)只是從起點開始,必須經(jīng)過所有的必經(jīng)點才到達終點的需求,但并未強調(diào)必經(jīng)點的順序。這種經(jīng)過必經(jīng)點的無序性使得問題變得更加復雜,如何獲取無序經(jīng)過必經(jīng)點的最短路徑,成為了本領(lǐng)域技術(shù)人員亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種無序經(jīng)過必經(jīng)點的最短路徑獲取方法,以解決現(xiàn)有技術(shù)中獲取最短路徑過程復雜的缺陷。
本發(fā)明無序經(jīng)過必經(jīng)點的最短路徑獲取方法,用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,其中K、N均是大于1的整數(shù),包括以下步驟:
步驟S1:計算只經(jīng)過非必經(jīng)點的起點到任意必經(jīng)點,任意必經(jīng)點到終點以及兩兩必經(jīng)點之間的最短路徑長度以及路徑;
步驟S2:初始化UN個種群個體,個體長度為K,填充為各個必經(jīng)點的序號,其中UN是大于N的整數(shù);
步驟S3:計算種群中每個個體的路徑以及路徑長度,依據(jù)路徑長度對種群進行排序并取N條最佳路徑;
步驟S4:從種群中取一定比例的個體,按照交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群;
步驟S5:在迭代次數(shù)達到預(yù)設(shè)次數(shù)時,輸出N個最優(yōu)解。
進一步地,所述步驟S1之前還包括以下步驟:
初始化網(wǎng)絡(luò)以去掉沒有入度或出度的中間點;
縮減網(wǎng)絡(luò)矩陣,減少矩陣維度,降低時間復雜度。
進一步地,所述步驟S1具體包括:
步驟S11:將要求取的路徑抽象為從節(jié)點a到節(jié)點b,其中a是起點或者必經(jīng)點,b是必經(jīng)點或者終點;
步驟S12:將除了a和b之外所有必經(jīng)點的出度清空;
步驟S13:使用最短路徑算法求取a到b的路徑及路徑長度。
進一步地,所述步驟S3中計算種群中每個個體的路徑及路徑長度具體包括:
步驟S31:設(shè)置經(jīng)過的非必經(jīng)點集合;
步驟S32:針對每個個體,生成隨機序列作為路徑搜索順序;
步驟S33:依據(jù)搜索順序,查詢當前點與下一必經(jīng)點之間的最短路徑,如果經(jīng)過的非必經(jīng)點都不在非必經(jīng)點集合內(nèi),則當前點即為此路徑中的非必經(jīng)點;
步驟S34:否則,將網(wǎng)絡(luò)中涉及到的非必經(jīng)點集合內(nèi)的非必經(jīng)點出度清空,獲得新的路徑中的非必經(jīng)點;
步驟S35:將各段路徑長度加起來即可得到當前個體路徑。
進一步地,所述步驟S4中采用三交叉啟發(fā)交叉,進行啟發(fā)式生成,以生成更優(yōu)的一代種群。
本發(fā)明還提供一種無序經(jīng)過必經(jīng)點的最短路徑獲取裝置,用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,其中K、N均是大于1的整數(shù),包括:
第一計算模塊,用于計算只經(jīng)過非必經(jīng)點的起點到任意必經(jīng)點,任意必經(jīng)點到終點以及兩兩必經(jīng)點之間的最短路徑長度以及路徑;
第一初始化模塊,用于初始化UN個種群個體,個體長度為K,填充為各個必經(jīng)點的序號,其中UN是大于N的整數(shù);
第二計算模塊,用于計算種群中每個個體的路徑以及路徑長度,依據(jù)路徑長度對種群進行排序并取N條最佳路徑;
種群生成模塊,用于從種群中取一定比例的個體,按照交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群;
輸出模塊,用于在迭代次數(shù)達到預(yù)設(shè)次數(shù)時,輸出N個最優(yōu)解。
進一步地,所述最短路徑獲取裝置還包括:
第二初始化模塊,用于初始化網(wǎng)絡(luò)以去掉沒有入度或出度的中間點,縮減網(wǎng)絡(luò)矩陣,減少矩陣維度,降低時間復雜度。
進一步地,所述第一計算模塊包括:
抽象單元,用于將要求取的路徑抽象為從節(jié)點a到節(jié)點b,其中a是起點或者必經(jīng)點,b是必經(jīng)點或者終點;
第一出度單元,用于將除了a和b之外所有必經(jīng)點的出度清空;
求取單元,用于使用最短路徑算法求取a到b的路徑及路徑長度。
進一步地,所述第二計算模塊包括:
設(shè)置單元,用于設(shè)置經(jīng)過的非必經(jīng)點集合;
序列生成單元,用于針對每個個體,生成隨機序列作為路徑搜索順序;
查詢單元,用于依據(jù)搜索順序,查詢當前點與下一必經(jīng)點之間的最短路徑,如果經(jīng)過的非必經(jīng)點都不在非必經(jīng)點集合內(nèi),則當前點即為此路徑中的非必經(jīng)點;
第二出度單元,用于將網(wǎng)絡(luò)中涉及到的非必經(jīng)點集合內(nèi)的非必經(jīng)點出度清空,獲得新的路徑中的非必經(jīng)點;
求和單元,用于將各段路徑長度加起來即可得到當前個體路徑。
進一步地,所述種群生成單元采用三交叉啟發(fā)交叉,進行啟發(fā)式生成,以生成更優(yōu)的一代種群。
本發(fā)明無序經(jīng)過必經(jīng)點的最短路徑獲取方法及裝置,用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,可以獲取若干條路徑,以便用戶選擇;此外,本發(fā)明由于采用交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群,能有效保證了新一代種群比上一代種群更優(yōu)的可能性;通過使用遺傳算法解決無序經(jīng)過必經(jīng)點的最短路徑算法,將NP問題簡化為逐步提高結(jié)果優(yōu)越性的過程,可以隨時停止并使用當前最優(yōu)解。進一步地,本發(fā)明初始化時計算了各個必經(jīng)點間的最短路徑,在后續(xù)運算中能避免大量的重復運算。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一實施例的無序經(jīng)過必經(jīng)點的最短路徑獲取方法的流程圖;
圖2是本發(fā)明一實施例的網(wǎng)絡(luò)矩陣原理圖;
圖3是本發(fā)明一實施例的無序經(jīng)過必經(jīng)點的最短路徑獲取裝置的原理框圖。
具體實施方式
下面對本發(fā)明的具體實施方式作進一步的詳細說明。對于所屬技術(shù)領(lǐng)域的技術(shù)人員而言,從對本發(fā)明的詳細說明中,本發(fā)明的上述和其他目的、特征和優(yōu)點將顯而易見。
圖1所示是本發(fā)明一實施例的無序經(jīng)過必經(jīng)點的最短路徑獲取方法的流程圖,該最短路徑獲取方法用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,其中K、N均是大于1的整數(shù),以便于在智能交通誘導系統(tǒng)等領(lǐng)域中使用。該實施例的最短路徑獲取方法至少包括步驟S1至步驟S5。
圖2所示是本發(fā)明一實施例的網(wǎng)絡(luò)矩陣原理圖,后文將結(jié)合該圖對本發(fā)明的最短路徑獲取方法進行說明。圖2是一個帶權(quán)有向圖,共有21個節(jié)點,起點為2,終點為19,必經(jīng)點包括3、5、7、11、13、17,其余為非必經(jīng)點。
圖1所示實施例的無序經(jīng)過必經(jīng)點的最短路徑獲取方法包括如下步驟:
步驟S1:計算只經(jīng)過非必經(jīng)點的起點到任意必經(jīng)點,任意必經(jīng)點到終點以及兩兩必經(jīng)點之間的最短路徑長度以及路徑;
由于限制了不能經(jīng)過其他必經(jīng)點,所以7→17的路徑就不可以從7→13→17,而是7→16→8→6→17,因為13是一個必經(jīng)點。
此外,在步驟S1中還可以計算起點S到終點T的最短路徑,用于快速判斷網(wǎng)絡(luò)是否無解。該起點S到終點T的最短路徑可使用最小堆優(yōu)化的Dijkstra算法。
所述步驟S1具體包括:
步驟S11:將要求取的路徑抽象為從節(jié)點a到節(jié)點b,其中a是起點或者必經(jīng)點,b是必經(jīng)點或者終點;
步驟S12:將除了a和b之外所有必經(jīng)點的出度清空;
步驟S13:使用最短路徑算法求取a到b的路徑及路徑長度。
另外,在步驟S1之前還可以包括初始化網(wǎng)絡(luò)的步驟,以去掉沒有入度或出度的中間點,縮減網(wǎng)絡(luò)矩陣,減少矩陣維度,降低時間復雜度。該步驟能簡化網(wǎng)絡(luò),壓縮網(wǎng)絡(luò)矩陣;由圖2中得出第20號節(jié)點沒有出度,也不是起點或者終點,可以去掉減小網(wǎng)絡(luò)規(guī)模。
步驟S2:初始化UN個種群個體,個體長度為K,填充為各個必經(jīng)點的序號,其中UN是大于N的整數(shù);
各個必經(jīng)點的序號其含義為從S到T經(jīng)過必經(jīng)點的次序,比如[3,5,7,11,17,13],意味著必然從2→非必經(jīng)點→3→非必經(jīng)點→……→13→非必經(jīng)點→19,生成UN個這樣子的序列;
步驟S3:計算種群中每個個體的路徑以及路徑長度,依據(jù)路徑長度對種群進行排序并取N條最佳路徑;
在該步驟S3中初始化N條最佳路徑,設(shè)置長度為最大值,序列為從第一個必經(jīng)點到最后一個必經(jīng)點,兩兩必經(jīng)點間路徑Li為空,其中i為大于等于0小于等于K的整數(shù),L0表示從S到第一個必經(jīng)點的路徑,Lc表示從個體序列第C-1個必經(jīng)點到第C個必經(jīng)點的路徑,其中C大于0小于K的整數(shù),LK為最后一個必經(jīng)點到T的路徑。
此外,該步驟S3還對結(jié)果進行排序,取前N個與已有N條最佳路徑比較并在合適位置插入。
以圖2路徑為例,其個體為[3,11,7,13,5,17],其中11→7的最短路為11→4→7,13→5的最短路為13→4→5,二者同時經(jīng)過節(jié)點4,若搜索順序13→5在11→7前面,依據(jù)貪心原理,可以找到圖中所示路徑。為保證不重復經(jīng)過節(jié)點,依據(jù)搜索順序不同,可以得到不同的路徑,將這些路徑及長度進行計算。
所述步驟S3中計算種群中每個個體的路徑及路徑長度具體包括:
步驟S31:設(shè)置經(jīng)過的非必經(jīng)點集合NP=?;
步驟S32:針對每個個體,生成隨機序列作為路徑搜索順序;
所述步驟S32針對每個個體,生成一個0-K的隨機序列R,作為部分路徑搜索的優(yōu)先順序,其中Ri=j,i,j都是0-K的整數(shù)。
步驟S33:依據(jù)搜索順序,查詢當前點與下一必經(jīng)點之間的最短路徑,如果經(jīng)過的非必經(jīng)點都不在非必經(jīng)點集合內(nèi),則當前點即為此路徑中的非必經(jīng)點;
所述步驟S33依據(jù)搜索順序,查詢Ri與下一個必經(jīng)點之間的Dijkstra最短路,若經(jīng)過的非必經(jīng)點都不在NP中,則LRi即為此路徑中的非必經(jīng)點;
步驟S34:否則,將網(wǎng)絡(luò)中涉及到的非必經(jīng)點集合NP內(nèi)非必經(jīng)點出度清空,獲得新的路徑中的非必經(jīng)點,進而避免新路徑經(jīng)過已經(jīng)經(jīng)過的點;
所述步驟S34將初始化的網(wǎng)絡(luò)去掉非必經(jīng)點集合NP中的非必經(jīng)點、起點、終點、未涉及到的必經(jīng)點的出度,執(zhí)行Dijkstra算法獲得新的路徑放入到LRi中;
步驟S35:將各段路徑長度加起來即可得到當前個體路徑。
步驟S4:從種群中取一定比例的個體,按照交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群;
該步驟S4中優(yōu)選采用三交叉啟發(fā)交叉,進行啟發(fā)式生成,以生成更優(yōu)的一代種群。
步驟S5:在迭代次數(shù)達到預(yù)設(shè)次數(shù)時,輸出N個最優(yōu)解。
如果迭代次數(shù)未達到預(yù)設(shè)次數(shù),則重復步驟S3和步驟S4。
本發(fā)明上述實施例無序經(jīng)過必經(jīng)點的最短路徑獲取方法,用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,可以獲取若干條路徑,以便用戶選擇;此外,由于采用交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群,能有效保證了新一代種群比上一代種群更優(yōu)的可能性;通過使用遺傳算法解決無序經(jīng)過必經(jīng)點的最短路徑算法,將NP問題簡化為逐步提高結(jié)果優(yōu)越性的過程,可以隨時停止并使用當前最優(yōu)解。進一步地,本發(fā)明該實施例初始化時計算了各個必經(jīng)點間的最短路徑,在后續(xù)運算中能避免大量的重復運算。
圖3所示是本發(fā)明一實施例的無序經(jīng)過必經(jīng)點的最短路徑獲取裝置的原理框圖,該最短路徑獲取裝置用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,其中K、N均是大于1的整數(shù),以便于在智能交通誘導系統(tǒng)等領(lǐng)域中使用。該實施例的最短路徑獲取裝置至少包括第一計算模塊100、第一初始化模塊200、第二計算模塊300、種群生成模塊400和輸出模塊500。
圖2所示是本發(fā)明一實施例的網(wǎng)絡(luò)矩陣原理圖,后文將結(jié)合該圖對本發(fā)明的最短路徑獲取裝置進行說明。圖2是一個帶權(quán)有向圖,共有21個節(jié)點,起點為2,終點為19,必經(jīng)點包括3、5、7、11、13、17,其余為非必經(jīng)點。
圖3所示實施例的無序經(jīng)過必經(jīng)點的最短路徑獲取裝置包括:
第一計算模塊100,用于計算只經(jīng)過非必經(jīng)點的起點到任意必經(jīng)點,任意必經(jīng)點到終點以及兩兩必經(jīng)點之間的最短路徑長度以及路徑;
由于限制了不能經(jīng)過其他必經(jīng)點,所以7→17的路徑就不可以從7→13→17,而是7→16→8→6→17,因為13是一個必經(jīng)點。
此外,第一計算模塊100還可以用于計算起點S到終點T的最短路徑,用于快速判斷網(wǎng)絡(luò)是否無解。該起點S到終點T的最短路徑可使用最小堆優(yōu)化的Dijkstra算法。
所述第一計算模塊100具體包括:
抽象單元101,用于將要求取的路徑抽象為從節(jié)點a到節(jié)點b,其中a是起點或者必經(jīng)點,b是必經(jīng)點或者終點;
第一出度單元102,用于將除了a和b之外所有必經(jīng)點的出度清空;
求取單元103,用于使用最短路徑算法求取a到b的路徑及路徑長度。
前述第一初始化模塊200,用于初始化UN個種群個體,個體長度為K,填充為各個必經(jīng)點的序號,其中UN是大于N的整數(shù);
各個必經(jīng)點的序號其含義為從S到T經(jīng)過必經(jīng)點的次序,比如[3,5,7,11,17,13],意味著必然從2→非必經(jīng)點→3→非必經(jīng)點→……→13→非必經(jīng)點→19,生成UN個這樣子的序列;
另外,該實施例的最短路徑獲取裝置還包括第二初始化模塊,用于初始化網(wǎng)絡(luò)以去掉沒有入度或出度的中間點,縮減網(wǎng)絡(luò)矩陣,減少矩陣維度,降低時間復雜度。該模塊能簡化網(wǎng)絡(luò),壓縮網(wǎng)絡(luò)矩陣;由圖2中得出第20號節(jié)點沒有出度,也不是起點或者終點,可以去掉減小網(wǎng)絡(luò)規(guī)模。
前述第二計算模塊300,用于計算種群中每個個體的路徑以及路徑長度,依據(jù)路徑長度對種群進行排序并取N條最佳路徑;
在該第二計算模塊300中初始化N條最佳路徑,設(shè)置長度為最大值,序列為從第一個必經(jīng)點到最后一個必經(jīng)點,兩兩必經(jīng)點間路徑Li為空,其中i為大于等于0小于等于K的整數(shù),L0表示從S到第一個必經(jīng)點的路徑,Lc表示從個體序列第C-1個必經(jīng)點到第C個必經(jīng)點的路徑,其中C大于0小于K的整數(shù),LK為最后一個必經(jīng)點到T的路徑。
此外,該第二計算模塊300還對結(jié)果進行排序,取前N個與已有N條最佳路徑比較并在合適位置插入。
以圖2路徑為例,其個體為[3,11,7,13,5,17],其中11→7的最短路為11→4→7,13→5的最短路為13→4→5,二者同時經(jīng)過節(jié)點4,若搜索順序13→5在11→7前面,依據(jù)貪心原理,可以找到圖中所示路徑。為保證不重復經(jīng)過節(jié)點,依據(jù)搜索順序不同,可以得到不同的路徑,將這些路徑及長度進行計算。
所述第二計算模塊300具體包括:
設(shè)置單元301,用于設(shè)置經(jīng)過的非必經(jīng)點集合NP=?;
序列生成單元302,用于針對每個個體,生成隨機序列作為路徑搜索順序;
所述序列生成單元302用于針對每個個體,生成一個0-K的隨機序列R,作為部分路徑搜索的優(yōu)先順序,其中Ri=j,i,j都是0-K的整數(shù)。
查詢單元303,用于依據(jù)搜索順序,查詢當前點與下一必經(jīng)點之間的最短路徑,如果經(jīng)過的非必經(jīng)點都不在非必經(jīng)點集合內(nèi),則當前點即為此路徑中的非必經(jīng)點;
所述查詢單元303用于依據(jù)搜索順序,查詢Ri與下一個必經(jīng)點之間的Dijkstra最短路,若經(jīng)過的非必經(jīng)點都不在NP中,則LRi即為此路徑中的非必經(jīng)點;
第二出度單元304,用于將網(wǎng)絡(luò)中涉及到的非必經(jīng)點集合內(nèi)的非必經(jīng)點出度清空,獲得新的路徑中的非必經(jīng)點,進而避免新路徑經(jīng)過已經(jīng)經(jīng)過的點;
所述第二出度單元304用于將初始化的網(wǎng)絡(luò)去掉非必經(jīng)點集合NP中的非必經(jīng)點、起點、終點、未涉及到的必經(jīng)點的出度,執(zhí)行Dijkstra算法獲得新的路徑放入到LRi中;
求和單元305,用于將各段路徑長度加起來即可得到當前個體路徑。
前述種群生成模塊400用于從種群中取一定比例的個體,按照交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群;
該種群生成模塊400優(yōu)選采用三交叉啟發(fā)交叉,進行啟發(fā)式生成,以生成更優(yōu)的一代種群。
前述輸出模塊500用于在迭代次數(shù)達到預(yù)設(shè)次數(shù)時,輸出N個最優(yōu)解。
如果迭代次數(shù)未達到預(yù)設(shè)次數(shù),則重復觸發(fā)第二計算模塊300和種群生成模塊400。
本發(fā)明上述實施例無序經(jīng)過必經(jīng)點的最短路徑獲取裝置,用于獲取經(jīng)過K個必經(jīng)點的N條最短路徑,可以獲取若干條路徑,以便用戶選擇;此外,由于采用交叉變異規(guī)則進行生成,產(chǎn)生新一代可行解作為新的種群,能有效保證了新一代種群比上一代種群更優(yōu)的可能性;通過使用遺傳算法解決無序經(jīng)過必經(jīng)點的最短路徑算法,將NP問題簡化為逐步提高結(jié)果優(yōu)越性的過程,可以隨時停止并使用當前最優(yōu)解。進一步地,本發(fā)明該實施例初始化時計算了各個必經(jīng)點間的最短路徑,在后續(xù)運算中能避免大量的重復運算。
還應(yīng)當理解,本發(fā)明雖然已通過以上實施例進行了清楚說明,然而在不背離本發(fā)明精神及其實質(zhì)的情況下,所屬技術(shù)領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明作出各種變化和修正,均屬于本發(fā)明的權(quán)利要求的保護范圍。