亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于迪杰斯特拉和最大最小蟻群的無環(huán)最短路徑搜索方法與流程

文檔序號:12126321閱讀:729來源:國知局
基于迪杰斯特拉和最大最小蟻群的無環(huán)最短路徑搜索方法與流程
本發(fā)明屬于通信
技術(shù)領(lǐng)域
,更進(jìn)一步涉及一種無環(huán)最短路徑搜索方法,可用于網(wǎng)絡(luò)路由系統(tǒng)中路徑選擇、交通運(yùn)輸中線路規(guī)劃場景。
背景技術(shù)
:最短路徑問題是在給定的網(wǎng)圖中,求源節(jié)點(diǎn)到目的節(jié)點(diǎn)之間經(jīng)過的路徑權(quán)值之和最小的路徑。經(jīng)典的最短路徑方法有迪杰斯特拉方法和弗洛伊德方法,但這兩種方法最初的提出均不能適用于經(jīng)過指定的必經(jīng)節(jié)點(diǎn)。目前解決經(jīng)過指定必經(jīng)節(jié)點(diǎn)的最短路徑方法主要有深度優(yōu)先遍歷法、迪杰斯特拉方法、遺傳方法、傳統(tǒng)蟻群方法。深度優(yōu)先遍歷是找出所有滿足條件的路徑,對比得到最短的路徑,雖然得到的最短路徑是最優(yōu)的結(jié)果,但時(shí)間復(fù)雜度高,對于復(fù)雜圖,通常不能在有效時(shí)間內(nèi)得到解;迪杰斯特拉方法按權(quán)值遞增的次序來產(chǎn)生源點(diǎn)到其余必經(jīng)節(jié)點(diǎn)的最短路徑,同樣面臨時(shí)間復(fù)雜度高的問題;遺傳方法和傳統(tǒng)蟻群方法屬于啟發(fā)式的智能方法,都有一定的隨機(jī)性,且在必經(jīng)節(jié)點(diǎn)個(gè)數(shù)大于15、總節(jié)點(diǎn)個(gè)數(shù)超過300的圖規(guī)模大、結(jié)構(gòu)復(fù)雜的場景中通常得到的解的權(quán)值不夠小。南京富島信息工程有限公司在其申請的專利“一種原油罐區(qū)調(diào)度方法”(申請?zhí)?CN201410240939.5,公開號CN104008431A)公開了一種獲取經(jīng)過n個(gè)必經(jīng)頂點(diǎn)的最短路徑的方法。該方法的主要實(shí)現(xiàn)方式是,必經(jīng)節(jié)點(diǎn)之間的順序采用全排列的方法,生成n!個(gè)組合,對于每一種組合在首尾分別加入源節(jié)點(diǎn)和目的節(jié)點(diǎn),然后求解相鄰頂點(diǎn)之間的局部最優(yōu)路徑,將相鄰節(jié)點(diǎn)之間的局部最優(yōu)路徑組合得到n!條完整路徑,再從這些完整路徑中選出最短的一條路徑作為最優(yōu)解。該方法的不足之處是:首先全排列組合非常耗時(shí),導(dǎo)致求解速度慢,其次當(dāng)使用n!個(gè)組合得到n!條路徑時(shí),可能會產(chǎn)生環(huán)路。武漢烽火技術(shù)服務(wù)有限公司在其申請的專利“一種帶約束條件的拓?fù)鋱D最優(yōu)路徑方法”(申請?zhí)枺?01510589652.8,公開號105141524A)公開了一種帶約束條件的拓?fù)鋱D最優(yōu)路徑方法。該方法主要是根據(jù)給定的必經(jīng)節(jié)點(diǎn)順序,建立必經(jīng)節(jié)點(diǎn)拓?fù)淞斜恚?shí)時(shí)更新避開節(jié)點(diǎn)拓?fù)淞斜?,直到找到目的?jié)點(diǎn)。該方法的不足之處是只給定一個(gè)必經(jīng)節(jié)點(diǎn)序列,找到解的可能性較小且找到的解的權(quán)值通常較大。黃書力,胡大裟,蔣玉明提出的“經(jīng)過指定的中間節(jié)點(diǎn)集的最短路徑方法”(《計(jì)算機(jī)工程與應(yīng)用》2015)通過迪杰斯特拉算法計(jì)算源節(jié)點(diǎn)到第一個(gè)必經(jīng)節(jié)點(diǎn)、第一個(gè)必經(jīng)節(jié)點(diǎn)依次經(jīng)過其它必經(jīng)節(jié)點(diǎn)到達(dá)最后一個(gè)必經(jīng)節(jié)點(diǎn)、最后一個(gè)必經(jīng)節(jié)點(diǎn)到目的節(jié)點(diǎn)的最短路徑,通過全排列得到必經(jīng)節(jié)點(diǎn)組合順序后,按照分段求最短路徑方法,得到最短路徑。該方法缺點(diǎn)是全排列方法時(shí)間復(fù)雜度高,對于必經(jīng)節(jié)點(diǎn)較多的復(fù)雜網(wǎng)圖在有效時(shí)間內(nèi)很難找到解。WuW,RuanQ在其發(fā)表的論文中“Ahierarchicalapproachfortheshortestpathproblemwithobligatoryintermediatenodes”(《SignalProcessing》2006)提出采用遺傳方法求解經(jīng)過必經(jīng)節(jié)點(diǎn)集的最短路徑,適用于求解必經(jīng)節(jié)點(diǎn)個(gè)數(shù)少于20的網(wǎng)絡(luò)圖,但有可能經(jīng)過重復(fù)節(jié)點(diǎn),構(gòu)成有環(huán)路徑。徐慶征,柯熙政在其發(fā)表的論文中“必經(jīng)點(diǎn)最短路徑問題模型及相應(yīng)遺傳方法研究”(《系統(tǒng)工程與電子技術(shù)》2009)提出生成無環(huán)最短路徑的遺傳方法,通過構(gòu)造獨(dú)特的適應(yīng)度函數(shù),使包含較多必經(jīng)點(diǎn)的染色體能夠優(yōu)先被選擇進(jìn)入下一代,但對于節(jié)點(diǎn)個(gè)數(shù)多的網(wǎng)絡(luò)圖難以得到解。綜上,現(xiàn)有方法對于求解節(jié)點(diǎn)個(gè)數(shù)較多的大型復(fù)雜圖,時(shí)間復(fù)雜度高,在有效時(shí)間內(nèi)得到的路徑權(quán)值大,不適用于現(xiàn)實(shí)情況。技術(shù)實(shí)現(xiàn)要素:本發(fā)明針對上述現(xiàn)有技術(shù)存在的不足,提出一種基于迪杰斯特拉和最大最小蟻群的無環(huán)最短路徑搜索方法,以降低時(shí)間復(fù)雜度,改善路徑權(quán)值。本發(fā)明實(shí)現(xiàn)的技術(shù)方案是:通過將源節(jié)點(diǎn)作為搜索起點(diǎn),對原始圖進(jìn)行深度搜索遍歷和圖篩選,剔除無用點(diǎn)和無用邊;通過使用迪杰斯特拉方法計(jì)算出圖中源節(jié)點(diǎn)、必經(jīng)節(jié)點(diǎn)集、目的節(jié)點(diǎn)中兩兩節(jié)點(diǎn)之間的最短距離,將包含輔助節(jié)點(diǎn)的復(fù)雜圖轉(zhuǎn)化為不包含輔助節(jié)點(diǎn)的簡單圖;通過最大最小蟻群方法找到簡單圖的似優(yōu)路徑,再通過迪杰斯特拉方法,將簡單圖的似優(yōu)路徑展開為原始圖的無環(huán)似優(yōu)路徑,并從原始圖的無環(huán)似優(yōu)路徑集合中選擇權(quán)值最小的一條路徑作為最優(yōu)路徑輸出。其實(shí)現(xiàn)步驟包括如下:(1)構(gòu)造有權(quán)有向圖:以G(V,E)為原始圖,構(gòu)造滿足源節(jié)點(diǎn)s、目的節(jié)點(diǎn)t、必經(jīng)節(jié)點(diǎn)集V'和輔助節(jié)點(diǎn)集X相互關(guān)系的有權(quán)有向圖G,其中,V為節(jié)點(diǎn)集合,E為有權(quán)邊集合;(2)初始化:建立一個(gè)似優(yōu)路徑集合W,并初始化為空,根據(jù)有權(quán)有向圖G的結(jié)構(gòu)建立p節(jié)點(diǎn)的出度集合Op和入度集合Ip,其中p∈V;(3)對有權(quán)有向圖G進(jìn)行剪枝,得到剪枝后的有權(quán)有向圖G1:(3.1)通過深度優(yōu)先遍歷方法搜索有權(quán)有向圖G,刪除有權(quán)有向圖G中不能到達(dá)的節(jié)點(diǎn);(3.2)判斷節(jié)點(diǎn)集合V中節(jié)點(diǎn)p的出度集合Op是否為空,若為空,則刪除節(jié)點(diǎn)p及與p相關(guān)的有向邊,其中p≠s且p≠t;(3.3)將必經(jīng)節(jié)點(diǎn)集V'和輔助節(jié)點(diǎn)集X中所有節(jié)點(diǎn)的訪問標(biāo)志位初始化為0,設(shè)訪問標(biāo)志位為0表示未被訪問,訪問標(biāo)志位為1表示已被訪問;(3.4)取必經(jīng)節(jié)點(diǎn)集V'中一個(gè)未被訪問的節(jié)點(diǎn)p,將其訪問標(biāo)志位置為1,判斷節(jié)點(diǎn)p的入度集合Ip大小是否為1:若為1,則只保留前驅(qū)節(jié)點(diǎn)到p的有向邊,刪除該前驅(qū)節(jié)點(diǎn)的其它出度邊,執(zhí)行(3.5),否則,直接執(zhí)行(3.5);(3.5)判斷節(jié)點(diǎn)p的出度集合Op大小是否為1,若為1,則只保留p到后繼節(jié)點(diǎn)的有向邊,刪除該后繼節(jié)點(diǎn)的其它入度邊,執(zhí)行(3.6),否則,直接執(zhí)行(3.6);(3.6)判斷所有必經(jīng)節(jié)點(diǎn)的訪問標(biāo)志位是否都為1,若都為1,則執(zhí)行(3.7),否則,返回(3.4);(3.7)取輔助節(jié)點(diǎn)集X中一個(gè)未被訪問的節(jié)點(diǎn)p1,將其訪問標(biāo)志位置為1,判斷節(jié)點(diǎn)p1的入度集合Ip1大小是否為1:若為1,則只保留前驅(qū)節(jié)點(diǎn)到p1的有向邊,刪除p1到其前驅(qū)節(jié)點(diǎn)的有向邊,執(zhí)行(3.8),否則,直接執(zhí)行(3.8);(3.8)判斷節(jié)點(diǎn)p1的出度集合Op1大小是否為1,若為1,則只保留p1到后繼節(jié)點(diǎn)的有向邊,刪除后繼節(jié)點(diǎn)到p1的有向邊,執(zhí)行(3.9),否則,直接執(zhí)行(3.9);(3.9)判斷所有輔助節(jié)點(diǎn)的訪問標(biāo)志位是否都為1,若都為1,得到剪枝后的有權(quán)有向圖G1,執(zhí)行(4),否則,返回(3.7)。(4)通過迪杰斯特拉方法將剪枝后的有權(quán)有向圖G1簡化為只包含源節(jié)點(diǎn)s、目的節(jié)點(diǎn)t、必經(jīng)節(jié)點(diǎn)集V'相互關(guān)系的有權(quán)有向圖G2;(5)在簡化的有權(quán)有向圖G2中使用結(jié)合迪杰斯特拉的最大最小蟻群方法得到最優(yōu)路徑:(5.1)初始化參數(shù):螞蟻個(gè)數(shù)為m,設(shè)置最大迭代次數(shù)F,置全局最優(yōu)解的初始權(quán)值為無窮大,已迭代次數(shù)為0;(5.2)構(gòu)造用于存放螞蟻通過的節(jié)點(diǎn)和路徑的禁忌表Tabuk,k=1,2,…,m,并初始化為空;(5.3)將全部螞蟻放置在源節(jié)點(diǎn)s上,將源節(jié)點(diǎn)s和目的節(jié)點(diǎn)t添加到禁忌表Tabuk,k=1,2,…,m,置本次迭代最優(yōu)解的初始權(quán)值為無窮大;(5.4)取一只螞蟻k,計(jì)算其路徑Pk;(5.5)計(jì)算當(dāng)前螞蟻k所走路徑Pk的權(quán)值,清空該螞蟻對應(yīng)的禁忌表Tabuk;(5.6)判斷全部螞蟻是否完成尋路,若是,執(zhí)行(5.7);否則,返回(5.4);(5.7)對所有螞蟻的路徑P1,P2,…Pk,…,Pm按照權(quán)值從小到大排序,并按照排序依次選取螞蟻k的路徑Pk,判斷其路徑Pk的權(quán)值是否小于本次迭代最優(yōu)解,若是,則將G2中每個(gè)節(jié)點(diǎn)的訪問標(biāo)志位置為0,執(zhí)行(5.8),否則,跳轉(zhuǎn)到(5.12);(5.8)使用正向迪杰斯特拉方法將當(dāng)前螞蟻k得到的路徑Pk恢復(fù)為正向?qū)嶋H路徑P′k,判斷正向?qū)嶋H路徑P′k的權(quán)值是否小于本次迭代最優(yōu)解,若是,則更新本次迭代最優(yōu)解,執(zhí)行(5.9),否則,執(zhí)行(5.10);(5.9)判斷正向?qū)嶋H路徑P′k的權(quán)值是否小于全局最優(yōu)解,若是,則更新全局最優(yōu)解,并將似優(yōu)路徑集合W中的路徑替換為正向?qū)嶋H路徑P′k,執(zhí)行(5.10),否則,直接執(zhí)行(5.10);(5.10)將所有節(jié)點(diǎn)訪問標(biāo)志位重新置0,使用反向迪杰斯特拉方法將路徑Pk恢復(fù)為反向?qū)嶋H路徑P″k,判斷反向?qū)嶋H路徑P″k的權(quán)值是否小于本次迭代最優(yōu)解,若是,則更新本次迭代最優(yōu)解,執(zhí)行(5.11),否則,執(zhí)行(5.12);(5.11)判斷反向?qū)嶋H路徑P″k的權(quán)值是否小于全局最優(yōu)解,若是,則更新全局最優(yōu)解,并將似優(yōu)路徑集合W中的路徑替換為反向?qū)嶋H路徑P″k,執(zhí)行(5.12),否則,直接執(zhí)行(5.12);(5.12)計(jì)算最大最小信息素,并更新路徑信息素;(5.13)迭代次數(shù)加1,判斷是否達(dá)到預(yù)定的迭代次數(shù)F,若是,則將似優(yōu)路徑集合W中保存的路徑作為最優(yōu)路徑輸出,否則,返回(5.3)。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):第一:本發(fā)明采用剪枝和簡化,將原本復(fù)雜的大型圖轉(zhuǎn)變?yōu)橹话垂?jié)點(diǎn)、必經(jīng)節(jié)點(diǎn)、目的節(jié)點(diǎn)的簡單圖,使圖的規(guī)模大大縮小,克服了現(xiàn)有技術(shù)中在處理復(fù)雜圖時(shí)其時(shí)間復(fù)雜度高的缺點(diǎn)。第二:本發(fā)明采用了最大最小蟻群這種啟發(fā)式方法,在求解過程中使用迪杰斯特拉方法進(jìn)行正反向?qū)嶋H路徑恢復(fù),在有效時(shí)間內(nèi),能夠得到比傳統(tǒng)蟻群算法和遺傳算法更優(yōu)的解。附圖說明圖1為本發(fā)明的實(shí)現(xiàn)總流程圖。圖2為本發(fā)明中獲取最優(yōu)路徑的子流程圖。圖3為用本發(fā)明對5個(gè)測試實(shí)例求解30次得到的路徑權(quán)值折線圖。圖4為用本發(fā)明對示例拓?fù)溥M(jìn)行簡化的前后對比圖。具體實(shí)施方式下面結(jié)合附圖對本發(fā)明做進(jìn)一步的詳細(xì)描述。參照附圖1,對本發(fā)明的實(shí)現(xiàn)步驟做進(jìn)一步的詳細(xì)描述。步驟1,構(gòu)造有權(quán)有向圖:以G(V,E)為原始圖,構(gòu)造滿足源節(jié)點(diǎn)s、目的節(jié)點(diǎn)t、必經(jīng)節(jié)點(diǎn)集V'和輔助節(jié)點(diǎn)集X相互關(guān)系的有權(quán)有向圖G,其中V為節(jié)點(diǎn)集合,E為有權(quán)邊集合。步驟2,初始化:建立一個(gè)似優(yōu)路徑集合W,并初始化為空,根據(jù)有權(quán)有向圖G的結(jié)構(gòu)建立p節(jié)點(diǎn)的出度集合Op和入度集合Ip,其中p∈V。步驟3,對有權(quán)有向圖G進(jìn)行剪枝,得到剪枝后的有權(quán)有向圖G1。(3.1)通過深度優(yōu)先遍歷方法搜索有權(quán)有向圖G,刪除有權(quán)有向圖G中不能到達(dá)的節(jié)點(diǎn);(3.2)判斷節(jié)點(diǎn)集合V中節(jié)點(diǎn)p的出度集合Op是否為空,若為空,則刪除節(jié)點(diǎn)p及與p相關(guān)的有向邊,其中p≠s且p≠t;(3.3)將必經(jīng)節(jié)點(diǎn)集V'和輔助節(jié)點(diǎn)集X中所有節(jié)點(diǎn)的訪問標(biāo)志位初始化為0,設(shè)訪問標(biāo)志位為0表示未被訪問,訪問標(biāo)志位為1表示已被訪問;(3.4)取必經(jīng)節(jié)點(diǎn)集V'中一個(gè)未被訪問的節(jié)點(diǎn)p,將其訪問標(biāo)志位置為1,判斷節(jié)點(diǎn)p的入度集合Ip大小是否為1:若為1,則只保留前驅(qū)節(jié)點(diǎn)到p的有向邊,刪除該前驅(qū)節(jié)點(diǎn)的其它出度邊,執(zhí)行(3.5),否則,直接執(zhí)行(3.5);(3.5)判斷節(jié)點(diǎn)p的出度集合Op大小是否為1,若為1,則只保留p到后繼節(jié)點(diǎn)的有向邊,刪除該后繼節(jié)點(diǎn)的其它入度邊,執(zhí)行(3.6),否則,直接執(zhí)行(3.6);(3.6)判斷所有必經(jīng)節(jié)點(diǎn)的訪問標(biāo)志位是否都為1,若都為1,則執(zhí)行(3.7),否則,返回(3.4);(3.7)取輔助節(jié)點(diǎn)集X中一個(gè)未被訪問的節(jié)點(diǎn)p1,將其訪問標(biāo)志位置為1,判斷節(jié)點(diǎn)p1的入度集合Ip1大小是否為1:若為1,則只保留前驅(qū)節(jié)點(diǎn)到p1的有向邊,刪除p1到其前驅(qū)節(jié)點(diǎn)的有向邊,執(zhí)行(3.8),否則,直接執(zhí)行(3.8);(3.8)判斷節(jié)點(diǎn)p1的出度集合Op1大小是否為1,若為1,則只保留p1到后繼節(jié)點(diǎn)的有向邊,刪除后繼節(jié)點(diǎn)到p1的有向邊,執(zhí)行(3.9),否則,直接執(zhí)行(3.9);(3.9)判斷所有輔助節(jié)點(diǎn)的訪問標(biāo)志位是否都為1,若都為1,得到剪枝后的有權(quán)有向圖G1,執(zhí)行(4),否則,返回(3.7)。步驟4,通過迪杰斯特拉方法將剪枝后的有權(quán)有向圖G1簡化為只包含源節(jié)點(diǎn)s、目的節(jié)點(diǎn)t、必經(jīng)節(jié)點(diǎn)集V'相互關(guān)系的有權(quán)有向圖G2。(4.1)定義源節(jié)點(diǎn)權(quán)值矩陣U,用于保存源節(jié)點(diǎn)s到每個(gè)必經(jīng)節(jié)點(diǎn)之間的路徑權(quán)值,若從源節(jié)點(diǎn)s到一個(gè)必經(jīng)節(jié)點(diǎn)不存在路徑,或者必須經(jīng)過其他必經(jīng)節(jié)點(diǎn)才能到達(dá)該必經(jīng)節(jié)點(diǎn),則保存該路徑權(quán)值為無窮大,若源節(jié)點(diǎn)s到一個(gè)必經(jīng)節(jié)點(diǎn)之間有多條路徑存在時(shí),則保存最短的那條路徑權(quán)值;(4.2)定義必經(jīng)節(jié)點(diǎn)權(quán)值矩陣E,用于保存兩兩必經(jīng)節(jié)點(diǎn)之間的路徑權(quán)值;(4.3)定義目的節(jié)點(diǎn)權(quán)值矩陣D,用于保存每個(gè)必經(jīng)節(jié)點(diǎn)到目的節(jié)點(diǎn)的路徑權(quán)值;(4.4)根據(jù)源節(jié)點(diǎn)權(quán)值矩陣U、必經(jīng)節(jié)點(diǎn)權(quán)值矩陣E、目的節(jié)點(diǎn)權(quán)值矩陣D得到只包含源節(jié)點(diǎn)s、目的節(jié)點(diǎn)t和必經(jīng)節(jié)點(diǎn)集V'相互關(guān)系的簡化有權(quán)有向圖G2。步驟5,在簡化的有權(quán)有向圖G2中使用結(jié)合迪杰斯特拉的最大最小蟻群方法得到最優(yōu)路徑。參照圖2,本步驟的具體實(shí)現(xiàn)如下:(5.1)初始化參數(shù):螞蟻個(gè)數(shù)為m,設(shè)置最大迭代次數(shù)F,置全局最優(yōu)解的初始權(quán)值為無窮大,已迭代次數(shù)為0;(5.2)構(gòu)造用于存放螞蟻通過的節(jié)點(diǎn)和路徑的禁忌表Tabuk,k=1,2,…,m,并初始化為空;(5.3)將全部螞蟻放置在源節(jié)點(diǎn)s上,將源節(jié)點(diǎn)s和目的節(jié)點(diǎn)t添加到禁忌表Tabuk,k=1,2,…,m,置本次迭代最優(yōu)解的初始權(quán)值為無窮大;(5.4)取第k只螞蟻,計(jì)算其路徑Pk:(5.4a)初始化第k只螞蟻的路徑集合Pk為空,計(jì)算當(dāng)前a時(shí)刻,從源節(jié)點(diǎn)s到所有未被訪問的必經(jīng)節(jié)點(diǎn)p的轉(zhuǎn)移概率其中,τsp(a)表示當(dāng)前時(shí)刻,節(jié)點(diǎn)s到節(jié)點(diǎn)p路徑上的信息素,ηsp(a)表示從節(jié)點(diǎn)s到節(jié)點(diǎn)p的能見度,取值為節(jié)點(diǎn)s到節(jié)點(diǎn)p的距離的倒數(shù),α為信息素的加權(quán)值,β為能見度的加權(quán)值;(5.4b)通過轉(zhuǎn)移概率確定下一時(shí)刻訪問節(jié)點(diǎn),對其進(jìn)行訪問,并將源節(jié)點(diǎn)s到該節(jié)點(diǎn)對應(yīng)的有向邊加入到路徑集合Pk中,更新禁忌表Tabuk;(5.4c)計(jì)算當(dāng)前訪問節(jié)點(diǎn)i到下一個(gè)可訪問必經(jīng)節(jié)點(diǎn)j的轉(zhuǎn)移概率τij(a)表示在當(dāng)前時(shí)刻,節(jié)點(diǎn)i到節(jié)點(diǎn)j路徑上的信息素,ηij(a)表示從節(jié)點(diǎn)i到節(jié)點(diǎn)j的能見度,取值為節(jié)點(diǎn)i到節(jié)點(diǎn)j距離的倒數(shù);(5.4d)通過(5.4c)得出的轉(zhuǎn)移概率確定下一訪問節(jié)點(diǎn),對其進(jìn)行訪問,并更新路徑集合Pk和禁忌表Tabuk;(5.4e)判斷所有必經(jīng)節(jié)點(diǎn)是否都已被訪問,若是,將最后一個(gè)必經(jīng)節(jié)點(diǎn)到目的節(jié)點(diǎn)t的有向邊加入路徑集合Pk,否則,返回(5.4c)。(5.5)計(jì)算當(dāng)前螞蟻k所走路徑Pk的權(quán)值,清空該螞蟻對應(yīng)的禁忌表Tabuk;(5.6)判斷全部螞蟻是否完成尋路,若是,執(zhí)行(5.7);否則,返回(5.4);(5.7)對所有螞蟻的路徑(P1,P2,…Pk,…,Pm)按照權(quán)值從小到大排序,并按照排序依次選取螞蟻k的路徑Pk,判斷其路徑Pk的權(quán)值是否小于本次迭代最優(yōu)解,若是,則將G2中每個(gè)節(jié)點(diǎn)的訪問標(biāo)志位置為0,執(zhí)行(5.8),否則,跳轉(zhuǎn)到(5.14);(5.8)使用正向迪杰斯特拉方法將當(dāng)前螞蟻k得到的路徑Pk恢復(fù)為正向?qū)嶋H路徑P′k:(5.8a)構(gòu)造正向?qū)嶋H路徑P′k,初始化為空,將剪枝后的有權(quán)有向圖G1中所有節(jié)點(diǎn)訪問標(biāo)志位置0;(5.8b)在剪枝后的有權(quán)有向圖G1中,按照路徑Pk的正向順序,從源節(jié)點(diǎn)s出發(fā),尋找下一個(gè)未訪問的必經(jīng)節(jié)點(diǎn),并更新正向?qū)嶋H路徑P′k;(5.8c)尋找下一個(gè)未訪問的必經(jīng)節(jié)點(diǎn),更新正向?qū)嶋H路徑P′k;(5.8d)判斷正向?qū)嶋H路徑P′k是否到達(dá)目的節(jié)點(diǎn)t,若是,得到正向?qū)嶋H路徑P′k,否則,返回(5.8c);(5.9)判斷正向?qū)嶋H路徑P′k的權(quán)值是否小于本次迭代最優(yōu)解,若是,則更新本次迭代最優(yōu)解,執(zhí)行(5.10),否則,執(zhí)行(5.11);(5.10)判斷正向?qū)嶋H路徑P′k的權(quán)值是否小于全局最優(yōu)解,若是,則更新全局最優(yōu)解,并將似優(yōu)路徑集合W中的路徑替換為正向?qū)嶋H路徑P′k,執(zhí)行(5.11),否則,直接執(zhí)行(5.11);(5.11)將所有節(jié)點(diǎn)訪問標(biāo)志位重新置0,使用反向迪杰斯特拉方法將路徑Pk恢復(fù)為反向?qū)嶋H路徑P″k:(5.11a)構(gòu)造反向?qū)嶋H路徑P″k,初始化為空,將剪枝后的有權(quán)有向圖G1中所有節(jié)點(diǎn)訪問標(biāo)志位置0;(5.11b)在剪枝后的有權(quán)有向圖G1中,按照當(dāng)前路徑Pk的反向順序,從目的節(jié)點(diǎn)t出發(fā),尋找下一個(gè)未訪問的必經(jīng)節(jié)點(diǎn),并更新反向?qū)嶋H路徑P″k;(5.11c)尋找下一個(gè)未訪問的必經(jīng)節(jié)點(diǎn),更新反向?qū)嶋H路徑P″k;(5.11d)判斷反向?qū)嶋H路徑P″k是否到達(dá)源節(jié)點(diǎn)s,若是,得到反向?qū)嶋H路徑P″k,否則,返回(5.11c);(5.12)判斷反向?qū)嶋H路徑P″k的權(quán)值是否小于本次迭代最優(yōu)解,若是,則更新本次迭代最優(yōu)解,執(zhí)行(5.13),否則,執(zhí)行(5.14);(5.13)判斷反向?qū)嶋H路徑P″k的權(quán)值是否小于全局最優(yōu)解,若是,則更新全局最優(yōu)解,并將似優(yōu)路徑集合W中的路徑替換為反向?qū)嶋H路徑P″k,執(zhí)行(5.14),否則,直接執(zhí)行(5.14);(5.14)計(jì)算最大信息素τmax和最小信息素τmin:其中,ρ表示信息素的殘留系數(shù),L為最優(yōu)螞蟻?zhàn)哌^的路徑長度,n為簡化后有權(quán)有向圖G2中的節(jié)點(diǎn)個(gè)數(shù),avg=n/2,Pbest表示螞蟻一次搜索找到最優(yōu)解的概率;(5.15)更新路徑信息素τij(a+1),并滿足τmin≤τij(a+1)≤τmax:其中,代表最優(yōu)螞蟻在(a,a+1)時(shí)間內(nèi),路徑i到j(luò)的信息素增量,Q為常數(shù),表示單只螞蟻在路徑中釋放出的信息素總量;(5.16)迭代次數(shù)加1,判斷是否達(dá)到預(yù)定的迭代次數(shù)F,若是,則將似優(yōu)路徑集合W中保存的路徑作為最優(yōu)路徑輸出,否則,返回(5.3)。本發(fā)明的效果通過以下實(shí)驗(yàn)進(jìn)一步說明:1.實(shí)驗(yàn)條件:測試環(huán)境為Ubuntu,單核處理器,內(nèi)存為2048MB。編程語言為c++。本發(fā)明中設(shè)置最大最小蟻群方法主要參數(shù)為α=1,β=2,ρ=0.96,Q=100,Pbest=0.05,最大迭代次數(shù)F根據(jù)不同的必經(jīng)節(jié)點(diǎn)個(gè)數(shù)動態(tài)調(diào)整。本發(fā)明選取5個(gè)測試實(shí)例:測試實(shí)例Case1總節(jié)點(diǎn)個(gè)數(shù)為20,必經(jīng)節(jié)點(diǎn)個(gè)數(shù)為6;Case2總節(jié)點(diǎn)個(gè)數(shù)為50,必經(jīng)節(jié)點(diǎn)個(gè)數(shù)為10;Case3總結(jié)點(diǎn)個(gè)數(shù)為300,必經(jīng)節(jié)點(diǎn)個(gè)數(shù)為20;Case4總節(jié)點(diǎn)個(gè)數(shù)為500,必經(jīng)節(jié)點(diǎn)個(gè)數(shù)為22;Case5總節(jié)點(diǎn)個(gè)數(shù)為500,必經(jīng)節(jié)點(diǎn)個(gè)數(shù)為42。2.實(shí)驗(yàn)內(nèi)容及結(jié)果分析:實(shí)驗(yàn)1,用本發(fā)明與現(xiàn)有的深度優(yōu)先搜索方法、迪杰斯特拉方法、遺傳方法對上述5個(gè)測試實(shí)例進(jìn)行30次測試,得到最優(yōu)路徑權(quán)值和搜索時(shí)間如表1,其中,超過20分鐘仍然沒得到解則認(rèn)為該方法對本實(shí)例無解(NA)。表1四種方法測試結(jié)果從表1可看出以下結(jié)果:在30次測試中,深度優(yōu)先遍歷和迪杰斯特拉在有效時(shí)間內(nèi),對于簡單圖可以找到一個(gè)最優(yōu)解,但對于必經(jīng)節(jié)點(diǎn)較多的復(fù)雜圖,找到解的可能性較小,如表中Case3、Case4和Case5都沒有找到一個(gè)近優(yōu)解,在實(shí)際應(yīng)用中不具有可行性。分析原因在于:深度優(yōu)先遍歷對圖中的每個(gè)節(jié)點(diǎn)進(jìn)行搜索遍歷,有效時(shí)間內(nèi)很難找到一條包含所有必經(jīng)節(jié)點(diǎn)的路徑;迪杰斯特拉方法隨著必經(jīng)節(jié)點(diǎn)個(gè)數(shù)的增加,全排列的時(shí)間復(fù)雜度迅速增長,有效時(shí)間內(nèi)難以找到解。在30次測試中,遺傳方法可以解出Case1、Case2、Case3、Case4,但近優(yōu)解的權(quán)值較大,且耗時(shí)多,而對于Case5,遺傳方法沒有得到滿足經(jīng)過必經(jīng)頂點(diǎn)的似優(yōu)路徑。在30次測試中,本發(fā)明經(jīng)過節(jié)點(diǎn)簡化后,大大減小數(shù)據(jù)量,能夠更快找到最優(yōu)解。對于Case1、Case2,四種方法都得到了最優(yōu)解,本發(fā)明耗時(shí)更少;對于Case3和Case5,雖然本發(fā)明沒有得到理論最優(yōu)解,但得到了一個(gè)與理論最優(yōu)解很接近的次優(yōu)解,優(yōu)于其它三種方法。為了測試本發(fā)明的平均性能,表2統(tǒng)計(jì)出本發(fā)明30次測試的平均權(quán)值,平均耗時(shí)以及誤差率,其中,誤差率=(平均權(quán)值-理論最優(yōu)解)/理論最優(yōu)解。表2針對5個(gè)用例測試30次的平均權(quán)值和誤差率實(shí)例理論最優(yōu)解平均權(quán)值平均耗時(shí)(ms)誤差率Case171717.70.0Case2999951.80.0Case3375398.18154.10.061Case44474474171.90.0Case5444469.78496.470.057從表2可以看出,對于Case1、Case2和Case4,本發(fā)明每次均能在較短時(shí)間得到最優(yōu)解,其誤差率為0。對于Case3和Case5,本發(fā)明能夠在有效時(shí)間內(nèi)找到相對近優(yōu)的路徑,誤差率分別為0.061和0.057。Case3雖然必經(jīng)節(jié)點(diǎn)個(gè)數(shù)小于Case4,但其必經(jīng)節(jié)點(diǎn)的出度較多,存在的實(shí)際路徑更多,這樣使得對類似Case3的這部分圖得不到最優(yōu)解。Case5相對于其他圖,總節(jié)點(diǎn)以及必經(jīng)點(diǎn)數(shù)都比較多,螞蟻?zhàn)叩穆窂较鄬Ω?,得到最?yōu)解的幾率減少。對本發(fā)明30次測試的最優(yōu)路徑權(quán)值變化進(jìn)行折線圖繪制,結(jié)果如圖3。從圖3可以看出:Case1、Case2和Case4在30次測試中,始終得到最優(yōu)解,Case3的路徑權(quán)值在385至420之間起伏,Case5的路徑權(quán)值在446至512之間起伏,具有一定的穩(wěn)定性。實(shí)驗(yàn)2,用本發(fā)明對示例拓?fù)溥M(jìn)行簡化,結(jié)果如圖4。其中:圖4(a)表示未經(jīng)簡化的復(fù)雜圖:s為源節(jié)點(diǎn),t為目的節(jié)點(diǎn),k1、k2、k3、k4為必經(jīng)節(jié)點(diǎn),其余節(jié)點(diǎn)(a,b,c,d,e,f,g)為輔助節(jié)點(diǎn),每條邊上的數(shù)字代表權(quán)重。根據(jù)迪杰斯特拉方法,可得到s到k1的最短距離為2,對應(yīng)路徑為s→a→k1;同理,得到源節(jié)點(diǎn)到其他必經(jīng)節(jié)點(diǎn)、兩兩必經(jīng)節(jié)點(diǎn)間、以及任一必經(jīng)節(jié)點(diǎn)到目的節(jié)點(diǎn)的最短距離。圖4(b)為經(jīng)過簡化后的簡單圖。簡單圖中隱藏了復(fù)雜圖中的一些路徑信息,在恢復(fù)原始路徑時(shí),可能會遇到重復(fù)經(jīng)過同一個(gè)輔助節(jié)點(diǎn)的情況,例如:假設(shè)最后從簡單圖中得到從s到t的路徑順序是:s→k1→k2→k3→k4→t,則恢復(fù)出s到k1的路徑對應(yīng)原始路徑為s→a→k1,k1到k2對應(yīng)為k1→a→k2,k2到k3對應(yīng)為k2→d→k3,k3到k4對應(yīng)為k3→k4,k4到目的節(jié)點(diǎn)t路徑信息對應(yīng)為k4→t,完整的原始路徑信息為s→a→k1→a→k2→d→k3→k4→t,可見,原始路徑中重復(fù)經(jīng)過a節(jié)點(diǎn)。因此,經(jīng)過圖簡化后,原始復(fù)雜圖的節(jié)點(diǎn)個(gè)數(shù)減小,大大減小了復(fù)雜度,求解速度提高,但如果不進(jìn)行實(shí)際路徑恢復(fù),則有可能生成有環(huán)路徑,這就是后續(xù)在使用最大最小蟻群方法中使用正反向迪杰斯特拉的原因。綜上所述,本發(fā)明相對于深度優(yōu)先搜索方法、迪杰斯特拉方法,在求解速度上具有很大的提升,與遺傳方法相比,在求解結(jié)果優(yōu)劣和求解速度上都具有很大的優(yōu)勢。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1