智慧演算法---蟻群演算法介紹

wang_s_k發表於2016-09-08

蟻群演算法是一種群智慧演算法,也是啟發式演算法。基本原理來源於自然界螞蟻覓食的最短路徑原理。


(一)蟻群演算法的由來

蟻群演算法最早是由Marco Dorigo等人在1991年提出,他們在研究新型演算法的過程中,發現蟻群在尋找食物時,通過分泌一種稱為資訊素的生物激素交流覓食資訊從而能快速的找到目標,據此提出了基於資訊正反饋原理的蟻群演算法。

蟻群演算法的基本思想來源於自然界螞蟻覓食的最短路徑原理,根據昆蟲科學家的觀察,發現自然界的螞蟻雖然視覺不發達,但它們可以在沒有任何提示的情況下找到從食物源到巢穴的最短路徑,並在周圍環境發生變化後,自適應地搜尋新的最佳路徑。

螞蟻在尋找食物源的時候,能在其走過的路徑上釋放一種叫資訊素的激素,使一定範圍內的其他螞蟻能夠察覺到。當一些路徑上通過的螞蟻越來越多時,資訊素也就越來越多,螞蟻們選擇這條路徑的概率也就越高,結果導致這條路徑上的資訊素又增多,螞蟻走這條路的概率又增加,生生不息。這種選擇過程被稱為螞蟻的自催化行為。對於單個螞蟻來說,它並沒有要尋找最短路徑,只是根據概率選擇;對於整個蟻群系統來說,它們卻達到了尋找到最優路徑的客觀上的效果。這就是群體智慧。


(二)蟻群演算法能做什麼

蟻群演算法根據模擬螞蟻尋找食物的最短路徑行為來設計的仿生演算法,因此一般而言,蟻群演算法用來解決最短路徑問題,並真的在旅行商問題(TSP,一個尋找最短路徑的問題)上取得了比較好的成效。目前,也已漸漸應用到其他領域中去,在圖著色問題、車輛排程問題、積體電路設計、通訊網路、資料聚類分析等方面都有所應用。


(三)蟻群演算法的流程步驟

這裡以TSP問題為例,演算法設計的流程如下:

步驟1:對相關引數進行初始化,包括蟻群規模、資訊素因子、啟發函式因子、資訊素揮發因子、資訊素常數、最大迭代次數等,以及將資料讀入程式,並進行預處理:比如將城市的座標資訊轉換為城市間的距離矩陣。
步驟2:隨機將螞蟻放於不同出發點,對每個螞蟻計算其下個訪問城市,直到有螞蟻訪問完所有城市。
步驟3:計算各螞蟻經過的路徑長度Lk

L_k
,記錄當前迭代次數最優解,同時對路徑上的資訊素濃度進行更新。
步驟4:判斷是否達到最大迭代次數,若否,返回步驟2;是,結束程式。
步驟5:輸出結果,並根據需要輸出尋優過程中的相關指標,如執行時間、收斂迭代次數等。

要用到的符號說明:

m

m
:整個螞蟻群體中螞蟻數量;
n
n
:城市的數量;
dij
d_{ij}
:城市i
i
與城市j
j
的距離
βij(t)
\beta_{ij}(t)
:t時刻城市i
i
和城市j
j
連線路徑上的資訊素;
pkij(t)
p_{ij}^k (t)
:t時刻螞蟻k從城市i
i
轉移到城市j
j
的概率;

初始時刻螞蟻被放在不同的城市,且各城市路徑上的資訊素濃度為0。

由於蟻群演算法涉及到的引數蠻多的,且這些引數的選擇對程式又都有一定的影響,所以選擇合適的引數組合很重要。蟻群演算法有個特點就是在尋優的過程中,帶有一定的隨機性,這種隨機性主要體現在出發點的選擇上。蟻群演算法正是通過這個初始點的選擇將全域性尋優慢慢轉化為區域性尋優的。引數設定的關鍵就在於在“全域性”和“區域性”之間建立一個平衡點。


(四)蟻群演算法的關鍵引數

在蟻群演算法的發展中,關鍵引數的設定有一定的準則,一般來講遵循以下幾條:

  1. 儘可能在全域性上搜尋最優解,保證解的最優性;
  2. 演算法儘快收斂,以節省尋優時間;
  3. 儘量反應客觀存在的規律,以保證這類仿生演算法的真實性。

蟻群演算法中主要有下面幾個引數需要設定:
(下面列的是一些書上的主要結論,實驗過程就不舉例了,具體參考《MATLAB在數學建模中的應用》

螞蟻數量:
設M表示城市數量,m表示螞蟻數量。m的數量很重要,因為m過大時,會導致搜尋過的路徑上資訊素變化趨於平均,這樣就不好找出好的路徑了;m過小時,易使未被搜尋到的路徑資訊素減小到0,這樣可能會出現早熟,沒找到全域性最優解。一般上,在時間等資源條件緊迫的情況下,螞蟻數設定為城市數的1.5倍較穩妥。

資訊素因子:
資訊素因子反映了螞蟻在移動過程中所積累的資訊量在指導蟻群搜尋中的相對重要程度,其值過大,螞蟻選擇以前走過的路徑概率大,搜尋隨機性減弱;值過小,等同於貪婪演算法,使搜尋過早陷入區域性最優。實驗發現,資訊素因子選擇[1,4]區間,效能較好。

啟發函式因子:
啟發函式因子反映了啟發式資訊在指導蟻群搜尋過程中的相對重要程度,其大小反映的是蟻群尋優過程中先驗性和確定性因素的作用強度。過大時,雖然收斂速度會加快,但容易陷入區域性最優;過小時,容易陷入隨機搜尋,找不到最優解。實驗研究發現,當啟發函式因子為[3,4.5]時,綜合求解效能較好。

資訊素揮發因子:
資訊素揮發因子表示資訊素的消失水平,它的大小直接關係到蟻群演算法的全域性搜尋能力和收斂速度。實驗發現,當屬於[0.2,0.5]時,綜合效能較好。

資訊素常數:
這個引數為資訊素強度,表示螞蟻迴圈一週時釋放在路徑上的資訊素總量,其作用是為了充分利用有向圖上的全域性資訊反饋量,使演算法在正反饋機制作用下以合理的演化速度搜尋到全域性最優解。值越大,螞蟻在已遍歷路徑上的資訊素積累越快,有助於快速收斂。實驗發現,當值屬於[10,1000]時,綜合效能較好。

最大迭代次數:
最大迭代次數值過小,可能導致演算法還沒收斂就已結束;過大則會導致資源浪費。一般最大迭代次數可以取100到500次。一般來講,建議先取200,然後根據執行程式檢視演算法收斂的軌跡來修改取值。

組合引數設計策略:
通常可以按照以下策略來進行引數組合設定:
1. 確定螞蟻數目,螞蟻數目與城市規模之比約為1.5;
2. 引數粗調,即調整取值範圍較大的α,βQ

\alpha,\beta及Q

3. 引數微調,即調整取值範圍較小的ρ
\rho

相關文章