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

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實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容