天天看點

智能優化算法:鴿群優化算法-附代碼智能優化算法:鴿群優化算法-附代碼

智能優化算法:鴿群優化算法-附代碼

文章目錄

  • 智能優化算法:鴿群優化算法-附代碼
    • 1.算法原理
      • 1.1 指南針算子
      • 1.2 地标算子
    • 2.算法結果
    • 3.參考文獻
    • 4.Matlab代碼
    • 5.Python代碼

摘要:2014 年 段 海 濱 教 授 通 過 歸 納 總 結 , 提 出 鴿 群 算 法(Pigeon-inspired Optimization PIO),PIO 是模拟鴿子歸巢行為而設計出來的群智能優化算法。PIO 具有原理簡明的特點、需要調整參數極少、易于被實作。與其他算法比較有着計算相對簡單,魯棒性相對較強等明顯的優點。

1.算法原理

鴿子在距離目的地較遠時,是在地磁場和地标建築的幫助下到達目的地。影響鴿群歸巢的關鍵原因可分為 3 類,第一個原因是太陽,第二個原因是地球的磁場,第三個原因是地貌景觀,而鴿子在飛行的過程中,根據不同的情況會使用不同的巡航工具。首先通過地磁場來對一個大概的方向進行辨識,然後利用地貌景象對目前的方向實施修正,直到到達精确的目的地。是以 PIO 算法中鴿子歸巢有兩個基本部分組成:指南針算子和地标算子。當鴿子距離自己目的地較遠時是利用地磁場來辨識方向,當距離目的地比較近時就利用當地地标來進行導航。在 PIO 中地圖和指針算子模型的提出就是基于地磁場和太陽,而地标算子模型的提出是基于地标。

1.1 指南針算子

地圖模型是基于地磁場,我們用 x i x_i xi​ 和 v i v_i vi​來分别表示第 i i i隻鴿子的位置和速度。在二維空間裡面,鴿子的位置和鴿子的速度在每次疊代過程中進行更新。第 i i i隻鴿子的速度和鴿子的位置将分别用的公式(1)和公式(2)進行相應的疊代計算:

V i ( t ) = V i ( t − 1 ) ∗ e − R t + r a n d ∗ ( X g − X i ( t − 1 ) ) (1) V_i(t) = V_i(t-1)*e^{-Rt} + rand*(X_g - X_i(t-1))\tag{1} Vi​(t)=Vi​(t−1)∗e−Rt+rand∗(Xg​−Xi​(t−1))(1)

X i ( t ) = X i ( t − 1 ) + V i ( t ) (2) X_i(t) = X_i(t -1) + V_i(t) \tag{2} Xi​(t)=Xi​(t−1)+Vi​(t)(2)

第i 隻鴿子的速度是由它上一代的速度和目前鴿子最好位置和所在位置共同決定,其中 R 是地圖因子,rand 是一個随機數,t 為代數。而第i 隻鴿子的位置是由之前位置和目前速度決定。所有鴿子的飛行是通過地圖來保證的,進行比較可以得到鴿子最好位置,即 X g X_g Xg​,每一隻鴿子将根據公式(1)向擁有最好位

置的鴿子來進行方向的調整和飛行,而公式(2)則是進行位置的調整。

1.2 地标算子

地标模型根據鴿子利用地标來進行導航而建立。在利用地标導航時,距離目的地的位置比利用地圖導航的距離更近,如果鴿子對現在所處的位置地标不熟悉時,則在附近鴿子的帶領下進行飛行,當找到标志性建築物或者熟悉位置時,則根據經驗自由飛行。在地标模型中,在每一代中用 N p N_p Np​ 來記錄一半鴿子的個數, X c ( t ) X_c(t) Xc​(t) 為第t 代所有鴿子的中心位置,假如每一隻鴿子可以飛直線距離到達目的地,将有如下公式:

N p ( t ) = N p ( t − 1 ) 2 (3) Np(t) = \frac{Np(t-1)}{2} \tag{3} Np(t)=2Np(t−1)​(3)

X c ( t ) = ∑ X i ( t ) ∗ f i t n e s s ( X i ( t ) ) N p ∗ ∑ f i t n e s s ( X i ( t ) ) (4) X_c(t) = \frac{\sum X_i(t)*fitness(X_i(t))}{Np*\sum fitness(X_i(t))} \tag{4} Xc​(t)=Np∗∑fitness(Xi​(t))∑Xi​(t)∗fitness(Xi​(t))​(4)

X i ( t ) = X i ( t − 1 ) + r a n d ∗ ( X c ( t ) − X i ( t − 1 ) ) (5) X_i(t) = X_i(t-1) + rand*(X_c(t) - X_i(t -1))\tag{5} Xi​(t)=Xi​(t−1)+rand∗(Xc​(t)−Xi​(t−1))(5)

在公式中 f i t n e s s ( x ) fitness(x) fitness(x)是每隻鴿子的品質。

算法流程:

步驟 1:初始化 PIO 算法參數,如解空間的維數D ,種群規模PN ,地圖和指南針因子 R,兩算子疊代 N c 1 N_{c1} Nc1​ 和 N c 2 N_{c2} Nc2​ ,其中要求 N c 1 > N c 2 N_{c1}>N_{c2} Nc1​>Nc2​

步驟 2:設定每隻鴿子的随機速度和路徑。比較每隻鴿子的适應度值,找出目前最好的路徑。

步驟 3:首先,我們通過使用公式(1)和(2)更新每一個鴿子的速度和路徑。然後,比較所有鴿子的适應度值,并找到新的最佳路徑。

步驟 4:如果 NC>NC1,轉到下一個操作。否則,轉到步驟3。

步驟 5:所有的鴿子根據它們的适應度排名。一半适應度低的鴿子,将根據公式(3)減半。然後,根據方程(4)找到所有鴿子的中心,這個中心是理想的目的地。所有的鴿子将飛到目的地,根據方程(5)調整它們的飛行方向。下一步,存儲最佳的解決方案參數和最佳的成本值.

步驟 6:如果 NC>NC2max,停止操作,并輸出結果。如果不是,轉到步驟 5

2.算法結果

智能優化算法:鴿群優化算法-附代碼智能優化算法:鴿群優化算法-附代碼

3.參考文獻

[1]郭瑞. 鴿群優化算法及其應用研究[D].廣西民族大學,2017.

4.Matlab代碼

5.Python代碼

個人資料介紹