優化算法筆記(十八)灰狼算法

1. 灰狼算法簡介

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
  灰狼算法(Grey Wolf Algorithm)是受灰狼群體捕獵行為啟發而提出的算法。算法提出于2013年,仍是一個較新的算法。目前為止(2020)與之相關的論文也比較多,但多為算法的應用,應該仍有研究和改進的余地。
  灰狼算法中,每只灰狼的位置代表了解空間中的一個可行解。群體中,占據最好位置的三只灰狼為狼王及其左右護法(衛)。在捕獵過程中這三只狼將帶領著狼群蛇皮走位,抓捕獵物,直至找到獵物(最優解)。當然狼王不會一直是狼王,左右護法也是一樣,每一輪走位后,會根據位置的優劣重新選出新的狼王和左右護法。狼群中的每一只灰狼會向著(也可能背向)這三只位置最優的灰狼移動一定的距離,來決定這一步自己將如何走位。簡單來說,灰狼個體會向則群體中最優的三個個體移動

2. 算法流程

很明顯該算法的主角就是灰狼了。


  灰狼群在D維空間內有N個個體,其位置為
X=(x^1,x^2,...x^D) ,其適應度值為F(x) ,每只灰狼并沒有其他特殊的屬性,行為也較為簡單。
  原文描述了灰狼群的很多行為,如包圍獵物(Encircling prey)、搜尋獵物(Search for prey )、攻擊獵物(Attacking prey),但其核心行為只有一個,就是捕獵(Hunting)。其他的行為都是捕獵行為的組成部分,用來說明捕獵的流程以及參數對行為的影響。
  在這里,為了方便描述,根據算法的計算流程將其捕獵行為分為兩個步驟:
  1.觀察,即計算一只灰狼向著目標頭狼(頭狼及其左右)前進后的位置。
  2.行動,根據觀察所有的頭狼計算出的下一步的位置并移動到那里。

2.1觀察

設定目標灰狼為
X_p=(x_p^1,x_p^2,...x_p^D) ,當前灰狼的為X_i=(x_i^1,x_i^2,...x_i^D) ,則該灰狼向著目標灰狼移動后的位置 可以由一下公式計算得出:


  其中A為取值范圍-a到a的均勻隨機數,a為常數,初始值為2,并隨著算法迭代由2線性遞減至0。C為取值0或2的隨機數。
  從公式可以看出,經過移動后,灰狼i將移動到目標灰狼p的周圍,其方位由自身每一維度的大小及隨機數C決定,而其距離目標灰狼p的距離將由隨機數A決定。由A的定義可知隨著迭代次數增加,觀察后的灰狼位置將會離目標灰狼越來越近。

2.2行動

灰狼群體中位置最好的三只灰狼編號為1,2,3,那么當前的灰狼i通過觀察灰狼1、灰狼2和灰狼3,根據公式(1)得出的三個位置為Xi1,Xi2,Xi3。那么灰狼i將要移動到的位置可以根據以下供述計算得出:


  可以看出該灰狼的目標位置是通過觀察三只頭狼得到的三個目標位置的所圍成的區域的質心。(質心超出邊界時,取值為邊界值)。

灰狼算法的論文描述很多,但是其公式和流程都非常簡單,主要對其參數A和C的作用效果進行了詳細描述。
  C主要決定了新位置相對于目標灰狼的方位,而A則決定新位置向目標靠近還是遠離目標灰狼。當|A|>=1時,為遠離目標,表現出更強的全局搜索能力,|A|<1時靠近目標,表現出更強的局部搜索能力。

3. 實驗

適應度函數f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=0
實驗一:

問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
取值范圍 (-100,100)
實驗次數 10
最優值 2.6062775921213544E-22
最差值 5.17099440808296E-14
平均值 5.175029931249637E-15

看看這圖像和結果,效果好極了。每當我這么認為時,總會出現意想不到的轉折。
  修改一下最優解位置試一試,f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=90
實驗二f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=90

最優值 0.023179729319963736
最差值 0.42578156266405487
平均值 0.18248549905908668

其結果比上面的實驗差了不少,但我覺得這才是一個優化算法應有的搜索圖像。其結果看上去較差只是因為迭代次數較少,收斂不夠迅速,這既是優點也是缺點,收斂慢但是搜索更細致。
  仔細分析灰狼算法的流程,它并沒有向原點靠近的趨勢,那只能理解為算法群體總體上向著群體的中心移動。猜想:當初始化群體的中心恰好是正解時,算法的結果將會非常的好。
  下面使用f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=0,并將灰狼的初始位置限定在(50,100)的范圍內,看看實驗圖像是否和實驗二的圖像一致。

實驗三. f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=0,初始種群取值范圍為(50,100)

最優值 2.1606056479627276E-24
最差值 8.28885463444239E-18
平均值 1.5379045385036046E-18

這圖像和結果跟實驗一的不是一樣的嗎?這說明從實驗二中得出的猜想是錯誤的。


  從圖像中可以看出,雖然初始化時,群體集中在右下角,但隨著算法的迭代,群體將迅速擴散到整個解空間中,在逐漸的收斂到原點且收斂速度很快。故猜想:當最優解在原點附近時,灰狼算法將會得到非常好的結果
  下面將目標函數的解空間搬離原點,看看灰狼算法的效果
實驗四.f(x1,x2)=(x1-a)^2+(x2-b)^2,a=b=75,初始種群取值范圍為(50,100),解空間范圍同樣為(50,100)

問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
取值范圍 (50,100)
實驗次數 10
最優值 0.002612674971178293
最差值 0.5531163122132745
平均值 0.17749064798407285

