蟻群演算法的基本原理
蟻群演算法的基本原理
作者:Ackarlix
這種演算法有別於傳統程式設計模式,其優勢在於,避免了冗長的程式設計和籌劃,程式本身是基於一定規則的隨機執行來尋找最佳配置。也就是說,當程式最開始找到目標的時候,路徑幾乎不可能是最優的,甚至可能是包含了無數錯誤的選擇而極度冗長的。但是,程式可以通過螞蟻尋找食物的時候的資訊素原理,不斷地去修正原來的路線,使整個路線越來越短,也就是說,程式執行的時間越長,所獲得的路徑就越可能接近最優路徑。這看起來很類似與我們所見的由無數例子進行歸納概括形成最佳路徑的過程。實際上好似是程式的一個自我學習的過程。
這種優化過程的本質在於:
選擇機制:資訊素越多的路徑,被選擇的概率越大。
更新機制:路徑上面的資訊素會隨螞蟻的經過而增長,而且同時也隨時間的推移逐漸揮發消失。
協調機制:螞蟻間實際上是通過分泌物來互相通訊、協同工作的。
蟻群演算法正是充分利用了選擇、更新和協調的優化機制,即通過個體之間的資訊交流與相互協作最終找到最優解,使它具有很強的發現較優解的能力。
基於以上機制編寫的程式的核心程式碼可能不過上百行,卻完成了類似於學習的過程。原因就是所謂的自組織理論,簡單規則的湧現。事實上,每隻螞蟻並不是像我們想象的需要知道整個世界的資訊,他們其實只關心很小範圍內的眼前資訊,而且根據這些區域性資訊利用幾條簡單的規則進行決策,但是,當叢集裡有無數螞蟻的時候,複雜性的行為就會凸現出來。這就是人工生命、複雜性科學解釋的規律!那麼,這些簡單規則是什麼呢?下面詳細說明:
1、範圍:
螞蟻觀察到的範圍是一個方格世界,螞蟻有一個引數為速度半徑(一般是3),那麼它能觀察到的範圍就是3*3個方格世界,並且能移動的距離也在這個範圍之內。
2、環境:
螞蟻所在的環境是一個虛擬的世界,其中有障礙物,有別的螞蟻,還有資訊素,資訊素有兩種,一種是找到食物的螞蟻灑下的食物資訊素,一種是找到窩的螞蟻灑下的窩的資訊素。每個螞蟻都僅僅能感知它範圍內的環境資訊。環境以一定的速率讓資訊素消失。
3、覓食規則:
在每隻螞蟻能感知的範圍內尋找是否有食物,如果有就直接過去。否則看是否有資訊素,並且比較在能感知的範圍內哪一點的資訊素最多,這樣,它就朝資訊素多的地方走,並且每隻螞蟻多會以小概率犯錯誤,從而並不是往資訊素最多的點移動。螞蟻找窩的規則和上面一樣,只不過它對窩的資訊素做出反應,而對食物資訊素沒反應。
4、移動規則:
每隻螞蟻都朝向資訊素最多的方向移,並且,當週圍沒有資訊素指引的時候,螞蟻會按照自己原來運動的方向慣性的運動下去,並且,在運動的方向有一個隨機的小的擾動。為了防止螞蟻原地轉圈,它會記住最近剛走過了哪些點,如果發現要走的下一點已經在最近走過了,它就會盡量避開。
5、避障規則:
如果螞蟻要移動的方向有障礙物擋住,它會隨機的選擇另一個方向,並且有資訊素指引的話,它會按照覓食的規則行為。
6、播撒資訊素規則:
每隻螞蟻在剛找到食物或者窩的時候撒發的資訊素最多,並隨著它走遠的距離,播撒的資訊素越來越少。
根據這幾條規則,螞蟻之間並沒有直接的關係,但是每隻螞蟻都和環境發生互動,而通過資訊素這個紐帶,實際上把各個螞蟻之間關聯起來了。比如,當一隻螞蟻找到了食物,它並沒有直接告訴其它螞蟻這兒有食物,而是向環境播撒資訊素,當其它的螞蟻經過它附近的時候,就會感覺到資訊素的存在,進而根據資訊素的指引找到了食物。
說了這麼多,螞蟻究竟是怎麼找到食物的呢?
在沒有螞蟻找到食物的時候,環境沒有有用的資訊素,那麼螞蟻為什麼會相對有效的找到食物呢?這要歸功於螞蟻的移動規則,尤其是在沒有資訊素時候的移動規則。首先,它要能儘量保持某種慣性,這樣使得螞蟻儘量向前方移動(開始,這個前方是隨機固定的一個方向),而不是原地無謂的打轉或者震動;其次,螞蟻要有一定的隨機性,雖然有了固定的方向,但它也不能像粒子一樣直線運動下去,而是有一個隨機的干擾。這樣就使得螞蟻運動起來具有了一定的目的性,儘量保持原來的方向,但又有新的試探,尤其當碰到障礙物的時候它會立即改變方向,這可以看成一種選擇的過程,也就是環境的障礙物讓螞蟻的某個方向正確,而其他方向則不對。這就解釋了為什麼單個螞蟻在複雜的諸如迷宮的地圖中仍然能找到隱蔽得很好的食物。
當然,在有一隻螞蟻找到了食物的時候,其他螞蟻會沿著資訊素很快找到食物的。
螞蟻如何找到最短路徑的?
這一是要歸功於資訊素,另外要歸功於環境,具體說是計算機時鐘。資訊素多的地方顯然經過這裡的螞蟻會多,因而會有更多的螞蟻聚集過來。假設有兩條路從窩通向食物,開始的時候,走這兩條路的螞蟻數量同樣多(或者較長的路上螞蟻多,這也無關緊要)。當螞蟻沿著一條路到達終點以後會馬上返回來,這樣,短的路螞蟻來回一次的時間就短,這也意味著重複的頻率就快,因而在單位時間裡走過的螞蟻數目就多,灑下的資訊素自然也會多,自然會有更多的螞蟻被吸引過來,從而灑下更多的資訊素……;而長的路正相反,因此,越來越多地螞蟻聚集到較短的路徑上來,最短的路徑就近似找到了。也許有人會問區域性最短路徑和全域性最短路的問題,實際上螞蟻逐漸接近全域性最短路的,為什麼呢?這源於螞蟻會犯錯誤,也就是它會按照一定的概率不往資訊素高的地方走而另闢蹊徑,這可以理解為一種創新,這種創新如果能縮短路途,那麼根據剛才敘述的原理,更多的螞蟻會被吸引過來。
這種優化過程的本質在於:
選擇機制:資訊素越多的路徑,被選擇的概率越大。
更新機制:路徑上面的資訊素會隨螞蟻的經過而增長,而且同時也隨時間的推移逐漸揮發消失。
協調機制:螞蟻間實際上是通過分泌物來互相通訊、協同工作的。
蟻群演算法正是充分利用了選擇、更新和協調的優化機制,即通過個體之間的資訊交流與相互協作最終找到最優解,使它具有很強的發現較優解的能力。
基於以上機制編寫的程式的核心程式碼可能不過上百行,卻完成了類似於學習的過程。原因就是所謂的自組織理論,簡單規則的湧現。事實上,每隻螞蟻並不是像我們想象的需要知道整個世界的資訊,他們其實只關心很小範圍內的眼前資訊,而且根據這些區域性資訊利用幾條簡單的規則進行決策,但是,當叢集裡有無數螞蟻的時候,複雜性的行為就會凸現出來。這就是人工生命、複雜性科學解釋的規律!那麼,這些簡單規則是什麼呢?下面詳細說明:
1、範圍:
螞蟻觀察到的範圍是一個方格世界,螞蟻有一個引數為速度半徑(一般是3),那麼它能觀察到的範圍就是3*3個方格世界,並且能移動的距離也在這個範圍之內。
2、環境:
螞蟻所在的環境是一個虛擬的世界,其中有障礙物,有別的螞蟻,還有資訊素,資訊素有兩種,一種是找到食物的螞蟻灑下的食物資訊素,一種是找到窩的螞蟻灑下的窩的資訊素。每個螞蟻都僅僅能感知它範圍內的環境資訊。環境以一定的速率讓資訊素消失。
3、覓食規則:
在每隻螞蟻能感知的範圍內尋找是否有食物,如果有就直接過去。否則看是否有資訊素,並且比較在能感知的範圍內哪一點的資訊素最多,這樣,它就朝資訊素多的地方走,並且每隻螞蟻多會以小概率犯錯誤,從而並不是往資訊素最多的點移動。螞蟻找窩的規則和上面一樣,只不過它對窩的資訊素做出反應,而對食物資訊素沒反應。
4、移動規則:
每隻螞蟻都朝向資訊素最多的方向移,並且,當週圍沒有資訊素指引的時候,螞蟻會按照自己原來運動的方向慣性的運動下去,並且,在運動的方向有一個隨機的小的擾動。為了防止螞蟻原地轉圈,它會記住最近剛走過了哪些點,如果發現要走的下一點已經在最近走過了,它就會盡量避開。
5、避障規則:
如果螞蟻要移動的方向有障礙物擋住,它會隨機的選擇另一個方向,並且有資訊素指引的話,它會按照覓食的規則行為。
6、播撒資訊素規則:
每隻螞蟻在剛找到食物或者窩的時候撒發的資訊素最多,並隨著它走遠的距離,播撒的資訊素越來越少。
根據這幾條規則,螞蟻之間並沒有直接的關係,但是每隻螞蟻都和環境發生互動,而通過資訊素這個紐帶,實際上把各個螞蟻之間關聯起來了。比如,當一隻螞蟻找到了食物,它並沒有直接告訴其它螞蟻這兒有食物,而是向環境播撒資訊素,當其它的螞蟻經過它附近的時候,就會感覺到資訊素的存在,進而根據資訊素的指引找到了食物。
說了這麼多,螞蟻究竟是怎麼找到食物的呢?
在沒有螞蟻找到食物的時候,環境沒有有用的資訊素,那麼螞蟻為什麼會相對有效的找到食物呢?這要歸功於螞蟻的移動規則,尤其是在沒有資訊素時候的移動規則。首先,它要能儘量保持某種慣性,這樣使得螞蟻儘量向前方移動(開始,這個前方是隨機固定的一個方向),而不是原地無謂的打轉或者震動;其次,螞蟻要有一定的隨機性,雖然有了固定的方向,但它也不能像粒子一樣直線運動下去,而是有一個隨機的干擾。這樣就使得螞蟻運動起來具有了一定的目的性,儘量保持原來的方向,但又有新的試探,尤其當碰到障礙物的時候它會立即改變方向,這可以看成一種選擇的過程,也就是環境的障礙物讓螞蟻的某個方向正確,而其他方向則不對。這就解釋了為什麼單個螞蟻在複雜的諸如迷宮的地圖中仍然能找到隱蔽得很好的食物。
當然,在有一隻螞蟻找到了食物的時候,其他螞蟻會沿著資訊素很快找到食物的。
螞蟻如何找到最短路徑的?
這一是要歸功於資訊素,另外要歸功於環境,具體說是計算機時鐘。資訊素多的地方顯然經過這裡的螞蟻會多,因而會有更多的螞蟻聚集過來。假設有兩條路從窩通向食物,開始的時候,走這兩條路的螞蟻數量同樣多(或者較長的路上螞蟻多,這也無關緊要)。當螞蟻沿著一條路到達終點以後會馬上返回來,這樣,短的路螞蟻來回一次的時間就短,這也意味著重複的頻率就快,因而在單位時間裡走過的螞蟻數目就多,灑下的資訊素自然也會多,自然會有更多的螞蟻被吸引過來,從而灑下更多的資訊素……;而長的路正相反,因此,越來越多地螞蟻聚集到較短的路徑上來,最短的路徑就近似找到了。也許有人會問區域性最短路徑和全域性最短路的問題,實際上螞蟻逐漸接近全域性最短路的,為什麼呢?這源於螞蟻會犯錯誤,也就是它會按照一定的概率不往資訊素高的地方走而另闢蹊徑,這可以理解為一種創新,這種創新如果能縮短路途,那麼根據剛才敘述的原理,更多的螞蟻會被吸引過來。
相關文章
- 蟻群演算法(ACO)演算法
- 蟻群演算法java實現以及TSP問題蟻群演算法求解演算法Java
- 蟻群演算法原理以及應用演算法
- 10分鐘搞懂蟻群演算法演算法
- 蟻群演算法理論介紹演算法
- 蟻群演算法原理及其實現(python)演算法Python
- 蟻群演算法原理及Matlab實現演算法Matlab
- 蟻群演算法介紹(以TSP問題為例)演算法
- Python程式設計實現蟻群演算法詳解Python程式設計演算法
- 【優化求解】基於蟻群演算法柵格地圖路徑規劃matlab優化演算法地圖Matlab
- 基於ACO蟻群最佳化演算法的WSN網路路由最佳化matlab模擬演算法路由Matlab
- 蟻群、蜂群的智慧,大模型也可以有,谷歌等機構群體智慧研究亮相大模型谷歌
- 基於ACO蟻群最佳化的UAV最優巡檢路線規劃演算法matlab模擬演算法Matlab
- 分治演算法基本原理和實踐演算法
- 【路徑規劃】基於蟻群的多無人機攻擊排程無人機
- 雙指標演算法基本原理和實踐指標演算法
- 群體演算法之細菌覓食演算法演算法
- 滑動視窗演算法基本原理與實踐演算法
- 反射的基本原理反射
- HBase的基本原理
- 代理的基本原理
- SRAM的基本原理
- 泛型的基本原理泛型
- zookeeper的基本原理(二)
- io的基本原理-nio
- 演算法系列之連結串列基本原理---超市購物佇列的故事演算法佇列
- 交換機的基本原理
- JAVA 註解的基本原理Java
- CDN運作的基本原理
- 舵機的基本原理的控制方法
- 02、基本原理
- scrapy基本原理
- 服務發現的基本原理
- Promise實現的基本原理(一)Promise
- 分庫分表的基本原理
- Promise實現的基本原理(二)Promise
- MySQL 主從同步的基本原理MySql主從同步
- SPA路由實現的基本原理路由
- OTDR的基本原理是什麼?