抄的
目前蟻群演算法主要用在組合最佳化方面,基本蟻群演算法的思路是這樣的:
1. 在初始狀態下,一群螞蟻外出,此時沒有資訊素,那麼各自會隨機的選擇一條路徑。
2. 在下一個狀態,每隻螞蟻到達了不同的點,從初始點到這些點之間留下了資訊素,螞蟻繼續走,已經到達目標的螞蟻開始返回,與此同時,下一批螞蟻出動,它們都會按照各條路徑上資訊素的多少選擇路線(selection),更傾向於選擇資訊素多的路徑走(當然也有隨機性)。
3. 又到了再下一個狀態,剛剛沒有螞蟻經過的路線上的資訊素不同程度的揮發掉了(evaporation),而剛剛經過了螞蟻的路線資訊素增強(reinforcement)。然後又出動一批螞蟻,重複第2個步驟。
每個狀態到下一個狀態的變化稱為一次迭代,在迭代多次過後,就會有某一條路徑上的資訊素明顯多於其它路徑,這通常就是一條最優路徑。
關鍵的部分在於步驟2和3:
步驟2中,每隻螞蟻都要作出選擇,怎樣選擇呢?
selection過程用一個簡單的函式實現:
螞蟻選擇某條路線的機率=該路線上的資訊素÷所有可選擇路線的資訊素之和
假設螞蟻在i點,p(i,j)表示下一次到達j點的機率,而τ(i,j)表示ij兩點間的資訊素,則:
p(i,j)=τ(i,j)/∑τ(i)
(如果所有可選路線的資訊素之和∑τ(i)=0,即前面還沒有螞蟻來過,機率就是一個[0,1]上的隨機值,即隨機選擇一條路線)
步驟3中,揮發和增強是演算法的關鍵所在(也就是如何數學定義資訊素的)
evaporation過程和reinforcement過程定義了一個揮發因子,是迭代次數k的一個函式
ρ(k)=1-lnk/ln(k+1)
最初設定每條路徑的資訊素τ(i,j,0)為相同的值
然後,第k+1次迭代時,資訊素的多少
對於沒有螞蟻經過的路線:τ(i,j,k+1)=(1-ρ(k))τ(i,j,k),顯然資訊素減少了
有螞蟻經過的路線:τ(i,j,k+1)=(1-ρ(k))τ(i,j,k)+ρ(k)/|W|,W為所有點的集合
為什麼各個函式要如此定義,這個問題很難解釋清楚,這也是演算法的精妙所在。如此定義資訊素的揮發和增強,以及路徑選擇,根據馬爾可夫過程(隨機過程之一)能夠推匯出,在迭代了足夠多次以後,演算法能夠收斂到最佳路徑。
抄的
目前蟻群演算法主要用在組合最佳化方面,基本蟻群演算法的思路是這樣的:
1. 在初始狀態下,一群螞蟻外出,此時沒有資訊素,那麼各自會隨機的選擇一條路徑。
2. 在下一個狀態,每隻螞蟻到達了不同的點,從初始點到這些點之間留下了資訊素,螞蟻繼續走,已經到達目標的螞蟻開始返回,與此同時,下一批螞蟻出動,它們都會按照各條路徑上資訊素的多少選擇路線(selection),更傾向於選擇資訊素多的路徑走(當然也有隨機性)。
3. 又到了再下一個狀態,剛剛沒有螞蟻經過的路線上的資訊素不同程度的揮發掉了(evaporation),而剛剛經過了螞蟻的路線資訊素增強(reinforcement)。然後又出動一批螞蟻,重複第2個步驟。
每個狀態到下一個狀態的變化稱為一次迭代,在迭代多次過後,就會有某一條路徑上的資訊素明顯多於其它路徑,這通常就是一條最優路徑。
關鍵的部分在於步驟2和3:
步驟2中,每隻螞蟻都要作出選擇,怎樣選擇呢?
selection過程用一個簡單的函式實現:
螞蟻選擇某條路線的機率=該路線上的資訊素÷所有可選擇路線的資訊素之和
假設螞蟻在i點,p(i,j)表示下一次到達j點的機率,而τ(i,j)表示ij兩點間的資訊素,則:
p(i,j)=τ(i,j)/∑τ(i)
(如果所有可選路線的資訊素之和∑τ(i)=0,即前面還沒有螞蟻來過,機率就是一個[0,1]上的隨機值,即隨機選擇一條路線)
步驟3中,揮發和增強是演算法的關鍵所在(也就是如何數學定義資訊素的)
evaporation過程和reinforcement過程定義了一個揮發因子,是迭代次數k的一個函式
ρ(k)=1-lnk/ln(k+1)
最初設定每條路徑的資訊素τ(i,j,0)為相同的值
然後,第k+1次迭代時,資訊素的多少
對於沒有螞蟻經過的路線:τ(i,j,k+1)=(1-ρ(k))τ(i,j,k),顯然資訊素減少了
有螞蟻經過的路線:τ(i,j,k+1)=(1-ρ(k))τ(i,j,k)+ρ(k)/|W|,W為所有點的集合
為什麼各個函式要如此定義,這個問題很難解釋清楚,這也是演算法的精妙所在。如此定義資訊素的揮發和增強,以及路徑選擇,根據馬爾可夫過程(隨機過程之一)能夠推匯出,在迭代了足夠多次以後,演算法能夠收斂到最佳路徑。