一、蟻群算法是什么?
蟻群算法是模擬螞蟻覓食的原理,設計出的一種群集智能算法。
螞蟻在覓食過程中能夠在其經過的路徑上留下一種稱為信息素的物質,並在覓食過程中能夠感知這種物質的強度,並指導自己行動的方向,它們總是朝着該物質強度高的方向移動,這就形成一種類似正反饋的機制,這樣經過一段時間后,整個蟻群就會沿着最短路徑到達食物源了。
受到蟻群覓食的啟發,於20世紀90年代意大利學者Dorigo、Maniezzo等人首先提出了蟻群系統。他們對其進行了研究,成功的使用蟻群算法解決了旅行商問題(TSP問題)。
二、圖着色問題
圖着色問題(Graph Coloring Problem)最早起源於“四色猜想”。19世紀英國的一位數學家提出了地圖着色問題,這個問題他沒能解決,不過當時的一位青年科學家提出使用四種顏色就可給地圖着色,並且該地圖相鄰的區域所着的顏色不同,不過他沒給出證明,這就是后來所說的“四色猜想”。雖然沒有科學的理論來證明“四色猜想”,但是大多數人認為“四色猜想”是正確的,即對於一個平面,能僅用四種顏色就能對其進行着色,並且使得相鄰部分顏色不相同。
圖着色問題中所說的圖一般是指數據結構中的圖,由頂點和連接頂點的邊構成。
雖說圖着色問題看着挺簡單的,看起來只要一遍遍的遍歷就完事了,但是隨着圖的頂點的增加,時間花銷越來越高,十分影響性能。所以研究該問題的人想出一系列如貪心算法、禁忌搜索算法、模擬退火算法、遺傳算法、DNA 算法、蟻群算法這樣高效的算法用來解決圖着色問題。在圖的遍歷時,發現對頂點的遍歷順序其實是對結果有影響的。
對於上圖,如果着色時按照一定順序遍歷每個頂點,每到達一個新頂點,就遍歷以前用過的顏色,直到新頂點上色后與相鄰頂點顏色不沖突,如果已有的每種顏色都與相鄰頂點顏色沖突,則用一種新的顏色。如果頂點順序為1->2->4->5->3->6,着色將會變成中間那幅圖的樣子,使用了四種顏色。而如果着色順序變成2->1->3->6->5->4,那就只用了三種顏色。而蟻群算法能夠通過蟻群的協同作用來找到最佳路徑為圖着色問題提出解決方案。
三、蟻群算法使用在圖着色問題上的步驟
步驟 1:對蟻群算法中的各個參數進行初始化。構造出圖G的鄰接矩陣為着色做准備。
步驟 2:讓所有的人工螞蟻從圖的第一個頂點出發,開始遍歷。
步驟 3:人工螞蟻開始給所經過的頂點着色。開始遍歷時着色的顏色集為空, 則使用第一種顏色為第一個頂點進行着色。
步驟 4:在人工螞蟻需要向鄰近的結點進行轉移時,需要計算這些人工螞蟻向鄰近的結點轉移的概率,並且確定人工螞蟻前進的方向。人工螞蟻在結點 i 向另一個結點 j 轉移的概率公式為:
其中 ŋij表示啟發式信息,ŋij=1/Numc,其中Numc 表示 vi-1 着色后使用的總顏色數。Τ(i,j)表示在頂點 i 向頂點 j 轉移時留下的信息素的量。 在人工螞蟻向鄰近結點轉移后需要對路徑上的信息素進行更新信息素的 更新公式為:
其中:
公式中 Q 表示路徑上信息素的強度,Numc 表示給上一個頂點着色后使用的 顏色數。
步驟 5:給人工螞蟻所在的頂點進行着色,使用顏色集合中的顏色試探性給該頂點進行着色,若產生沖突則換用下一種顏色,如果顏色集中所有顏色都不能給該頂點進行着色,則使用一種 新的顏色給該頂點進行着色。
步驟 6:判斷是否完成了所有的頂點着色,若沒有則轉到步驟 3,否則表示該人工螞蟻完成了一次的着色過程。
步驟 7:判斷是否達到了最大的迭代次數,若是,則表示蟻群算法運行結束, 並輸出最優的着色結果,否則轉到步驟 2 開始下一次的迭代過程。