本發(fā)明涉及人工智能領(lǐng)域,具體涉及一種基于蟻群算法的路徑規(guī)劃方法。
背景技術(shù):
路徑規(guī)劃是當(dāng)下研究的熱點(diǎn)之一,路徑指的是連接起點(diǎn)位置和終點(diǎn)位置的序列點(diǎn)或曲線,構(gòu)成路徑的策略稱之為路徑規(guī)劃。路徑規(guī)劃的目的,是使得移動(dòng)主體(如智能小車、移動(dòng)機(jī)器人、無(wú)人機(jī)等)能夠根據(jù)內(nèi)定的程序,按照一定的最優(yōu)解準(zhǔn)則(如行駛路徑長(zhǎng)度最短、行駛耗時(shí)最短等),在存在著諸多障礙物的路況中自行避障,從而選擇出一條從起始點(diǎn)到終點(diǎn)的最優(yōu)路徑。
針對(duì)路徑規(guī)劃的研究主要聚焦于以下三個(gè)方面:第一,移動(dòng)主體能否順利地從起始點(diǎn)到達(dá)終點(diǎn);第二,移動(dòng)主體能否在行駛過(guò)程中自動(dòng)避開(kāi)沿途的障礙物;第三,在完成上述兩個(gè)指標(biāo)的基礎(chǔ)上,移動(dòng)主體是否能按照一定的最優(yōu)解準(zhǔn)則,選擇出最優(yōu)路徑。傳統(tǒng)的路徑規(guī)劃算法有模擬退火算法、人工勢(shì)場(chǎng)法、模糊邏輯算法、禁忌搜索算法等,但是傳統(tǒng)算法在解決實(shí)際問(wèn)題時(shí)往往存在著建模難的問(wèn)題,并且面對(duì)環(huán)境變化的應(yīng)變性較差。
在處理復(fù)雜動(dòng)態(tài)環(huán)境信息情況下的路徑規(guī)劃問(wèn)題時(shí),來(lái)自于自然界的啟示往往能起到很好的作用。智能仿生學(xué)算法就是人們通過(guò)仿生學(xué)研究發(fā)現(xiàn)的算法,常用到的有蟻群算法、神經(jīng)網(wǎng)絡(luò)算法、粒子群算法、遺傳算法等。其中,蟻群算法(antcolonyalgorithm,aca)由于其求解的快速性、較強(qiáng)的全局搜索能力以及較強(qiáng)的魯棒性在路徑規(guī)劃領(lǐng)域得到了廣泛的應(yīng)用。蟻群算法的思想來(lái)自于對(duì)蟻群覓食行為的探索,每個(gè)螞蟻覓食時(shí)都會(huì)在走過(guò)的道路上留下一定濃度的信息素,當(dāng)存在某條從起點(diǎn)到終點(diǎn)的較短路徑時(shí),單位時(shí)間內(nèi)通過(guò)該路徑的螞蟻數(shù)量也會(huì)較多,從而在該路徑上留有更多的信息素,吸引更多的螞蟻選擇該路徑,這就形成了一種正反饋效應(yīng),因此信息素濃度高的最短路徑很快就會(huì)被發(fā)現(xiàn)。算法通過(guò)迭代來(lái)模擬蟻群覓食的行為達(dá)到目的,具有良好的全局優(yōu)化能力、本質(zhì)上的并行性、易于用計(jì)算機(jī)實(shí)現(xiàn)等優(yōu)點(diǎn)。但是在經(jīng)典蟻群算法中,信息素?fù)]發(fā)系數(shù)是一個(gè)常數(shù),新搜索到的較優(yōu)路徑與上一輪所搜索到的路徑遵循相同的信息素?fù)]發(fā)準(zhǔn)則,而該準(zhǔn)則不能夠最大化地促進(jìn)蟻群算法的正反饋效應(yīng),導(dǎo)致經(jīng)典蟻群算法收斂速度過(guò)慢,并且會(huì)伴隨著出現(xiàn)一些非穩(wěn)定最優(yōu)解。所以,如何進(jìn)一步縮短蟻群算法的算法收斂時(shí)間與剔除一些非穩(wěn)定最優(yōu)解,成為蟻群算法急需改進(jìn)的部分。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:基于以上不足,本發(fā)明提出一種基于改進(jìn)的蟻群算法的路徑規(guī)劃方法,引入自適應(yīng)信息素?fù)]發(fā)系數(shù)思想以及在此基礎(chǔ)上的路徑?jīng)Q策規(guī)則,從而能夠縮短算法收斂時(shí)間并剔除一些非穩(wěn)定最優(yōu)解。
技術(shù)方案:一種基于改進(jìn)的蟻群算法的路徑規(guī)劃方法,包括以下步驟:
(1)利用柵格法對(duì)地圖環(huán)境進(jìn)行建模,包括設(shè)置起始節(jié)點(diǎn)、目標(biāo)節(jié)點(diǎn)、障礙物柵格;
(2)初始化蟻群算法基本參數(shù),并使蟻群初始化在起始節(jié)點(diǎn)處;
(3)每只螞蟻從起始節(jié)點(diǎn)開(kāi)始搜索遍歷,根據(jù)轉(zhuǎn)移概率選擇下一節(jié)點(diǎn),螞蟻?zhàn)哌^(guò)的每個(gè)節(jié)點(diǎn)記錄在禁忌表中,當(dāng)螞蟻到達(dá)目標(biāo)節(jié)點(diǎn)時(shí),計(jì)算螞蟻所選路徑長(zhǎng)度和路徑上的拐點(diǎn)個(gè)數(shù);
(4)當(dāng)所有螞蟻完成搜索后,應(yīng)用拐點(diǎn)較少原則選取當(dāng)次迭代的最優(yōu)路徑;
(5)對(duì)當(dāng)次迭代的最優(yōu)路徑應(yīng)用簡(jiǎn)化路徑原則,得到優(yōu)化后的當(dāng)次迭代最優(yōu)路徑;
(6)對(duì)當(dāng)次迭代的所有可行路徑應(yīng)用預(yù)先排序規(guī)則,選取出較優(yōu)路徑,對(duì)較優(yōu)路徑上的信息素?fù)]發(fā)系數(shù)進(jìn)行自適應(yīng)調(diào)整策略,并在此基礎(chǔ)上更新每條較優(yōu)路徑上的信息素濃度;
(7)重復(fù)執(zhí)行步驟(2)-步驟(6),直到迭代次數(shù)達(dá)到最大迭代次數(shù),計(jì)算各輪迭代的最優(yōu)路徑長(zhǎng)度,得到全局最優(yōu)路徑。
其中,步驟(4)中的拐點(diǎn)較少原則具體為:
第一輪迭代完成后,比較每條路徑長(zhǎng)度和路徑中的拐點(diǎn)個(gè)數(shù),選擇長(zhǎng)度最短的路徑作為當(dāng)次迭代的最優(yōu)路徑,如果有路徑長(zhǎng)度相同,則選擇拐點(diǎn)較少的路徑作為當(dāng)次迭代的最優(yōu)路徑;
在后續(xù)迭代過(guò)程中,每輪迭代完成后,計(jì)算當(dāng)次迭代所產(chǎn)生的最優(yōu)路徑中的拐點(diǎn)個(gè)數(shù),比較當(dāng)次迭代所產(chǎn)生的最優(yōu)路徑長(zhǎng)度與現(xiàn)有最優(yōu)路徑長(zhǎng)度,如果相同,則選擇拐點(diǎn)較少的路徑;如果不同,則選擇路徑長(zhǎng)度較短的路徑。
步驟(5)中簡(jiǎn)化路徑原則具體為:對(duì)路徑中所經(jīng)過(guò)的每一個(gè)節(jié)點(diǎn)與起始節(jié)點(diǎn)進(jìn)行是否為鄰節(jié)點(diǎn)判斷,如果當(dāng)前節(jié)點(diǎn)為起始節(jié)點(diǎn)的鄰節(jié)點(diǎn),則直接由起始節(jié)點(diǎn)導(dǎo)向該節(jié)點(diǎn),省去中間節(jié)點(diǎn);如果當(dāng)前節(jié)點(diǎn)不是起始節(jié)點(diǎn)的鄰節(jié)點(diǎn),則保留該節(jié)點(diǎn),繼續(xù)上述操作,直至遍歷完路徑中所有節(jié)點(diǎn)。
步驟(6)中的預(yù)先排序規(guī)則具體為:每輪迭代完成后,對(duì)當(dāng)次迭代所產(chǎn)生的全部可行路徑按照長(zhǎng)度由短到長(zhǎng)進(jìn)行排序,選取排序前三分之一的路徑作為較優(yōu)路徑,進(jìn)行信息素濃度的更新,信息素?fù)]發(fā)系數(shù)的計(jì)算公式為:
ρ(nc)=pre_argu·tanh(10·(shortest_length-min(l))/mean(l))+pre_argu
其中,nc為當(dāng)前迭代次數(shù),shortest_length為當(dāng)次迭代最優(yōu)路徑長(zhǎng)度,min(l)為現(xiàn)有最短路徑長(zhǎng)度,mean(l)為當(dāng)前局部最優(yōu)路徑平均長(zhǎng)度,即當(dāng)前迭代次數(shù)下,每輪迭代得到的最優(yōu)路徑長(zhǎng)度的平均值,pre_argu為自適應(yīng)調(diào)整因子前置參數(shù)。
有益效果:本發(fā)明提出一種改進(jìn)蟻群算法的路徑規(guī)劃方法,所述方法針對(duì)傳統(tǒng)蟻群算法中由于算法初期正反饋效應(yīng)較弱導(dǎo)致的收斂速度較慢、最優(yōu)解不穩(wěn)定的問(wèn)題,引入自適應(yīng)信息素?fù)]發(fā)系數(shù)以及路徑?jīng)Q策規(guī)則,即通過(guò)自適應(yīng)調(diào)整信息素?fù)]發(fā)系數(shù)來(lái)促進(jìn)蟻群算法的正反饋效應(yīng)并且采用相關(guān)的路徑?jīng)Q策規(guī)則來(lái)優(yōu)化最優(yōu)路徑的選擇,減少蟻群算法的計(jì)算時(shí)間,從而縮短了蟻群算法實(shí)現(xiàn)算法收斂的時(shí)間,提高了算法的運(yùn)行效率。
附圖說(shuō)明
圖1是本發(fā)明的路徑規(guī)劃方法流程示意圖;
圖2a和圖2b是本發(fā)明的拐點(diǎn)較少規(guī)則的示例圖;
圖3是本發(fā)明的簡(jiǎn)化路徑規(guī)則的示例圖;
圖4是經(jīng)典蟻群算法的最優(yōu)解示例圖;
圖5是本發(fā)明的改進(jìn)后蟻群算法的最優(yōu)解示例圖;
圖6是經(jīng)典蟻群算法的解路徑及算法收斂時(shí)間的示例圖;
圖7是本發(fā)明的改進(jìn)后蟻群算法的解路徑和算法收斂時(shí)間的示例圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步說(shuō)明。
圖1示出了本發(fā)明的路徑規(guī)劃方法流程。在本發(fā)明中,我們使用matlab仿真軟件進(jìn)行模擬和運(yùn)算,如圖1所示,基于蟻群算法進(jìn)行路徑規(guī)劃的方法首先進(jìn)行環(huán)境建模和初始化,然后進(jìn)行搜索迭代,在每一輪迭代完成后,統(tǒng)計(jì)可行路徑信息,對(duì)所有可行路徑分別應(yīng)用不同的路徑?jīng)Q策規(guī)則進(jìn)行算法改進(jìn),從而更快得到最優(yōu)路徑。以下詳細(xì)描述具體步驟。
步驟1、利用柵格法對(duì)地圖環(huán)境進(jìn)行建模,設(shè)置start起始節(jié)點(diǎn)、dest目標(biāo)節(jié)點(diǎn)、obstacle障礙物等柵格。
步驟2、初始化蟻群算法基本參數(shù),手動(dòng)給這些參數(shù)一個(gè)常數(shù)值,如:螞蟻數(shù)量m、啟發(fā)因子α與β等,其中啟發(fā)因子α表征之前所積累下的信息素強(qiáng)度對(duì)螞蟻下一步所走位置的影響程度,啟發(fā)因子β表征啟發(fā)信息對(duì)螞蟻下一步所走位置的相對(duì)重要程度;使蟻群初始化在start起始節(jié)點(diǎn)處。
步驟3、每只螞蟻都從起始節(jié)點(diǎn)出發(fā)開(kāi)始搜索遍歷,選擇轉(zhuǎn)移概率最大的節(jié)點(diǎn)作為下一節(jié)點(diǎn),第k只螞蟻從位置u轉(zhuǎn)移到位置v的轉(zhuǎn)移概率為:
其中,τuv(t)表示路徑(u,v)上的信息素濃度;ηuv(t)表示在路徑(u,v)上的能見(jiàn)度啟發(fā)信息變量,表征這螞蟻從位置u轉(zhuǎn)移到位置v的啟發(fā)程度,該變量由兩位置之間的距離所決定;allowedk(t)表示第k只螞蟻下一步所有可選擇的位置,allowedk(t)={1,2...n}-tabuuk,其中tabuuk為禁忌表,存放螞蟻已經(jīng)走過(guò)的位置,螞蟻在下次選擇時(shí)排除已選位置。
然后判斷螞蟻是否已達(dá)目標(biāo)節(jié)點(diǎn),如果尚未到達(dá),則繼續(xù)搜索下一節(jié)點(diǎn),直到螞蟻到達(dá)目標(biāo)節(jié)點(diǎn)。當(dāng)每只螞蟻到達(dá)目標(biāo)節(jié)點(diǎn)時(shí),計(jì)算螞蟻所選路徑長(zhǎng)度和路徑上的拐點(diǎn)個(gè)數(shù)。
步驟4、當(dāng)所有螞蟻均搜索完成后,選取當(dāng)次迭代的最優(yōu)路徑,選取原則如下:比較每條路徑長(zhǎng)度和路徑中的拐點(diǎn)個(gè)數(shù),優(yōu)先選擇長(zhǎng)度最短的路徑作為當(dāng)次迭代的最優(yōu)路徑,如果有路徑長(zhǎng)度相同,則選擇拐點(diǎn)較少的路徑作為當(dāng)次迭代的最優(yōu)路徑。如圖2a和圖2b所示,圖2a中路徑上存在一個(gè)拐點(diǎn),圖2b中路徑上存在兩個(gè)拐點(diǎn),在路徑長(zhǎng)度相同的基礎(chǔ)上,優(yōu)先選擇圖2a所示的路徑。
步驟5、對(duì)當(dāng)次迭代的最優(yōu)路徑進(jìn)行優(yōu)化,得到優(yōu)化后的當(dāng)次迭代最優(yōu)路徑。具體方法為:判斷當(dāng)次迭代最優(yōu)路徑上的每一個(gè)節(jié)點(diǎn)是否為起始節(jié)點(diǎn)的鄰節(jié)點(diǎn),如果當(dāng)前節(jié)點(diǎn)為起始節(jié)點(diǎn)的鄰節(jié)點(diǎn),則直接由起始節(jié)點(diǎn)導(dǎo)向該節(jié)點(diǎn),省去中間節(jié)點(diǎn);如果當(dāng)前節(jié)點(diǎn)不是起始節(jié)點(diǎn)的鄰節(jié)點(diǎn),則保留該節(jié)點(diǎn),繼續(xù)上述操作,直至遍歷完路徑中所有節(jié)點(diǎn)。因?yàn)楦鶕?jù)步驟4選取出來(lái)的路徑并不一定是當(dāng)前狀態(tài)下的最優(yōu)路徑,可能存在著冗余節(jié)點(diǎn),如圖3所示,一開(kāi)始選取的最優(yōu)路徑可能是start-mid1-mid2,經(jīng)過(guò)判斷發(fā)現(xiàn)mid2節(jié)點(diǎn)是start起始節(jié)點(diǎn)的鄰節(jié)點(diǎn),則路徑規(guī)劃時(shí)從start起始節(jié)點(diǎn)直接導(dǎo)向mid2節(jié)點(diǎn),不必經(jīng)過(guò)mid1節(jié)點(diǎn)。
如果處于迭代過(guò)程中,當(dāng)每輪迭代完成后,計(jì)算當(dāng)次迭代所產(chǎn)生的最優(yōu)路徑中的拐點(diǎn)個(gè)數(shù),比較當(dāng)次迭代所產(chǎn)生的最優(yōu)路徑長(zhǎng)度與現(xiàn)有最優(yōu)路徑長(zhǎng)度,如果相同,則選擇拐點(diǎn)較少的路徑;如果不同,選擇路徑長(zhǎng)度較短的路徑。
步驟6、選擇較優(yōu)路徑進(jìn)行信息素的更新。螞蟻在路徑搜索時(shí)會(huì)觸發(fā)信息素的更新,使得蟻群在較優(yōu)的路徑上釋放更多信息素,形成正反饋效應(yīng)。為了加強(qiáng)信息的正反饋,提高算法收斂速度,本發(fā)明對(duì)路徑應(yīng)用預(yù)先排序規(guī)則和自適應(yīng)的信息素更新規(guī)則,具體步驟如下:
s61、對(duì)當(dāng)次迭代產(chǎn)生的所有可行路徑按長(zhǎng)度由短到長(zhǎng)進(jìn)行排序,選擇長(zhǎng)度排名比較靠前,即長(zhǎng)度較短的路徑作為信息素更新的候選路徑。經(jīng)過(guò)多次matlab仿真發(fā)現(xiàn),當(dāng)選擇出路徑長(zhǎng)度排序前三分之一的路徑進(jìn)行信息素更新時(shí),改進(jìn)后的蟻群算法收斂速度更快,所搜索到的最優(yōu)路徑更為穩(wěn)定,因此優(yōu)選路徑長(zhǎng)度排序前三分之一的路徑作為候選路徑。
s62、對(duì)每條候選路徑上的信息素濃度進(jìn)行更新,具體更新公式為:
τuv(t+t)=(1-ρ)·τuv(t)+δτuv(2)
其中,δτuv表示從位置u到位置v的路徑上的信息素濃度的增量,
其中,lk為需要更新信息素濃度的路徑長(zhǎng)度,q為該路徑之前的信息素濃度。
式(2)中的ρ為信息素?fù)]發(fā)系數(shù),當(dāng)路徑上信息素濃度較小時(shí),信息素正反饋?zhàn)饔孟鄬?duì)較弱,搜索的隨機(jī)性較強(qiáng),算法收斂速度較慢;當(dāng)路徑上信息素濃度較高時(shí),搜索隨機(jī)性減弱,算法收斂速度變快,但是容易陷入局部最優(yōu),為了解決這一矛盾,本發(fā)明引入自適應(yīng)性信息素?fù)]發(fā)系數(shù),具體計(jì)算公式為:
ρ(nc)=pre_argu·tanh(10·(shortest_length-min(l))/mean(l))+pre_argu(4)
其中,nc為當(dāng)前迭代次數(shù),隨著迭代次數(shù)的改變,信息素?fù)]發(fā)系數(shù)也隨之自適應(yīng)地調(diào)整;
shortest_length為當(dāng)次迭代最優(yōu)路徑長(zhǎng)度,引入當(dāng)次迭代最優(yōu)路徑長(zhǎng)度因子,如果當(dāng)次迭代搜索到長(zhǎng)度更短的新的較優(yōu)路徑,則該路徑上的信息素?fù)]發(fā)將相應(yīng)減小,以便讓蟻群更傾向于選擇該路徑;
min(l)為現(xiàn)有最短路徑長(zhǎng)度,引入現(xiàn)有最短路徑長(zhǎng)度因子,如果新搜索到的路徑比已存在的最優(yōu)路徑長(zhǎng)度要長(zhǎng),則之前的搜索策略較為準(zhǔn)確,可以繼續(xù)搜索;
mean(l)為當(dāng)前局部最優(yōu)路徑平均長(zhǎng)度,即當(dāng)前迭代次數(shù)下,每輪迭代得到的最優(yōu)路徑長(zhǎng)度的平均值。引入當(dāng)前局部最優(yōu)路徑平均長(zhǎng)度因子,防止新搜索到的最優(yōu)路徑與現(xiàn)有最優(yōu)路徑長(zhǎng)度差距過(guò)大給算法整體帶來(lái)誤差;
pre_argu為自適應(yīng)調(diào)整因子前置參數(shù),取值范圍為(0,1),經(jīng)過(guò)多次嘗試,當(dāng)自適應(yīng)調(diào)整因子前置參數(shù)設(shè)置為0.3時(shí),改進(jìn)后的蟻群算法收斂速度更快,所得最優(yōu)解更為穩(wěn)定。
本發(fā)明引入了雙曲正切函數(shù),將三個(gè)自適應(yīng)調(diào)整因子進(jìn)行結(jié)合,保證信息素?fù)]發(fā)系數(shù)始終保持在(0,1)區(qū)間,在對(duì)信息素?fù)]發(fā)系數(shù)進(jìn)行自適應(yīng)調(diào)整的基礎(chǔ)上,更新上述排序前三分之一的路徑上的信息素強(qiáng)度。
步驟7、重復(fù)執(zhí)行步驟2-步驟6,直到迭代次數(shù)達(dá)到最大迭代次數(shù),在本實(shí)施例中,最大迭代次數(shù)為50次。計(jì)算各輪迭代的最優(yōu)路徑長(zhǎng)度,得到全局最優(yōu)路徑。
通過(guò)仿真實(shí)驗(yàn),對(duì)采用本發(fā)明的改進(jìn)后蟻群算法的路徑規(guī)劃方法與采用經(jīng)典蟻群算法的路徑規(guī)劃方法,從算法收斂時(shí)間和算法最優(yōu)解穩(wěn)定性方面進(jìn)行比較,仿真結(jié)果分別如圖4-圖7所示。圖4為經(jīng)典蟻群算法的最優(yōu)解示例,圖5為改進(jìn)后蟻群算法的最優(yōu)解示例,圖中shortest_route為算法得到的最優(yōu)解路徑,每個(gè)數(shù)字表示最優(yōu)路徑上的柵格位置,shortest_length得到的最優(yōu)路徑的長(zhǎng)度,由圖可見(jiàn),雖然路徑略有不同,但是兩種算法在具體最優(yōu)路徑長(zhǎng)度方面是一致的。圖6為經(jīng)典蟻群算法仿真結(jié)果,圖7為本發(fā)明的改進(jìn)后蟻群算法仿真結(jié)果,從圖可知,本發(fā)明在算法收斂速度與最優(yōu)解的穩(wěn)定性方面有了明顯的提升,圖7中曲線梯度較平穩(wěn)且迅速趨于穩(wěn)定,表明改進(jìn)后的蟻群算法在提高算法收斂速度方面擁有良好的表現(xiàn),可以優(yōu)化傳統(tǒng)的蟻群算法在路徑規(guī)劃問(wèn)題上的運(yùn)算效率。