雷玉梅
(阜新高等??茖W(xué)校,遼寧 阜新 123000)
TSP(Traveling Salesman Problem)問(wèn)題,也稱旅行商問(wèn)題或貨郎擔(dān)問(wèn)題,是一個(gè)典型的NP(Non-deterministic Polynomial)完全問(wèn)題。它不僅描述了商人從一個(gè)城市出發(fā),經(jīng)過(guò)其他多個(gè)城市,且只經(jīng)過(guò)一次之后,又回到出發(fā)城市的問(wèn)題,也是數(shù)學(xué)領(lǐng)域一個(gè)復(fù)雜的組合優(yōu)化問(wèn)題,更是諸多領(lǐng)域內(nèi)許多復(fù)雜問(wèn)題的概括的形式化描述。凡是可以抽象地表示為遍歷且只遍歷所有結(jié)點(diǎn)一次,最終回到初始結(jié)點(diǎn),求代價(jià)最小的回路問(wèn)題,都可以仿照求解TSP 問(wèn)題的方法進(jìn)行求解。因此,TSP 問(wèn)題的解決方案在計(jì)算機(jī)理論和實(shí)際應(yīng)用中得到廣泛的關(guān)注。
目前解決TSP 問(wèn)題的方法大致可以分為2 大類(lèi)[1],一類(lèi)是擁有較好的數(shù)理邏輯和理論基礎(chǔ)的精確的計(jì)算方法(Exact Algorithm),能夠找到問(wèn)題的最優(yōu)解,另一類(lèi)是近似的計(jì)算方法(Approximation Algorithm),沒(méi)有嚴(yán)密的數(shù)理邏輯,但通常能夠更為高效地求得可接受的問(wèn)題的解,因此在實(shí)際中應(yīng)用更為廣泛,遺傳算法就是一種典型的近似計(jì)算方法。
遺傳算法是根據(jù)優(yōu)勝劣汰的生物進(jìn)化理論設(shè)計(jì)出來(lái)的一種優(yōu)化的搜索算法,主要通過(guò)遺傳染色體信息,選擇對(duì)“環(huán)境”的“適應(yīng)能力”高于父代的子代,直到適應(yīng)能力滿足一定的要求。高經(jīng)緯等人在文獻(xiàn)[2]中證明了使用遺傳算法求解TSP 問(wèn)題時(shí)具有結(jié)果準(zhǔn)確、收斂速度快的特點(diǎn)。文獻(xiàn)[3-9]從不同的方面對(duì)遺傳算法進(jìn)行改進(jìn),提升了其解決TSP 問(wèn)題的能力。然而,對(duì)于大規(guī)模的TSP 問(wèn)題,始終沒(méi)有較好的解決辦法,也吸引了越來(lái)越多的研究學(xué)者的關(guān)注。
本文結(jié)合啟發(fā)式的思想和改進(jìn)的遺傳算法,提出了新的解決大規(guī)模TSP 問(wèn)題的HG 方法,采用分而治之和啟發(fā)式的初始化方法,利用改進(jìn)的遺傳算子,提高了遺傳算法的性能,多個(gè)數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果證明了HG 算法的有效性。
給定N 個(gè)城市的集合,城市用ci,i∈{0,1,...,N-1]表示,R=(c0,c1,...,cN-1)表示經(jīng)過(guò)所有N個(gè)城市的一條路線,當(dāng)路線R 滿足公式(1)取得最小值時(shí),R 即為T(mén)SP 問(wèn)題的最優(yōu)解:
其中,d(ci,ci+1)表示城市ci與城市ci+1之間的距離,f(R)表示路線R 的距離。
解決TSP 問(wèn)題的目標(biāo)就是找到一條路線R*,使得f(R*)取得最小值。對(duì)于N 個(gè)城市的TSP 問(wèn)題,采用全局搜索的方式,可行的組合有(N-1)!種,當(dāng)N 變得很大時(shí),全局搜索的方法已經(jīng)不可能解決TSP 問(wèn)題。
遺傳算法首先對(duì)問(wèn)題中的參數(shù)集進(jìn)行編碼,形成初始種群,計(jì)算適應(yīng)度,然后通過(guò)染色體信息的代代相傳(利用選擇、交叉和變異算子不停地進(jìn)行算法迭代)搜索具有最高適應(yīng)度的個(gè)體,算法流程可用圖1 表示。
圖1 遺傳算法流程圖
本文沿用分而治之的思想解決大規(guī)模的TSP 問(wèn)題,根據(jù)坐標(biāo)位置進(jìn)行聚類(lèi)操作,把相對(duì)位置較近的城市劃分到一個(gè)類(lèi)簇(聚類(lèi)的結(jié)果)中。城市之間的“相似性”采用歐式距離描述,如公式(2)所示:
其中,p 表示結(jié)點(diǎn)的屬性的數(shù)量,這里是2(城市的經(jīng)度和緯度),wij表示結(jié)點(diǎn)ci與cj的相似性。在TSP問(wèn)題中,結(jié)點(diǎn)之間的歐式距離表示城市之間的位置距離,因此聚類(lèi)操作會(huì)把距離較近的城市劃分到同一個(gè)類(lèi)簇,符合進(jìn)行聚類(lèi)操作的初衷。
經(jīng)過(guò)聚類(lèi)操作,把一個(gè)大規(guī)模的TSP 問(wèn)題,劃分為多個(gè)類(lèi)簇中的子TSP 問(wèn)題,然后采用本文改進(jìn)的遺傳算法求解各個(gè)子TSP 問(wèn)題。
本文采用序號(hào)編碼的方式,把每個(gè)類(lèi)簇中的城市編號(hào)為1,2,3,…,ni,ni表示第i 個(gè)類(lèi)簇的城市數(shù)量。一條路徑編碼為一條染色體,用1~ni的任一排列組合表示。
初始化過(guò)程用來(lái)構(gòu)造初始的種群(染色體的集合),初始化結(jié)果的好壞,一定程度上決定了遺傳算法收斂所用的時(shí)間。傳統(tǒng)的遺傳算法中,一般采用隨機(jī)的方式產(chǎn)生初始化種群,但是這種方法的不穩(wěn)定性極高,遺傳算法的收斂可能需要很長(zhǎng)時(shí)間。Osaba 等人在文獻(xiàn)[9]中指出,使用啟發(fā)式的初始化函數(shù)能夠有效地提升遺傳算法的性能。本文就采用了NN[10]的啟發(fā)式初始化函數(shù),具體地,在類(lèi)簇i 中隨機(jī)選擇一個(gè)起始城市c0∈{1,2,...,ni},然后根據(jù)公式(3)依次選擇剩下的ni-1 個(gè)城市,組成初始路線:
HG 的初始化方法,使最初的路線擁有較高的適應(yīng)度,有利于從根本上提升算法的收斂速度以及優(yōu)化收斂結(jié)果。
適應(yīng)度是用來(lái)評(píng)價(jià)個(gè)體對(duì)“環(huán)境”的適應(yīng)能力,適應(yīng)度越高,說(shuō)明適應(yīng)能力越強(qiáng)。在TSP 問(wèn)題中,適應(yīng)度可以用路線的距離來(lái)表示,路線的距離越短,說(shuō)明路線越優(yōu)。為方便后續(xù)的遺傳算子的操作,HG 方法采用公式(4)所示的適應(yīng)度函數(shù):
其中,MAX 表示無(wú)窮大,f(Ri)表示種群中個(gè)體i 的適應(yīng)度,其值越大,表示個(gè)體的適應(yīng)能力越強(qiáng)。
交叉是指父代2 個(gè)個(gè)體的部分染色體信息進(jìn)行互換,重組為新的個(gè)體的操作,在生物進(jìn)化的過(guò)程中發(fā)揮著核心作用。遺傳算法中的交叉算子同樣發(fā)揮著重要作用,但不是任意2 個(gè)父代的個(gè)體都會(huì)進(jìn)行交叉操作,交叉行為的發(fā)生有一定的概率,發(fā)生交叉行為的個(gè)體占種群個(gè)體總數(shù)的比例稱為交叉率。由于HG 方法采用的是序號(hào)編碼,因此采用單親遺傳的方法,在單條染色體內(nèi)進(jìn)行單點(diǎn)交叉操作。對(duì)滿足交叉率的染色體,利用公式(5)選擇交叉點(diǎn):
其中,tik表示染色體i 的第k 個(gè)交叉點(diǎn),S 表示交叉點(diǎn)的總數(shù)。由公式(4)可知,根據(jù)路線Ri中連續(xù)2 個(gè)城市之間的距離最遠(yuǎn)的S 個(gè)位置,依次選擇S 個(gè)交叉點(diǎn),把染色體i 切成S +1 個(gè)片段,然后將這S +1 個(gè)片段重新組合成完整的一條染色體。
HG 的交叉算子消除了個(gè)體中對(duì)適應(yīng)度影響最大的染色體信息(切斷路線中距離最遠(yuǎn)的連續(xù)的2 個(gè)城市),有利于促進(jìn)算法的收斂進(jìn)程,同時(shí)能夠增加種群的多樣性,有利于避免過(guò)早收斂的現(xiàn)象。
變異算子是指對(duì)染色體上某位置的信息進(jìn)行變動(dòng),比如,交換路線上任意2 個(gè)不同城市的位置。跟交叉操作一樣,變異操作同樣有變異率的約束,是指發(fā)生變異的個(gè)體占種群中個(gè)體總數(shù)的比例。傳統(tǒng)的遺傳算法通常為變異率選擇固定的數(shù)值,而HG 算法利用公式(6)定義動(dòng)態(tài)的變異率:
其中,mutation 表示變異率,分子表示種群中染色體信息相同的個(gè)體數(shù)目的最大值,分母表示種群的數(shù)量。比如,隨著算法的迭代,在某一世代的種群中染色體A 出現(xiàn)了2 次,染色體B 出現(xiàn)了3 次,且A≠B,且沒(méi)有其他染色體對(duì)應(yīng)多個(gè)個(gè)體,則公式(6)的分子值為3。
在滿足變異率的前提下,隨機(jī)交換染色體2 個(gè)位置的信息,而且在算法迭代初期,只針對(duì)染色體的前段信息進(jìn)行變異操作,以擴(kuò)大解空間的搜索范圍,到算法迭代后期,則只變異染色體的后段信息,否則可能會(huì)影響算法的收斂。
HG 算法的動(dòng)態(tài)變異算子,保證了種群的多樣性,有利于避免過(guò)早收斂的問(wèn)題,同時(shí)還保證了較大的解空間的搜索范圍和較好的收斂結(jié)果。
選擇算子用來(lái)把種群中的優(yōu)良個(gè)體直接選入下一代。輪盤(pán)賭方法是一種簡(jiǎn)單又常用的選擇方法,每個(gè)個(gè)體對(duì)應(yīng)一個(gè)選擇概率,適應(yīng)能力強(qiáng)的個(gè)體,選擇概率大,適應(yīng)能力低的,選擇概率小,選擇概率通過(guò)公式(7)計(jì)算:
其中pik表示種群i 中個(gè)體k 的選擇概率。
由公式(7)可知,種群中所有個(gè)體的選擇概率之和為1,因此可以通過(guò)累加的方式為每個(gè)個(gè)體確定一個(gè)概率區(qū)間。比如個(gè)體1 的選擇概率為0.1,個(gè)體2的選擇概率為0.2,則個(gè)體1 的概率區(qū)間為0~0.1,而個(gè)體2 為0.1~0.3。然后根據(jù)0~1 區(qū)間內(nèi)的一個(gè)隨機(jī)數(shù),確定被選中的個(gè)體。
在求得各子TSP 問(wèn)題的解之后,需要將它們集成為全局的TSP 問(wèn)題的解,即把各個(gè)類(lèi)簇連接起來(lái)。HG 方法仿照單鏈接的聚類(lèi)方法,在2 個(gè)待連接的類(lèi)簇之間應(yīng)用2 次單鏈接方法,把2 個(gè)類(lèi)簇連接起來(lái),但要求2 次單鏈接方法選中的4 個(gè)點(diǎn)必須是2 對(duì)點(diǎn),即同一個(gè)類(lèi)簇中的2 個(gè)點(diǎn)是直接相連的。單鏈接聚類(lèi)是指根據(jù)2 個(gè)類(lèi)簇對(duì)象之間的最短距離連接類(lèi)簇的方法,具體可由圖2 表示。
圖2 聚類(lèi)連接
圖2 中,中間的虛線分割的上下2 個(gè)類(lèi)簇就是待連接的類(lèi)簇。2 次單鏈接方法,分別可以找到結(jié)點(diǎn)1和3 之間的虛線,以及結(jié)點(diǎn)2 和4 之間的虛線,然后把結(jié)點(diǎn)1 和2 之間以及結(jié)點(diǎn)3 和4 之間的黑色加粗連線剪斷,把結(jié)點(diǎn)1 和3 以及結(jié)點(diǎn)2 和4 連接起來(lái),就成功地把2 個(gè)類(lèi)簇連在了一起。實(shí)際操作過(guò)程中,是先找到2 個(gè)類(lèi)簇距離最近的4 個(gè)點(diǎn),如圖2 中的1,2,3,4,然后比較1-3,2-4 的距離之和與1-4,2-3 的距離之和,選擇較短的一組進(jìn)行連接。這樣就把2 個(gè)類(lèi)簇連接成了一次類(lèi)簇,再繼續(xù)與其他的類(lèi)簇連接,就可以得到全局的TSP 問(wèn)題的解。
根據(jù)前文的闡述,可用表1 描述HG 算法的流程。
表1 HG 算法流程
為了驗(yàn)證HG 算法解決大規(guī)模的TSP 問(wèn)題的性能,本節(jié)選用標(biāo)準(zhǔn)問(wèn)題庫(kù) TSPLIB 的 A280 和NRW1379 兩個(gè)數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),采用標(biāo)準(zhǔn)的遺傳算法(SGA)以及Le 等人[10]和金聰[11]提到的利用啟發(fā)式思想改進(jìn)的遺傳算法作為對(duì)比算法。文獻(xiàn)[10]主要將NN 的啟發(fā)式思想用于初始路徑的選取(HNN),而文獻(xiàn)[11]則選用梯度尋優(yōu)技術(shù)對(duì)變異算子進(jìn)行了改進(jìn)(H-GO)。
實(shí)驗(yàn)中選用k-means 的聚類(lèi)方法[12],A280 數(shù)據(jù)集聚成10 個(gè)類(lèi)簇,NRW1379 數(shù)據(jù)集聚成25 個(gè)類(lèi)簇。實(shí)驗(yàn)均在Intel i5 處理器、2G 的PC 機(jī)上運(yùn)行。
方便自學(xué):教師應(yīng)根據(jù)學(xué)員的現(xiàn)有水平從互聯(lián)網(wǎng)上篩選適宜的視頻資料幫助學(xué)員課后復(fù)習(xí)消化,如“交流接觸器工作原理及內(nèi)部結(jié)構(gòu)”視頻資料。
圖3 和圖4 分別展示了HG 和H-NN 算法在2 個(gè)數(shù)據(jù)集上隨著迭代次數(shù)的增加,所計(jì)算出來(lái)的全局聯(lián)通路徑的長(zhǎng)度的變化,而圖5 和圖6 則是與SGA 算法以及H-GO 算法的對(duì)比結(jié)果。
圖3 路徑長(zhǎng)度隨迭代次數(shù)的變化(A280)
圖4 路徑長(zhǎng)度隨迭代次數(shù)的變化(NRW1379)
圖5 HG VS(SGA && H-GO)(A280)
圖6 HG VS (SGA && H-GO)(NRW1379)
從圖3~圖6 可以看出,隨著迭代次數(shù)的增多,HG 算法計(jì)算得到的路徑長(zhǎng)度逐漸減小。在A280 數(shù)據(jù)集上,HG 算法經(jīng)過(guò)3 000 次迭代之后,路徑長(zhǎng)度已減小到3 200 左右,而SGA 算法仍徘徊在13 000 附近,大概是HG 計(jì)算結(jié)果的4 倍。H-NN 與HG 算法的效果比較接近,但H-GO 算法由于采用了梯度優(yōu)化的方法,在算法迭代后期,收斂速度較慢。在NRW1379 數(shù)據(jù)集上,HG 算法經(jīng)過(guò)5 000 次迭代,路徑長(zhǎng)度已減小到68 000 左右,而SGA 算法的計(jì)算結(jié)果卻仍相當(dāng)于HG 的7 倍之多。H-NN 算法由于并沒(méi)有考慮樣本的多樣性,出現(xiàn)了過(guò)早收斂的趨勢(shì),而HGO 算法同樣存在后期收斂速度減緩的問(wèn)題。此外,SGA 算法在A280 數(shù)據(jù)集上表現(xiàn)出了不穩(wěn)定,距離長(zhǎng)度曲線有回升的情況,這是由于算法運(yùn)行一段時(shí)間后,路徑的前段序列已接近最優(yōu),而在變異算子隨機(jī)交換了2 個(gè)結(jié)點(diǎn)之間的順序之后,使得原本較優(yōu)的路徑變差所導(dǎo)致的,采用動(dòng)態(tài)變異算子的HG 算法就沒(méi)有出現(xiàn)這種情況。
迭代次數(shù)的增加,必然伴隨著運(yùn)行時(shí)間的增加,圖7和圖8 展示了算法計(jì)算結(jié)果隨著運(yùn)行時(shí)間的變化。
圖7 路徑長(zhǎng)度隨運(yùn)行時(shí)間的變化(A280)
圖8 路徑長(zhǎng)度隨運(yùn)行時(shí)間的變化(NRW1379)
從圖7 和圖8 中可以看出,隨著運(yùn)行時(shí)間的增加,HG 算法和SGA 算法計(jì)算的路徑長(zhǎng)度大體都呈下降趨勢(shì),但兩者之間仍存在很大差距。例如在NRW1379 數(shù)據(jù)集上,當(dāng)HG 算法的計(jì)算結(jié)果達(dá)到70 000 左右時(shí),SGA 的計(jì)算結(jié)果還停留在250 000 附近,并且有出現(xiàn)過(guò)早收斂的跡象,而HG 算法則始終呈現(xiàn)較好的下降趨勢(shì)。在圖7 和圖8 中,H-NN 算法過(guò)早收斂的問(wèn)題和H-GO 后期收斂速度緩慢的問(wèn)題表現(xiàn)的更加明顯。
此外,為了直觀、明顯地觀察HG 算法分而治之的思想,以及各個(gè)類(lèi)簇連接的效果,圖9 展示了NRW1379 數(shù)據(jù)集上HG 算法在迭代5 000 次之后的路徑(并沒(méi)有把各個(gè)聚類(lèi)連接),而圖10 則展示了A280 數(shù)據(jù)集上類(lèi)簇連接前后的路徑結(jié)果圖,同樣證明了HG 算法的有效性。
圖9 NRW1379 數(shù)據(jù)集路徑
圖10 A280 數(shù)據(jù)集路徑
從圖9 和圖10 中可以分析出,最終算法的計(jì)算結(jié)果,受聚類(lèi)結(jié)果的影響很大。表2 給出了2 個(gè)數(shù)據(jù)集上進(jìn)行20 次實(shí)驗(yàn)所統(tǒng)計(jì)的HG 方法計(jì)算的全局路徑長(zhǎng)度的均值和均方差。
表2 HG 全局路徑長(zhǎng)度均值與均方差
其中,MSE 表示均方差,AVG 表示均值,N 表示進(jìn)行實(shí)驗(yàn)的次數(shù),此處取20。
實(shí)驗(yàn)過(guò)程中可能出現(xiàn)多次實(shí)驗(yàn)的聚類(lèi)結(jié)果不盡相同的情況。因此,如何選擇聚類(lèi)算法,聚類(lèi)的數(shù)量如何確定,以及是否存在最適合TSP 問(wèn)題的聚類(lèi)方法,這些都將成為筆者后續(xù)研究的課題。
大規(guī)模的TSP 問(wèn)題不僅描述了旅行商人的路徑選擇問(wèn)題,同時(shí)也是計(jì)算機(jī)、物流等諸多領(lǐng)域的復(fù)雜非線性問(wèn)題的抽象模型。本文提出的HG 算法,化繁為簡(jiǎn),把大規(guī)模的TSP 問(wèn)題分割成多個(gè)子TSP 問(wèn)題,并利用改進(jìn)的遺傳算法對(duì)各子問(wèn)題求解,高效地解決了大規(guī)模的TSP 問(wèn)題,同時(shí)有效地解決了過(guò)早收斂的問(wèn)題。在標(biāo)準(zhǔn)問(wèn)題庫(kù)TSPLIB 的多個(gè)數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果,驗(yàn)證了HG 算法的有效性。
[1]Li Ying,Ma Kai,Zhang J iong.An efficient multicore based parallel computing approach for TSP problems[C]// 2013 the Ninth International Conference on Semantics,Knowledge and Grids (SKG).2013:98-104.
[2]高經(jīng)緯,張煦,李峰,等.求解TSP 問(wèn)題的遺傳算法實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2004(2):19-21.
[3]張煜東,吳樂(lè)南,韋耿.智能算法求解TSP 問(wèn)題的比較[J].計(jì)算機(jī)工程與應(yīng)用,2009,45(11):11-15.
[4]Yu Yingying,Chen Yan,Li Taoying.A new design of genetic algorithm for solving TSP[C]// Proceedings of the Fourth International Joint Conference on Computational Sciences and Optimization.2011:309-313.
[5]王斌,李元香,王治.一種求解TSP 問(wèn)題的單親遺傳算法[J].計(jì)算機(jī)科學(xué),2003,30(5):73-75.
[6]李茂軍,朱陶業(yè),童調(diào)生.單親遺傳算法與傳統(tǒng)遺傳算法的比較研究[J].系統(tǒng)工程,2001,19(1):61-65.
[7]Chen Junhong,Hu Junxiang,Zhen Xunyan.Application of improved partheno-genetic algorithm in distribution network switch optimal planning[C]// 2010 International Conference on Electrical and Control Engineering(ICECE).2010:467-470.
[8]Yang Jinqiu,Yang Jiangang,Chen Genlang.Solving largescale TSP using adaptive clustering method[C]// The Second International Symposium on Computional Intelligence and Design.2009:49-51.
[9]Osaba E,Carballedo R,Diaz F,et al.On the influence of using initialization functions on genetic algorithms solving combinatorial optimization problems:A first study on the TSP[C]// 2014 IEEE Conference on Evolving and Adaptive Intelligent Systems (EAIS).2014:1-6.
[10]Le Ny J,F(xiàn)eron E,F(xiàn)razzoli E.On the Dubins traveling salesman problem[J].IEEE Transactions on Automatic Control,2012,57(1):265-270.
[11]金聰.啟發(fā)式遺傳算法及其應(yīng)用[J].數(shù)值計(jì)算與計(jì)算機(jī)應(yīng)用,2003,24(1):30-35.
[12]戴文華,焦翠珍,何婷婷.基于并行遺傳算法的K-means聚類(lèi)研究[J].計(jì)算機(jī)科學(xué),2008,36(6):171-174.
[13]戚玉濤,劉芳,焦李成.求解大規(guī)模TSP 問(wèn)題的自適應(yīng)規(guī)約免疫算法[J].軟件學(xué)報(bào),2008,19(6):1265-1273.
[14]趙連朋,金喜子,王娜,等.求解超大規(guī)模旅行商問(wèn)題的縱深遺傳算法[J].計(jì)算機(jī)工程與應(yīng)用,2009,45(4):56-58.
[15]左國(guó)才,楊金民.K-means 算法在電信CRM 客戶分類(lèi)中的應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(2):155-159.
[16]溫光輝,王明旭,郭嗣琮.一種求解TSP 問(wèn)題的新型遺傳編碼方案[J].科學(xué)技術(shù)與工程,2006,6(2):206-208
[17]滕奇志,唐棠,何小海,等.基于交換-單親遺傳算法的砂巖三位顯微圖像重建[J].數(shù)據(jù)采集與處理,2010,25(3):364-368.