隨機優化算法-蟻羣算法

隨機優化算法-蟻羣優化算法

摘要:蟻羣算法是一種用來尋找優化路徑的概率型算法。它由Marco Dorigo於1992年在他的博士 論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行爲。這種算法具有分佈計算、信息正反饋和啓發式搜索的特徵,本質上是進化算法中的一種啓發式全局優化算法。

一、簡介

蟻羣算法(ant colony optimization, ACO),又稱螞蟻算法,是一種用來在圖中尋找優化路徑的機率型算法。它由Marco Dorigo於1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行爲。蟻羣算法是一種模擬進化算法,初步的研究表明該算法具有許多優良的性質。針對PID控制器參數優化設計問題,將蟻羣算法設計的結果與遺傳算法設計的結果進行了比較,數值仿真結果表明,蟻羣算法具有一種新的模擬進化優化方法的有效性和應用價值。

二、定義

各個螞蟻在沒有事先告訴他們食物在什麼地方的前提下開始尋找食物。當一只找到食物以後,它會向環境釋放一種揮發性分泌物pheromone (稱爲信息素,該物質隨着時間的推移會逐漸揮發消失,信息素濃度的大小表徵路徑的遠近)來實現的,吸引其他的螞蟻過來,這樣越來越多的螞蟻會找到食物。有些螞蟻並沒有像其它螞蟻一樣總重複同樣的路,他們會另闢蹊徑,如果另開闢的道路比原來的其他道路更短,那麼,漸漸地,更多的螞蟻被吸引到這條較短的路上來。最後,經過一段時間運行,可能會出現一條最短的路徑被大多數螞蟻重複着。

蟻羣算法是一種仿生學算法,是由自然界中螞蟻覓食的行爲而啓發的。在自然界中,螞蟻覓食過程中,蟻羣總能夠按照尋找到一條從蟻巢和食物源的最優路徑。圖(1)顯示了這樣一個覓食的過程。
這裏寫圖片描述
在圖1(a)中,有一羣螞蟻,假如A是蟻巢,E是食物源(反之亦然)。這羣螞蟻將沿着蟻巢和食物源之間的直線路徑行駛。假如在A和E之間突然出現了一個障礙物(圖1(b)),那麼,在B點(或D點)的螞蟻將要做出決策,到底是向左行駛還是向右行駛?由於一開始路上沒有前面螞蟻留下的信息素(pheromone),螞蟻朝着兩個方向行進的概率是相等的。但是當有螞蟻走過時,它將會在它行進的路上釋放出信息素,並且這種信息素會議一定的速率散發掉。信息素是螞蟻之間交流的工具之一。它後面的螞蟻通過路上信息素的濃度,做出決策,往左還是往右。很明顯,沿着短邊的的路徑上信息素將會越來越濃(圖1(c)),從而吸引了越來越多的螞蟻沿着這條路徑行駛。

三、流程步驟

這裏以TSP問題爲例,算法設計的流程如下:
步驟1:對相關參數進行初始化,包括蟻羣規模、信息素因子、啓發函數因子、信息素揮發因子、信息素常數、最大迭代次數等,以及將數據讀入程序,並進行預處理:比如將城市的座標信息轉換爲城市間的距離矩陣。
步驟2:隨機將螞蟻放於不同出發點,對每個螞蟻計算其下個訪問城市,直到有螞蟻訪問完所有城市。
步驟3:計算各螞蟻經過的路徑長度Lk,記錄當前迭代次數最優解,同時對路徑上的信息素濃度進行更新。
步驟4:判斷是否達到最大迭代次數,若否,返回步驟2;是,結束程序。
步驟5:輸出結果,並根據需要輸出尋優過程中的相關指標,如運行時間、收斂迭代次數等。

四、幾個主流的蟻羣算法

隨着研究的深入,學者們提出了多種ACO(Ant Colony Optimization):Ant System、Max-Min Ant System, Ant Colony System。這幾類的不同,主要體現在信息素的更新公式、過程不一樣。可以參加此論文的第6~7頁,詳細講述了三類蟻羣系統的信息素公式以及更新過程:
https://www.researchgate.net/profile/Thomas_Stuetzle/publication/308953674_Ant_Colony_Optimization/links/0046353a2c1908b287000000/Ant-Colony-Optimization.pdf

五、Max-Min AS蟻羣算法的實現

過程:
(1)每條路徑上的信息素濃度都有一個最大最小值,最小信息素增加對於更優解探索的可能性,最大信息素濃度保證經驗對於蟻羣的啓發性。
(2)對於螞蟻的下一次選擇使用輪盤賭的方式進行選擇,每條路徑的權重是根據啓發公式進行計算,合適的alpha beta能夠加速算法的收斂,這是經驗性的參數
(3)螞蟻的數量一般不宜過多,一般與城市數量差不多就可以了。經過多次迭代可以發現,當前的最優可行解就是信息素最大的那條路徑。
(4)揮發係數的確定:在每輪迭代過程中,每一次迭代完畢後,下一次的路徑的信息素的濃度會隨着時間揮發。smell_new=smell_old*揮發係數+smell_added。在計算的同時要保證 smell_new在[smell_lowbound,smell_upbound]範圍內,即信息素的濃度有邊界

主要參數:

point_num = 40  # 商旅問題的點數
rou = 0.05  # 蟻羣算法中的蒸發係數
alpha = 0.8  # 有關於信息素的權重係數
beta = 2  # 有關於距離的權重係數
MaxIterTimes = 10000;  # 允許的最大迭代次數
Q = 15  # 單個螞蟻所攜帶的信息素的總量,用於走完以後更新每條走過的邊的信息素 delta=Q/L L:路徑長度
anti_num = 50;  # 螞蟻的數量
tao_min = 0.1/point_num
tao_max = 1

實現過程圖:
下圖中,左邊藍色圖,代表右邊實時給出的路徑方案;右邊紅色圖,紅色線條的粗細濃度代表該條路徑上的信息素的濃度。
(1)當遍歷點爲20個時候
這裏寫圖片描述

這裏寫圖片描述

觀察可以發現,大概第120次左右的迭代後,路徑趨於穩定;
(2)當遍歷點爲50個時:
這裏寫圖片描述
這裏寫圖片描述

觀察可以發現,大概第180次左右的迭代後,路徑趨於穩定;

六、附件本實驗的source code

https://pan.baidu.com/s/1bqYuMj9

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