一種基于粒子群優(yōu)化的路徑尋優(yōu)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及道路網(wǎng)絡(luò)的路徑尋優(yōu)領(lǐng)域,更具體地,設(shè)及一種基于粒子群優(yōu)化的路 徑尋優(yōu)方法。
【背景技術(shù)】
[0002] 路徑尋優(yōu)問題是計(jì)算機(jī)科學(xué)、運(yùn)籌學(xué)、地理信息科學(xué)等學(xué)科的研究熱點(diǎn)之一,被廣 泛應(yīng)用在在城市停車場泊車、應(yīng)急救援、GI^導(dǎo)航、興趣點(diǎn)選址等領(lǐng)域??焖儆行У穆窂綄?優(yōu)算法能夠使應(yīng)用系統(tǒng)迅速得到反饋,提供有價(jià)值的資源信息,滿足用戶需求。
[0003] 目前的路徑尋優(yōu)研究是基于經(jīng)典圖論和不斷發(fā)展的計(jì)算機(jī)數(shù)據(jù)結(jié)構(gòu)及算法的有 效性結(jié)合,將道路路網(wǎng)抽象為網(wǎng)絡(luò)模型,實(shí)際的路徑抽象為網(wǎng)絡(luò)的一條邊,路徑長度表征 為邊的權(quán)值,在該網(wǎng)絡(luò)上求某兩點(diǎn)的最短路徑,屬于非確定性問題。其中,最經(jīng)典的方法為 DUkstra算法,主要特點(diǎn)是W起點(diǎn)為中屯、向外層擴(kuò)展,一層層計(jì)算起點(diǎn)到該層的最短路徑, 直到遍歷完所有節(jié)點(diǎn)為止。DUkstra算法的優(yōu)點(diǎn)是保證能找到最短路徑,但是由于它需要 遍歷網(wǎng)絡(luò)結(jié)構(gòu)的所有節(jié)點(diǎn),在網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)較大情況下,其算法的時(shí)間花費(fèi)成倍甚至幕次增 長,較難滿足實(shí)際運(yùn)算需求。
[0004] 為了解決算法耗時(shí)問題,蟻群算法、遺傳算法、蜂群算法等啟發(fā)式算法應(yīng)用于路徑 尋優(yōu)研究。運(yùn)類算法均可在設(shè)定迭代次數(shù)內(nèi)迅速找到相對(duì)滿意解,無需遍歷整個(gè)網(wǎng)絡(luò)結(jié)構(gòu), 大大減少運(yùn)算時(shí)間。然而運(yùn)類算法對(duì)新空間的探索能力較為有限,容易收斂到局部最優(yōu)解, 同時(shí),運(yùn)類算法屬于隨機(jī)類算法,需要多次運(yùn)算,結(jié)果的可靠性較差,不能穩(wěn)定的得到解。 陽〇化]粒子群算法是模擬一群鳥尋找食物的過程,每個(gè)鳥可表示為粒子群中的粒子,即 問題的可行解。運(yùn)些鳥在尋找食物的過程中,不停改變自己在空中飛行的位置和速度,它們 的移動(dòng)是受移動(dòng)慣性、在解空間內(nèi)自身經(jīng)歷過的最優(yōu)位置(自身認(rèn)知)、群體經(jīng)歷過的最優(yōu) 位置(社會(huì)認(rèn)知)引導(dǎo)的。當(dāng)發(fā)現(xiàn)了更好的位置,會(huì)對(duì)最優(yōu)位置進(jìn)行更新,用于后續(xù)指引粒 子群的移動(dòng)。整個(gè)過程不斷重復(fù),從而找到一個(gè)滿意解。粒子群算法可分為全局粒子群算 法和局部粒子群算法。前者收斂速度快,但也容易陷入局部最優(yōu),后者將粒子鄰域內(nèi)的最優(yōu) 值作為社會(huì)認(rèn)知,避免了早熟收斂,很難陷入局部最優(yōu)。
【發(fā)明內(nèi)容】
[0006] 為了克服上述現(xiàn)有路徑尋找方法存在的不足,本發(fā)明提出一種基于粒子群優(yōu)化的 路徑尋優(yōu)方法。該方法模擬鳥類尋找食物的過程,根據(jù)鳥類飛行慣性、自身認(rèn)知和鳥群共享 的社會(huì)認(rèn)知求解路徑尋優(yōu)問題,能夠提高尋優(yōu)效率和收斂速度。
[0007] 為了解決上述的不足,本發(fā)明的技術(shù)方案為:
[0008] 一種基于粒子群優(yōu)化的路徑尋優(yōu)方法,包括W下步驟:
[0009] S11.讀入并構(gòu)建路網(wǎng);將路網(wǎng)數(shù)據(jù)定義為弧段集和節(jié)點(diǎn)集組合,其中每個(gè)弧段包 含弧段編號(hào)、道路名稱、進(jìn)節(jié)點(diǎn)編號(hào)、出節(jié)點(diǎn)編號(hào)、路段編號(hào)、路段長度、方向編號(hào),每個(gè)節(jié)點(diǎn) 包含節(jié)點(diǎn)編號(hào)、經(jīng)締度、鄰接節(jié)點(diǎn)編號(hào)集和連接弧段編號(hào)集;分別讀入W上信息,構(gòu)建路網(wǎng) 模型;
[0010] S12.初始化粒子群;將一個(gè)粒子定義為一條路徑,由該路徑的弧段集和節(jié)點(diǎn)集組 成,根據(jù)設(shè)定的隨機(jī)因子范圍,生成隨機(jī)路徑集,即初始狀態(tài)的粒子群;同時(shí),將每個(gè)粒子的 最優(yōu)解賦值為粒子的初始解;
[0011] S13.計(jì)算每個(gè)粒子的適應(yīng)度函數(shù);將適應(yīng)度函數(shù)定義為粒子的總路徑距離,將粒 子中的弧段長度相加,計(jì)算粒子路徑距離總和;
[0012] S14.獲取每個(gè)粒子的最優(yōu)解;遍歷粒子群中的每個(gè)粒子,比較本次迭代的解和該 粒子的最優(yōu)解的適應(yīng)度函數(shù),若前者由于后者,則該粒子的最優(yōu)解更新為其本次迭代的解, 記為自身認(rèn)知;
[0013]S15.獲取粒子鄰域最優(yōu)解;遍歷粒子群中的每個(gè)粒子,比較粒子鄰域的最優(yōu)解的 適應(yīng)度函數(shù),將適應(yīng)度函數(shù)最優(yōu)的解更新為粒子鄰域最優(yōu)解,記為社會(huì)認(rèn)知;
[0014]S16.判斷當(dāng)前迭代次數(shù)是否超過設(shè)定的最大迭代次數(shù)闊值,若是跳到步驟S18, 若否,下一步;
[0015]S17.更新粒子群;遍歷粒子群,對(duì)于每個(gè)粒子,根據(jù)其自身認(rèn)知(該粒子的最優(yōu) 解)、社會(huì)認(rèn)知(粒子群最優(yōu)解)和慣性(粒子前兩代狀態(tài)形成的更新方向),分別對(duì)粒子 位置進(jìn)行更新,并返回步驟S13 ;
[0016] S18.記錄粒子群最優(yōu)解;通過比較最后一次迭代中每個(gè)粒子鄰域的最優(yōu)解的適 應(yīng)度函數(shù),選擇最優(yōu)的解為最短路徑。
[0017] 優(yōu)選地,所述步驟S12中,初始化粒子群的步驟包括:
[001引S21.設(shè)定起點(diǎn)n。、終點(diǎn)Hd和路徑尋找隨機(jī)因子范圍[rmm,rmJ;根據(jù)用戶設(shè)置的起 點(diǎn)和終點(diǎn)位置,在已構(gòu)建的路網(wǎng)模型的節(jié)點(diǎn)集中分別查詢相應(yīng)的起點(diǎn)和終點(diǎn)位置;
[0019] S22.初始化粒子群P=如,…,Pi,…,P。},設(shè)置每個(gè)粒子的弧段集和節(jié)點(diǎn)集為空;
[0020] S23.賦值當(dāng)前節(jié)點(diǎn)n。胃為起點(diǎn)節(jié)點(diǎn);
[0021] S24.生成隨機(jī)因子r~叫r"。,rmJ,并判斷隨機(jī)因子r模粒子當(dāng)前的節(jié)點(diǎn)數(shù)K 是否為0,即若為0,則下一步S25,否則跳到S26 ;
[0022]S25.根據(jù)當(dāng)前節(jié)點(diǎn)的鄰接節(jié)點(diǎn)編號(hào)集隨機(jī)選擇其下一節(jié)點(diǎn),記為選擇節(jié) 點(diǎn),跳到步驟S27;
[0023]S26.選擇當(dāng)前節(jié)點(diǎn)的鄰接節(jié)點(diǎn)編號(hào)集內(nèi)與終點(diǎn)直線距離最近的節(jié)點(diǎn),記為 選擇節(jié)點(diǎn);
[0024]S27.更新粒子節(jié)點(diǎn)集、粒子弧段集、當(dāng)前節(jié)點(diǎn);將當(dāng)前節(jié)點(diǎn)添加到粒子節(jié)點(diǎn)集中, 將進(jìn)節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)且出節(jié)點(diǎn)為選擇節(jié)點(diǎn)的弧段添加到粒子弧段及中,并將當(dāng)前節(jié)點(diǎn)更新 為選擇節(jié)點(diǎn);
[00巧]S28.重復(fù)步驟S24到步驟S27,直到當(dāng)前節(jié)點(diǎn)為終點(diǎn)節(jié)點(diǎn)為止,即成功生成一個(gè)粒 子; 陽0%] S29.重復(fù)步驟S23到步驟S28,直到遍歷完粒子群中每個(gè)粒子。
[0027] 優(yōu)選地,所述步驟S13中,計(jì)算每個(gè)粒子的適應(yīng)度函數(shù)的具體計(jì)算公式如下:
[0029] 式中,f(Pi)表示第i個(gè)粒子Pi的適應(yīng)度函數(shù),di表示第i個(gè)粒子的路徑長度,&A 表示第i個(gè)粒子的弧段集,或表示在弧段集b,,,內(nèi)弧段link,的長度。
[0030] 優(yōu)選地,所述步驟S17中,更新粒子群的步驟包括:
[0031] S41.根據(jù)粒子自身認(rèn)知,隊(duì)位子的最優(yōu)解Iocali為參考解;
[0032] S42.根據(jù)參考解,更新粒子;在自身認(rèn)知部分的影響中,粒子受到它經(jīng)歷過的最 優(yōu)位置的影響,W粒子的最優(yōu)解Iocali為參考解,更新粒子當(dāng)前解;
[0033] S43.根據(jù)粒子社會(huì)認(rèn)知,W粒子鄰域的最優(yōu)解為參考解;
[0034] S44.根據(jù)參考解,更新粒子;在社會(huì)認(rèn)知部分的影響中,粒子受到其鄰域經(jīng)歷過 的最優(yōu)解的作用,W粒子鄰域的最優(yōu)解gobali為參考解,更新粒子當(dāng)前解;
[0035] S45.根據(jù)粒子慣性更新粒子;根據(jù)粒子前兩代的變化,獲取粒子移動(dòng)慣性,將前 兩代的交集弧段和節(jié)點(diǎn)記為未被慣性影響部分,用于更新當(dāng)前解。
[0036] 優(yōu)選地,所述步驟S42和步驟S44中,根據(jù)參考解,更新粒子的步驟包括:
[0037] S51.W粒子當(dāng)前解為原解,使用基于密度聚類方法對(duì)原解和參考解內(nèi)的節(jié)點(diǎn)進(jìn)行 聚類分組;
[0038] S52.篩選出同時(shí)包含原解節(jié)點(diǎn)和參考解節(jié)點(diǎn)的組別,并從中隨機(jī)選擇第k類;
[0039] S53.隨機(jī)選擇第k類中的原解節(jié)點(diǎn)ni和參考解節(jié)點(diǎn)n2,將ri2替代n1;
[0040] S54.從第k+1類中隨機(jī)選擇屬于原解的節(jié)點(diǎn)n"Mt;
[OOWS55.更新解,即新解由參考解中從起點(diǎn)到節(jié)點(diǎn)02的路徑、節(jié)點(diǎn)n劇節(jié)點(diǎn)nWJ勺隨 機(jī)路徑(詳見步驟S23到步驟S28)、原解中從節(jié)點(diǎn)n"ext到終點(diǎn)的路徑組成。
[0042] 優(yōu)選地,所述步驟S45中,根據(jù)粒子慣性更新粒子的步驟包括:
[0043] S61.對(duì)于在第t次迭代更新第i個(gè)粒子,首先獲取第t-1次迭代和第t-2次迭代 粒子節(jié)點(diǎn)集間的交集節(jié)點(diǎn)集nst。 陽044] S62.獲取交集節(jié)點(diǎn)集nst的鄰接節(jié)點(diǎn)集ns。,并剔除鄰接節(jié)點(diǎn)集ns。內(nèi)在前兩代解 中已包含的節(jié)點(diǎn)。
[0045] S63.使用基于密度聚類方法對(duì)交集節(jié)點(diǎn)集nSt和鄰接節(jié)點(diǎn)集ns。進(jìn)行聚類。
[0046] S64.篩選出同時(shí)包含交集節(jié)點(diǎn)和鄰接節(jié)點(diǎn)的組別,并從中隨機(jī)選擇第k類。 陽047] S65.隨機(jī)選擇第k類中的交集節(jié)點(diǎn)n/和鄰接節(jié)點(diǎn)n' 2,將n' 2替代n1'。 W48] S66.從第k-1類和第k+1類分別隨機(jī)選擇節(jié)點(diǎn)Vw和節(jié)點(diǎn)nwxt。 W例 S67.更新解,即新解由第t-1次迭代的解中起點(diǎn)到節(jié)點(diǎn)Vw的路徑、節(jié)點(diǎn)n。。。劇 節(jié)點(diǎn)n' 2的隨機(jī)路徑、節(jié)點(diǎn)n' 2和節(jié)點(diǎn)nnext的隨機(jī)路徑、第t-1次迭代的解中節(jié)點(diǎn)nWX劇終 點(diǎn)的路徑。
[0050] 與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
[0051] (1)相對(duì)于傳統(tǒng)的DUkstra算法,本發(fā)明利用粒子群尋找食物原理,將其應(yīng)用到 離散的路徑尋優(yōu)問題中,實(shí)現(xiàn)了一種更為高效的最短路徑選擇方式。
[0052] (2)基于粒子群優(yōu)化原理的優(yōu)化策略使得該算法相比其他啟發(fā)式類捜索算法而 言,有更高的解空間探索能力,更快的收斂速度和求解能力。
【附圖說明】
[0053] 圖I是基于粒子群優(yōu)化的路徑尋優(yōu)方法流程圖。
[0054] 圖2是實(shí)施例1實(shí)驗(yàn)路網(wǎng)結(jié)構(gòu)圖。 陽化5] 圖3是原解和參考解的聚類結(jié)果示意圖。
[0056] 圖4是根據(jù)社會(huì)認(rèn)知或自身認(rèn)知更新粒子的結(jié)果示意圖。
[0057] 圖5是粒子在第t-1次迭代和第t-2次迭代的可行路徑示意圖。
[0058] 圖6是交集節(jié)點(diǎn)集和鄰接節(jié)點(diǎn)集的聚類結(jié)果示意圖。
[0059] 圖7是根據(jù)慣性更新粒子的結(jié)果示意圖。
[0060] 圖8是廣州大學(xué)城路網(wǎng)結(jié)構(gòu)示意圖。
[0061] 圖9是實(shí)施例2起點(diǎn)、終點(diǎn)和最短路徑不意圖。
[0062] 圖10是初始化10組可行路徑示意圖。
[0063] 圖11是本發(fā)明的8次試驗(yàn)下的路徑尋優(yōu)結(jié)果示意圖。
【具體實(shí)施方式】
[0064] 圖1給出了一個(gè)本發(fā)明的流程圖,包括W下步驟: 陽0化]在步驟"讀入與構(gòu)建路網(wǎng)"中,將路網(wǎng)數(shù)據(jù)分為弧段集和節(jié)點(diǎn)集,分別讀取弧段集 和節(jié)點(diǎn)集數(shù)據(jù),前者包括弧段編號(hào)、道路名稱、進(jìn)節(jié)點(diǎn)編號(hào)、出節(jié)點(diǎn)編號(hào)、路段編號(hào)、路段長 度、方向編號(hào),后者包括節(jié)點(diǎn)編號(hào)、經(jīng)締度、鄰接節(jié)點(diǎn)編號(hào)集和連接弧段編號(hào)集。讀取完畢 后,生成路網(wǎng)模型。
[0066] 在步驟"初始化粒子群"中,將每個(gè)粒子定義為一條路徑,均由弧段集和節(jié)點(diǎn)集組 成。每個(gè)粒子的初始化步驟均從起點(diǎn)出發(fā),不斷選擇當(dāng)前節(jié)點(diǎn)的鄰接節(jié)點(diǎn),直到到達(dá)終點(diǎn)節(jié) 點(diǎn)為止。鄰接節(jié)點(diǎn)的選擇方式分為a)隨機(jī)選擇,b)選擇離目的地最近的鄰接節(jié)點(diǎn),需要根 據(jù)設(shè)定的隨機(jī)因子范圍生成隨機(jī)因子,進(jìn)而判斷鄰接節(jié)點(diǎn)的選擇方式。
[0067] 在步驟"計(jì)算每個(gè)粒子的適應(yīng)