從圖像和結果上看,都和實驗二非常相似,當解在解空間的中心時但不在原點時,算法的結果將差一些。
  為什么會這樣呢?從算法的流程上看,灰狼算法的各個行為都是關于頭狼對稱的,當最優解在原點且頭狼在附近時,公式(1)將變為如下:


  通過公式(2)計算其中心在原點附近很大(其數學期望為原點)。
  單獨看灰狼個體的移動過程沒有任何問題,但是總體上看則產生了微弱的向原點靠近的趨勢,所以當解在原點時,算法的結果會異常的好。
  個人認為這并沒有什么問題,只是在做對比試驗時應避免將待求函數的解放在原點即可。
  迭代過程中,由于A的值由2線性遞減至0,在算法的前半段A>1,個體將會進行全局搜索,而在后半段進行局部搜索,所以群體會在一開始時擴散到整個解空間,再慢慢聚攏到群體中心附近。
  從圖像中可以看出,灰狼算法是一個沒有“貪心”的算法,所有的個體都在不停的移動,這樣算法的全局搜索能力會更強,精度稍差。下面試著為3只頭狼添加“貪心算法”:即這三只頭狼在找到優于當前的位置時才進行移動。

實驗五. f(x_1,x2)=(x_1-a)^2+(x_2-b)^2,a=b=75,三只頭狼添加貪心算法。

問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
取值范圍 (50,100)
實驗次數 10
最優值 0.02060156741278336
最差值 0.27945550433647137
平均值 0.10352694023379161

從圖像可以看出中心的三個點移動的頻率要比其他點的移動頻率低。從結果上可以看出其結果相對穩定了不少,不過差距非常的小,幾乎可以認為是運氣好所導致。如果所有的個體都添加貪心算法呢?顯然,算法的全局搜索能力將進一步減弱,并且更容易向群體中心收斂,這并不是一個好的操作。

實驗六. f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=75,
在實驗五的基礎上為狼群添加一個統一的步長,即每只狼每次向著目標狼移動的距離不能大于其步長,將其最大步長設為1,看看效果。

問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
StepMax(最大步長) 1
取值范圍 (50,100)
實驗次數 10

從圖像可以看出,受到步長的約束每只狼的移動距離較小,在結束時還沒有收斂,其搜索能力較強但收斂速度過慢且極易陷入局部最優。現在將最大步長設置為10(1/10解空間范圍)使其搜索能力和收斂速度相對平衡,在看看效果。

最優值 1.7013036590205155E-4
最差值 0.21432062721204184
平均值 0.09147526762644856

從圖像可以看出,算法的收斂速度快了不少,但從結果可知,相較于實驗五,算法的提升并不太大。
  不過這個圖像有一種似曾相識的感覺,與螢火蟲算法(FireFly Algorithm)差不多,仔細對比這兩個算法可以發現,灰狼算法相當于螢火蟲算法的一個簡化。實驗六種對灰狼算法添加步長的修改,讓其離螢火蟲算法更近了一步。

實驗七. f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=75,
在實驗六的基礎上讓最大步長隨著迭代次數增加遞減。

問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
StepMax(最大步長) 20->0
取值范圍 (50,100)
實驗次數 10
最優值 5.15374332251629E-5
最差值 0.13904018569004928
平均值 0.04869044113468185

從實驗七的圖像可以看出,種群的收斂速度好像快了那么一點,結果也變好了不少。但是和改進后的螢火蟲算法相比仍然有一定的差距。
  灰狼算法在全局搜索和局部搜索上的平衡已經比較好了,嘗試過對其進行改進,但是修改使搜索能力更強時,對于局部最優的函數求解效果很差,反之結果的精度較低,總體而言修改后的算法與原算法相差無幾。

灰狼算法是根據灰狼群體的捕獵行動而提出的優化算法,其算法流程和步驟非常簡單,數學模型也非常的優美。灰狼算法由于沒有貪心算法,使得其有著較強的全局搜索能力同時參數A也控制了算法的局部搜索范圍,算法的全局搜索能力和局部搜索能力比較平衡。
從算法的優化圖像可以看出,灰狼算法和螢火蟲算法非常的相似。可以認為,灰狼算法是對螢火蟲算法的一種改進。螢火蟲算法向著由于自己的個體飛行,而灰狼算法則的條件更為苛刻,向著群體前三強前進,螢火蟲算法通過步長控制搜索范圍,而灰狼算法則直接定義搜索范圍參數A,并令A線性遞減。
灰狼算法的結構簡單,但也不容易改進,數次改進后只是改變了全局搜索能力和局部搜索能力的比例,綜合能力并沒有太大變化。
由于原點對于灰狼算法有著隱隱的吸引力,當測試函數目標值在原點時,其結果會異常的好。因此,灰狼算法的實際效果沒有論文中的那么好,但也不差,算是一個中規中矩的優化算法。
參考文獻
Mirjalili S , Mirjalili S M , Lewis A . Grey Wolf Optimizer[J]. Advances in Engineering Software, 2014, 69:46-61. 提取碼:wpff

以下指標純屬個人yy,僅供參考

指標 星數
復雜度 ★★☆☆☆☆☆☆☆☆
收斂速度 ★★★★★☆☆☆☆☆
全局搜索 ★★★★★☆☆☆☆☆
局部搜索 ★★★★★☆☆☆☆
優化性能 ★★★★★☆☆☆☆☆
跳出局部最優 ★★★☆☆☆☆☆☆☆
改進點 ★★☆☆☆☆☆☆☆☆

目錄
上一篇 優化算法筆記(十七)萬有引力算法
下一篇 優化算法筆記(十九)頭腦風暴算法

優化算法matlab實現(十八)灰狼算法matlab實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

推薦閱讀更多精彩內容