蟻羣算法

         蟻羣算法(ant colony optimization, ACO),又稱螞蟻算法,是一種用來在圖中尋找優化路徑的機率型算法。它由Marco Dorigo於1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行爲。
  蟻羣算法是一種模擬進化算法,初步的研究表明該算法具有許多優良的性質.針對PID控制器參數優化設計問題,將蟻羣算法設計的結果與遺傳算法設計的結果進行了比較,數值仿真結果表明,蟻羣算法具有一種新的模擬進化優化方法的有效性和應用價值。
  蟻羣算法是一種求解組合最優化問題的新型通用啓發式方法,該方法具有正反饋、分佈式計算和富於建設性的貪婪啓發式搜索的特點。通過建立適當的數學模型,基於故障過電流的配電網故障定位變爲一種非線性全局尋優問題。
  各個螞蟻在沒有事先告訴他們食物在什麼地方的前提下開始尋找食物。當一只找到食物以後,它會向環境釋放一種信息素,吸引其他的螞蟻過來,這樣越來越多的螞蟻會找到食物!有些螞蟻並沒有象其它螞蟻一樣總重複同樣的路,他們會另闢蹊徑,如果令開闢的道路比原來的其他道路更短,那麼,漸漸,更多的螞蟻被吸引到這條較短的路上來。最後,經過一段時間運行,可能會出現一條最短的路徑被大多數螞蟻重複着。
  爲什麼小小的螞蟻能夠找到食物?他們具有智能麼?設想,如果我們要爲螞蟻設計一個人工智能的程序,那麼這個程序要多麼複雜呢?首先,你要讓螞蟻能夠避開障礙物,就必須根據適當的地形給它編進指令讓他們能夠巧妙的避開障礙物,其次,要讓螞蟻找到食物,就需要讓他們遍歷空間上的所有點;再次,如果要讓螞蟻找到最短的路徑,那麼需要計算所有可能的路徑並且比較它們的大小,而且更重要的是,你要小心翼翼的編程,因爲程序的錯誤也許會讓你前功盡棄。這是多麼不可思議的程序!太複雜了,恐怕沒人能夠完成這樣繁瑣冗餘的程序。
  然而,事實並沒有你想得那麼複雜,上面這個程序每個螞蟻的核心程序編碼不過100多行!爲什麼這麼簡單的程序會讓螞蟻幹這樣複雜的事情?答案是:簡單規則的涌現。事實上,每隻螞蟻並不是像我們想象的需要知道整個世界的信息,他們其實只關心很小範圍內的眼前信息,而且根據這些局部信息利用幾條簡單的規則進行決策,這樣,在蟻羣這個集體裏,複雜性的行爲就會凸現出來。這就是人工生命、複雜性科學解釋的規律!那麼,這些簡單規則是什麼呢?

1、範圍:

  螞蟻觀察到的範圍是一個方格世界,螞蟻有一個參數爲速度半徑(一般是3),那麼它能觀察到的範圍就是3*3個方格世界,並且能移動的距離也在這個範圍之內。

2、環境:

  螞蟻所在的環境是一個虛擬的世界,其中有障礙物,有別的螞蟻,還有信息素,信息素有兩種,一種是找到食物的螞蟻灑下的食物信息素,一種是找到窩的螞蟻灑下的窩的信息素。每個螞蟻都僅僅能感知它範圍內的環境信息。環境以一定的速率讓信息素消失。

3、覓食規則:

  在每隻螞蟻能感知的範圍內尋找是否有食物,如果有就直接過去。否則看是否有信息素,並且比較在能感知的範圍內哪一點的信息素最多,這樣,它就朝信息素多的地方走,並且每隻螞蟻都會以小概率犯錯誤,從而並不是往信息素最多的點移動。螞蟻找窩的規則和上面一樣,只不過它對窩的信息素做出反應,而對食物信息素沒反應。

4、移動規則:

  每隻螞蟻都朝向信息素最多的方向移,並且,當週圍沒有信息素指引的時候,螞蟻會按照自己原來運動的方向慣性的運動下去,並且,在運動的方向有一個隨機的小的擾動。爲了防止螞蟻原地轉圈,它會記住最近剛走過了哪些點,如果發現要走的下一點已經在最近走過了,它就會盡量避開。

5、避障規則:

  如果螞蟻要移動的方向有障礙物擋住,它會隨機的選擇另一個方向,並且有信息素指引的話,它會按照覓食的規則行爲。

