蟻群演算法(ACO)

洛北辰南發表於2019-03-07

參考:http://www.cnblogs.com/biaoyu/archive/2012/09/26/2704456.html

前言

今天導師開會,同門作報告,題目大概是XXX的多步預測…

中間提到一句——“使用蟻群演算法優化神經網路的初始權值和閾值”

遂查資料瞭解該演算法的實質與用法,或許寫論文會用上吧。

蟻群演算法

簡介

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

定義

各個螞蟻在沒有事先告訴他們食物在什麼地方的前提下開始尋找食物。當一隻找到食物以後,它會向環境釋放一種揮發性分泌物pheromone (稱為資訊素,該物質隨著時間的推移會逐漸揮發消失,資訊素濃度的大小表徵路徑的遠近)來實現的,吸引其他的螞蟻過來,這樣越來越多的螞蟻會找到食物。

有些螞蟻並沒有像其它螞蟻一樣總重複同樣的路,他們會另闢蹊徑,如果另開闢的道路比原來的其他道路更短,那麼,漸漸地,更多的螞蟻被吸引到這條較短的路上來。

最後,經過一段時間執行,可能會出現一條最短的路徑被大多數螞蟻重複著。

蟻群演算法是一種仿生學演算法,是由自然界中螞蟻覓食的行為而啟發的。在自然界中,螞蟻覓食過程中,蟻群總能夠按照尋找到一條從蟻巢和食物源的最優路徑。下圖顯示了這樣一個覓食的過程。

在圖(a)中,有一群螞蟻,假如A是蟻巢,E是食物源(反之亦然)。

這群螞蟻將沿著蟻巢和食物源之間的直線路徑行駛。假如在A和E之間突然出現了一個障礙物(圖(b)),那麼,在B點(或D點)的螞蟻將要做出決策,到底是向左行駛還是向右行駛?由於一開始路上沒有前面螞蟻留下的資訊素(pheromone),螞蟻朝著兩個方向行進的概率是相等的。但是當有螞蟻走過時,它將會在它行進的路上釋放出資訊素,並且這種資訊素會議一定的速率散發掉。資訊素是螞蟻之間交流的工具之一。它後面的螞蟻通過路上資訊素的濃度,做出決策,往左還是往右。很明顯,沿著短邊的的路徑上資訊素將會越來越濃(圖(c)),從而吸引了越來越多的螞蟻沿著這條路徑行駛。
在這裡插入圖片描述

蟻群演算法原理

  • 假如蟻群中所有螞蟻的數量為m,所有城市之間的資訊素用矩陣pheromone表示,最短路徑為bestLength,最佳路徑為bestTour
  • 每隻螞蟻都有自己的記憶體,記憶體中用一個禁忌表(Tabu)來儲存該螞蟻已經訪問過的城市,表示其在以後的搜尋中將不能訪問這些城市
  • 一個允許訪問的城市表(Allowed)來儲存它還可以訪問的城市
  • 矩陣(Delta)來儲存它在一個迴圈(或者迭代)中給所經過的路徑釋放的資訊素
  • 還有一些額外資料,例如一些控制引數(α,β,ρ,Q)
  • 螞蟻行走完全程的總成本或距離(tourLength)
  • 假定演算法總共執行MAX_GEN次,執行時間為t。

演算法流程說明(結合流程圖食用,效果更佳)

(1)初始化

設t=0,初始化bestLength為一個非常大的數(正無窮),bestTour為空。初始化所有的螞蟻的Delt矩陣所有元素初始化為0,Tabu表清空,Allowed表中加入所有的城市節點。隨機選擇它們的起始位置(也可以人工指定)。在Tabu中加入起始節點,Allowed中去掉該起始節點。

(2)為每隻螞蟻選擇下一個節點

為每隻螞蟻選擇下一個節點,該節點只能從Allowed中以某種概率(公式1)搜尋到,每搜到一個,就將該節點加入到Tabu中,並且從Allowed中刪除該節點。該過程重複n-1次,直到所有的城市都遍歷過一次。遍歷完所有節點後,將起始節點加入到Tabu中。此時Tabu表元素數量為n+1(n為城市數量),Allowed元素數量為0。接下來按照(公式2)計算每個螞蟻的Delta矩陣值。最後計算最佳路徑,比較每個螞蟻的路徑成本,然後和bestLength比較,若它的路徑成本比bestLength小,則將該值賦予bestLength,並且將其Tabu賦予BestTour。

(3)更新資訊素矩陣Delta
(4)檢查終止條件,是否到達MAX_GEN次
(5)輸出最優值bestlength

演算法流程圖

在這裡插入圖片描述

相關文章