蟻群演算法(ACO)
參考: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
演算法流程圖
相關文章
- 基於ACO蟻群最佳化演算法的WSN網路路由最佳化matlab模擬演算法路由Matlab
- 蟻群演算法java實現以及TSP問題蟻群演算法求解演算法Java
- 基於ACO蟻群最佳化的UAV最優巡檢路線規劃演算法matlab模擬演算法Matlab
- 蟻群演算法原理以及應用演算法
- 10分鐘搞懂蟻群演算法演算法
- 蟻群演算法理論介紹演算法
- 蟻群演算法原理及其實現(python)演算法Python
- 蟻群演算法原理及Matlab實現演算法Matlab
- 蟻群演算法介紹(以TSP問題為例)演算法
- Python程式設計實現蟻群演算法詳解Python程式設計演算法
- 基於ACO蟻群最佳化的VRPSD問題求解matlab模擬,輸出規劃路徑結果和滿載率VRMatlab
- 【優化求解】基於蟻群演算法柵格地圖路徑規劃matlab優化演算法地圖Matlab
- 蟻群、蜂群的智慧,大模型也可以有,谷歌等機構群體智慧研究亮相大模型谷歌
- 群體演算法之細菌覓食演算法演算法
- 【路徑規劃】基於蟻群的多無人機攻擊排程無人機
- 建群,加群,群聊
- 螞蟻金服開源 SOFAJRaft:生產級 Java Raft 演算法庫RaftJava演算法
- 2024.08.28螞蟻
- 螞蟻金服核心技術:百億特徵實時推薦演算法揭祕特徵演算法
- QQ群
- 群論
- 自由群
- 演算法偏見就怪資料集?MIT糾偏演算法自動識別「弱勢群體」演算法MIT
- 人工智慧導論——智慧計算(進化演算法+群智慧優化)人工智慧演算法優化
- MATLAB實戰系列(十一)-多種群遺傳演算法的函式優化演算法(附MATLAB程式碼)Matlab演算法函式優化
- 你已被~.~移出群圖靈讀者官方群圖靈
- 客官不進來看看再走嗎?——天貓內推微信群 (java/演算法)Java演算法
- 迴圈群
- redis驚群Redis
- 螞蟻集團異構平臺開放演算法協議與開源實踐演算法協議
- 3.30螞蟻筆試筆試
- 螞蟻研究報告
- 基於魚群演算法的散熱片形狀最佳化matlab模擬演算法Matlab
- 螞蟻金服生產級 Raft 演算法庫儲存模組剖析 | SOFAJRaft 實現原理Raft演算法
- 微信怎麼群發訊息?微信群發助手群發訊息圖文教程
- 群發郵件
- 晶片群俠傳晶片
- 群論筆記筆記