6、播撒信息素規則:

  每隻螞蟻在剛找到食物或者窩的時候撒發的信息素最多,並隨着它走遠的距離,播撒的信息素越來越少。
  根據這幾條規則,螞蟻之間並沒有直接的關係,但是每隻螞蟻都和環境發生交互,而通過信息素這個紐帶,實際上把各個螞蟻之間關聯起來了。比如,當一隻螞蟻找到了食物,它並沒有直接告訴其它螞蟻這兒有食物,而是向環境播撒信息素,當其它的螞蟻經過它附近的時候,就會感覺到信息素的存在,進而根據信息素的指引找到了食物。
  說了這麼多,螞蟻究竟是怎麼找到食物的呢?? 在沒有螞蟻找到食物的時候,環境沒有有用的信息素,那麼螞蟻爲什麼會相對有效的找到食物呢?這要歸功於螞蟻的移動規則,尤其是在沒有信息素時候的移動規則。首先,它要能儘量保持某種慣性,這樣使得螞蟻儘量向前方移動(開始,這個前方是隨機固定的一個方向),而不是原地無謂的打轉或者震動;其次,螞蟻要有一定的隨機性,雖然有了固定的方向,但它也不能像粒子一樣直線運動下去,而是有一個隨機的干擾。這樣就使得螞蟻運動起來具有了一定的目的性,儘量保持原來的方向,但又有新的試探,尤其當碰到障礙物的時候它會立即改變方向,這可以看成一種選擇的過程,也就是環境的障礙物讓螞蟻的某個方向正確,而其他方向則不對。這就解釋了爲什麼單個螞蟻在複雜的諸如迷宮的地圖中仍然能找到隱蔽得很好的食物。
  當然,在有一隻螞蟻找到了食物的時候,其他螞蟻會沿着信息素很快找到食物的。
  螞蟻如何找到最短路徑的?這一是要歸功於信息素,另外要歸功於環境,具體說是計算機時鐘。信息素多的地方顯然經過這裏的螞蟻會多,因而會有更多的螞蟻聚集過來。假設有兩條路從窩通向食物,開始的時候,走這兩條路的螞蟻數量同樣多(或者較長的路上螞蟻多,這也無關緊要)。當螞蟻沿着一條路到達終點以後會馬上返回來,這樣,短的路螞蟻來回一次的時間就短,這也意味着重複的頻率就快,因而在單位時間裏走過的螞蟻數目就多,灑下的信息素自然也會多,自然會有更多的螞蟻被吸引過來,從而灑下更多的信息素……;而長的路正相反,因此,越來越多地螞蟻聚集到較短的路徑上來,最短的路徑就近似找到了。也許有人會問局部最短路徑和全局最短路的問題,實際上螞蟻逐漸接近全局最短路的,爲什麼呢?這源於螞蟻會犯錯誤,也就是它會按照一定的概率不往信息素高的地方走而另闢蹊徑,這可以理解爲一種創新,這種創新如果能縮短路途,那麼根據剛纔敘述的原理,更多的螞蟻會被吸引過來。

引申

  跟着螞蟻的蹤跡,你找到了什麼?通過上面的原理敘述和實際操作,我們不難發現螞蟻之所以具有智能行爲,完全歸功於它的簡單行爲規則,而這些規則綜合起來具有下面兩個方面的特點:
 
  1、多樣性
  2、正反饋
  多樣性保證了螞蟻在覓食的時候不置走進死衚衕而無限循環,正反饋機制則保證了相對優良的信息能夠被保存下來。我們可以把多樣性看成是一種創造能力,而正反饋是一種學習強化能力。正反饋的力量也可以比喻成權威的意見,而多樣性是打破權威體現的創造性,正是這兩點小心翼翼的巧妙結合才使得智能行爲涌現出來了。
  引申來講,大自然的進化,社會的進步、人類的創新實際上都離不開這兩樣東西,多樣性保證了系統的創新能力,正反饋保證了優良特性能夠得到強化,兩者要恰到好處的結合。如果多樣性過剩,也就是系統過於活躍,這相當於螞蟻會過多的隨機運動,它就會陷入混沌狀態;而相反,多樣性不夠,正反饋機制過強,那麼系統就好比一潭死水。這在蟻羣中來講就表現爲,螞蟻的行爲過於僵硬,當環境變化了,螞蟻羣仍然不能適當的調整。
  既然複雜性、智能行爲是根據底層規則涌現的,既然底層規則具有多樣性和正反饋特點,那麼也許你會問這些規則是哪裏來的?多樣性和正反饋又是哪裏來的?我本人的意見:規則來源於大自然的進化。而大自然的進化根據剛纔講的也體現爲多樣性和正反饋的巧妙結合。而這樣的巧妙結合又是爲什麼呢?爲什麼在你眼前呈現的世界是如此栩栩如生呢?答案在於環境造就了這一切,之所以你看到栩栩如生的世界,是因爲那些不能夠適應環境的多樣性與正反饋的結合都已經死掉了,被環境淘汰了!
 
  蟻羣算法的實現
  下面的程序開始運行之後,螞蟻們開始從窩裏出動了,尋找食物;他們會順着屏幕爬滿整個畫面,直到找到食物再返回窩。
  其中,‘F’點表示食物,‘H’表示窩,白色塊表示障礙物,‘+’就是螞蟻了。
  參數說明:
  最大信息素:螞蟻在一開始擁有的信息素總量,越大表示程序在較長一段時間能夠存在信息素。信息素消減的速度:隨着時間的流逝,已經存在於世界上的信息素會消減,這個數值越大,那麼消減的越快。
  錯誤概率表示這個螞蟻不往信息素最大的區域走的概率,越大則表示這個螞蟻越有創新性。
  速度半徑表示螞蟻一次能走的最大長度,也表示這個螞蟻的感知範圍。
  記憶能力表示螞蟻能記住多少個剛剛走過點的座標,這個值避免了螞蟻在本地打轉,停滯不前。而這個值越大那麼整個系統運行速度就慢,越小則螞蟻越容易原地轉圈。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章