【算法】ACO螞蟻尋路最短路徑TSP問題-多篇文章總結

說在開始

發現有的文章缺公式數學模型,有的文章缺代碼,有的文章缺推導過程,內容很雜亂。在這裏我將多篇文章精華內容進行總結匯總,其中加入了我個人的見解,在文章最後我會給出參考鏈接。

作者:憨豆酒(YinDou),熟悉圖形學,圖像處理領域,本章的源代碼可在此倉庫中找到: https://github.com/douysu/person-summary

1 羣蟻算法的基本原理

此部分內容參考鏈接

首先推薦大家先閱讀以下大連理工大學谷俊峯老師的蟻羣算法PPT,下載鏈接爲:https://github.com/ModestBean/algorithm/tree/master/ACO_aunt_optimal_path/reference_material

蟻羣算法是受到對真實螞蟻羣覓食行爲研究的啓發而提出。生物學研究表明:一羣相互協作的螞蟻能夠找到食物和巢穴之間的最短路徑,而單隻螞蟻則不能。生物學家經過大量細緻觀察研究發現,螞蟻個體之間的行爲是相互作用相互影響的。螞蟻在運動過程中,能夠在它所經過的路徑上留下一種稱之爲信息素的物質,而此物質恰恰是螞蟻個體之間信息傳遞交流的載體。螞蟻在運動時能夠感知這種物質,並且習慣於追蹤此物質爬行,當然爬行過程中還會釋放信息素。一條路上的信息素蹤跡越濃,其它螞蟻將以越高的概率跟隨爬行此路徑,從而該路徑上的信息素蹤跡會被加強,因此,由大量螞蟻組成的蟻羣的集體行爲便表現出一種信息正反饋現象。某一路徑上走過的螞蟻越多,則後來者選擇該路徑的可能性就越大。螞蟻個體之間就是通過這種間接的通信機制實現協同搜索最短路徑的目標的。我們舉例簡單說明螞蟻覓食行爲:
在這裏插入圖片描述
如上圖a,b,c的示意圖:

a圖是原始狀態,螞蟻起始點爲A,要到達E,中途有障礙物,要繞過才能到達。BC和BH是繞過障礙物的2條路徑(假設只有2條)。各個路徑的距離d已經標定。

b圖是t=0時刻螞蟻狀態,各個邊上有相等的信息素濃度,假設爲15;

c圖是t=1時刻螞蟻經過後的狀態,各個邊的信息素濃度,有變化;因爲大量螞蟻的選擇概率會不一樣,而選擇概率是和路徑長度相關的。所以越短路徑的濃度會越來越大,經過此短路徑達到目的地的螞蟻也會比其他路徑多。這樣大量的螞蟻實踐之後就找到了最短路徑。所以這個過程本質可以概括爲以下幾點:

  • 1、路徑概率選擇機制信息素蹤跡越濃的路徑,被選中的概率越大

  • 2、信息素更新機制路徑越短,路徑上的信息素蹤跡增長得越快

  • 3、協同工作機制螞蟻個體通過信息素進行信息交流。

從螞蟻覓食的原理可見,單個個體的行爲非常簡單螞蟻只知道跟蹤信息素爬行並釋放信息素,但組合後的羣體智能又非常高螞蟻羣能在複雜的地理分佈的清況下,輕鬆找到蟻穴與食物源之間的最短路徑。這種特點恰恰與元啓發算法的特點相一致,蟻羣優化算法正是受到這種生態學現象的啓發後加以模仿並改進而來,覓食的螞蟻由人工蟻替代,螞蟻釋放的信息素變成了人工信息素,螞蟻爬行和信息素的蒸發不再是連續不斷的,而是在離散的時空中進行。

2 ACO螞蟻算法的基本流程

羣蟻算法的2個核心步驟是路徑構建信息素更新

此部分內容參考鏈接1

此部分內容參考鏈接2

2.1 路徑構建

在這裏插入圖片描述
下面解釋以上各個變量的含義:

  • P是前往每個城市的概率,也就是我們需要計算的。
  • τ ij是從城市i到城市j的路徑的信息素濃度。
  • η ij的字母是城市i到城市j距離的倒數。η ij = 1/d ij。

下面解釋以上各個控制因子的含義:

  • Alpha:信息啓發式,Alpha值越大,螞蟻選擇之前走過路徑的可能性就越大;值越小,蟻羣搜索範圍就越小,容易陷入局部最優。
  • Beta:期望啓發式因子,Beta越大,蟻羣越容易選擇局部較短路徑,這時算法收斂速度加快,但隨機性不高,容易得到局部最優解。
  • M:蟻羣數量,M越大,最優解越精確,但會產生重複解,消耗資源,增大時間複雜度。
  • RHO:信息素髮揮因子,1-RHO表示殘留因子,RHO過小,各路徑上殘留信息素過多,導致無效路徑繼續被搜素,影響算法收斂效率;RHO過大,有效路徑可能會被放棄搜索,影響最優解的搜索。
  • Q:用於信息素增量的設置,在蟻周模型下,信息素增量=Q/當前解路徑總長度。蟻周模型利用的是全局信息,即螞蟻完成一個循環後更新所有路徑上的信息素

所有的公式都是爲第一個公式服務的,第一個公式的意思是指第k只螞蟻選擇從城市i到城市j的概率,可以見得,這個受距離和信息素濃度的雙重影響,距離越遠,去此城市的概率自然也低,所以nij會等於距離的倒數,而且在算信息素濃度的時候,也考慮到了信息素濃度衰減的問題,所以會在上次的濃度值上乘以一個衰減因子P。另外還要加上本輪搜索增加的信息素濃度(假如有螞蟻經過此路徑的話),所以這幾個公式的整體設計思想還是非常棒的。

2.2 信息素更新

參考內容:大連理工大學螞蟻算法PPT

信息素更新是羣蟻算法的核心,首先看公式:
在這裏插入圖片描述
初始化信息素濃度C(0),如果太小,算法容易早熟,螞蟻會很快集中到一條局部最優路徑上來,因爲可以想想,太小C值,使得和每次揮發和增強的值都差不多,那麼隨機情況下,一些小概率的事件發生就會增加非最優路徑的信息素濃度;如果C太大,信息素對搜索方向的指導性作用減低,影響算法性能。一般情況下,我們可以使用貪婪算法獲取一個路徑值Cnn,然後根據螞蟻個數來計算C(0) = m/Cnn ,m爲螞蟻個數。

總共可以分爲兩步驟:

(1)首先,每一輪過後,問題空間中的所有路徑上的信息素都會發生蒸發

(2)然後,所有的螞蟻根據自己構建的路徑長度在它們本輪經過的邊上釋放信息素

只有文字描述可能不太好理解,根據公式比較好理解。

2.3 螞蟻算法信息素更新模型

參考內容鏈接

信息素更新模型可以分爲以下三種蟻周模型(Ant-Cycle模型)、蟻量模型(Ant-Quantity模型)、蟻密模型(Ant-Density模型),本篇博客實現的模型爲蟻周模型。 具體細節如下。
在這裏插入圖片描述

3 項目所採用的數據集

採用的數據集爲美國城市att48,,文件存儲的爲每一個城市的X,Y座標,根據距離公式可以計算每個城市之間的距離。其最短路徑最優值爲10628。

4 代碼部分和運行結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章