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

1. 灰狼算法簡(jiǎn)介

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

2. 算法流程

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


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

2.1觀(guān)察

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


  其中A為取值范圍-a到a的均勻隨機(jī)數(shù),a為常數(shù),初始值為2,并隨著算法迭代由2線(xiàn)性遞減至0。C為取值0或2的隨機(jī)數(shù)。
  從公式可以看出,經(jīng)過(guò)移動(dòng)后,灰狼i將移動(dòng)到目標(biāo)灰狼p的周?chē)?,其方位由自身每一維度的大小及隨機(jī)數(shù)C決定,而其距離目標(biāo)灰狼p的距離將由隨機(jī)數(shù)A決定。由A的定義可知隨著迭代次數(shù)增加,觀(guān)察后的灰狼位置將會(huì)離目標(biāo)灰狼越來(lái)越近。

2.2行動(dòng)

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


  可以看出該灰狼的目標(biāo)位置是通過(guò)觀(guān)察三只頭狼得到的三個(gè)目標(biāo)位置的所圍成的區(qū)域的質(zhì)心。(質(zhì)心超出邊界時(shí),取值為邊界值)。

灰狼算法的論文描述很多,但是其公式和流程都非常簡(jiǎn)單,主要對(duì)其參數(shù)A和C的作用效果進(jìn)行了詳細(xì)描述。
  C主要決定了新位置相對(duì)于目標(biāo)灰狼的方位,而A則決定新位置向目標(biāo)靠近還是遠(yuǎn)離目標(biāo)灰狼。當(dāng)|A|>=1時(shí),為遠(yuǎn)離目標(biāo),表現(xiàn)出更強(qiáng)的全局搜索能力,|A|<1時(shí)靠近目標(biāo),表現(xiàn)出更強(qiáng)的局部搜索能力。

3. 實(shí)驗(yàn)

適應(yīng)度函數(shù)f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=0
實(shí)驗(yàn)一:

問(wèn)題維度(維度) 2
總?cè)簲?shù)量(種群數(shù)) 20
搜索次數(shù)(最大迭代次數(shù)) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
取值范圍 (-100,100)
實(shí)驗(yàn)次數(shù) 10
最優(yōu)值 2.6062775921213544E-22
最差值 5.17099440808296E-14
平均值 5.175029931249637E-15

看看這圖像和結(jié)果,效果好極了。每當(dāng)我這么認(rèn)為時(shí),總會(huì)出現(xiàn)意想不到的轉(zhuǎn)折。
  修改一下最優(yōu)解位置試一試,f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=90。
實(shí)驗(yàn)二f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=90

最優(yōu)值 0.023179729319963736
最差值 0.42578156266405487
平均值 0.18248549905908668

其結(jié)果比上面的實(shí)驗(yàn)差了不少,但我覺(jué)得這才是一個(gè)優(yōu)化算法應(yīng)有的搜索圖像。其結(jié)果看上去較差只是因?yàn)榈螖?shù)較少,收斂不夠迅速,這既是優(yōu)點(diǎn)也是缺點(diǎn),收斂慢但是搜索更細(xì)致。
  仔細(xì)分析灰狼算法的流程,它并沒(méi)有向原點(diǎn)靠近的趨勢(shì),那只能理解為算法群體總體上向著群體的中心移動(dòng)。猜想:當(dāng)初始化群體的中心恰好是正解時(shí),算法的結(jié)果將會(huì)非常的好。
  下面使用f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=0,并將灰狼的初始位置限定在(50,100)的范圍內(nèi),看看實(shí)驗(yàn)圖像是否和實(shí)驗(yàn)二的圖像一致。

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

最優(yōu)值 2.1606056479627276E-24
最差值 8.28885463444239E-18
平均值 1.5379045385036046E-18

這圖像和結(jié)果跟實(shí)驗(yàn)一的不是一樣的嗎?這說(shuō)明從實(shí)驗(yàn)二中得出的猜想是錯(cuò)誤的。


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

問(wèn)題維度(維度) 2
總?cè)簲?shù)量(種群數(shù)) 20
搜索次數(shù)(最大迭代次數(shù)) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
取值范圍 (50,100)
實(shí)驗(yàn)次數(shù) 10
最優(yōu)值 0.002612674971178293
最差值 0.5531163122132745
平均值 0.17749064798407285

從圖像和結(jié)果上看,都和實(shí)驗(yàn)二非常相似,當(dāng)解在解空間的中心時(shí)但不在原點(diǎn)時(shí),算法的結(jié)果將差一些。
  為什么會(huì)這樣呢?從算法的流程上看,灰狼算法的各個(gè)行為都是關(guān)于頭狼對(duì)稱(chēng)的,當(dāng)最優(yōu)解在原點(diǎn)且頭狼在附近時(shí),公式(1)將變?yōu)槿缦拢?br>


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

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

問(wèn)題維度(維度) 2
總?cè)簲?shù)量(種群數(shù)) 20
搜索次數(shù)(最大迭代次數(shù)) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
取值范圍 (50,100)
實(shí)驗(yàn)次數(shù) 10
最優(yōu)值 0.02060156741278336
最差值 0.27945550433647137
平均值 0.10352694023379161

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

實(shí)驗(yàn)六. f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=75,
在實(shí)驗(yàn)五的基礎(chǔ)上為狼群添加一個(gè)統(tǒng)一的步長(zhǎng),即每只狼每次向著目標(biāo)狼移動(dòng)的距離不能大于其步長(zhǎng),將其最大步長(zhǎng)設(shè)為1,看看效果。

問(wèn)題維度(維度) 2
總?cè)簲?shù)量(種群數(shù)) 20
搜索次數(shù)(最大迭代次數(shù)) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
StepMax(最大步長(zhǎng)) 1
取值范圍 (50,100)
實(shí)驗(yàn)次數(shù) 10

從圖像可以看出,受到步長(zhǎng)的約束每只狼的移動(dòng)距離較小,在結(jié)束時(shí)還沒(méi)有收斂,其搜索能力較強(qiáng)但收斂速度過(guò)慢且極易陷入局部最優(yōu)。現(xiàn)在將最大步長(zhǎng)設(shè)置為10(1/10解空間范圍)使其搜索能力和收斂速度相對(duì)平衡,在看看效果。

最優(yōu)值 1.7013036590205155E-4
最差值 0.21432062721204184
平均值 0.09147526762644856

從圖像可以看出,算法的收斂速度快了不少,但從結(jié)果可知,相較于實(shí)驗(yàn)五,算法的提升并不太大。
  不過(guò)這個(gè)圖像有一種似曾相識(shí)的感覺(jué),與螢火蟲(chóng)算法(FireFly Algorithm)差不多,仔細(xì)對(duì)比這兩個(gè)算法可以發(fā)現(xiàn),灰狼算法相當(dāng)于螢火蟲(chóng)算法的一個(gè)簡(jiǎn)化。實(shí)驗(yàn)六種對(duì)灰狼算法添加步長(zhǎng)的修改,讓其離螢火蟲(chóng)算法更近了一步。

實(shí)驗(yàn)七. f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=75,
在實(shí)驗(yàn)六的基礎(chǔ)上讓最大步長(zhǎng)隨著迭代次數(shù)增加遞減。

問(wèn)題維度(維度) 2
總?cè)簲?shù)量(種群數(shù)) 20
搜索次數(shù)(最大迭代次數(shù)) 100
A Rand(-a,a),a=2->0
C Rand{0,2}
StepMax(最大步長(zhǎng)) 20->0
取值范圍 (50,100)
實(shí)驗(yàn)次數(shù) 10
最優(yōu)值 5.15374332251629E-5
最差值 0.13904018569004928
平均值 0.04869044113468185

從實(shí)驗(yàn)七的圖像可以看出,種群的收斂速度好像快了那么一點(diǎn),結(jié)果也變好了不少。但是和改進(jìn)后的螢火蟲(chóng)算法相比仍然有一定的差距。
  灰狼算法在全局搜索和局部搜索上的平衡已經(jīng)比較好了,嘗試過(guò)對(duì)其進(jìn)行改進(jìn),但是修改使搜索能力更強(qiáng)時(shí),對(duì)于局部最優(yōu)的函數(shù)求解效果很差,反之結(jié)果的精度較低,總體而言修改后的算法與原算法相差無(wú)幾。

灰狼算法是根據(jù)灰狼群體的捕獵行動(dòng)而提出的優(yōu)化算法,其算法流程和步驟非常簡(jiǎn)單,數(shù)學(xué)模型也非常的優(yōu)美?;依撬惴ㄓ捎跊](méi)有貪心算法,使得其有著較強(qiáng)的全局搜索能力同時(shí)參數(shù)A也控制了算法的局部搜索范圍,算法的全局搜索能力和局部搜索能力比較平衡。
從算法的優(yōu)化圖像可以看出,灰狼算法和螢火蟲(chóng)算法非常的相似??梢哉J(rèn)為,灰狼算法是對(duì)螢火蟲(chóng)算法的一種改進(jìn)。螢火蟲(chóng)算法向著由于自己的個(gè)體飛行,而灰狼算法則的條件更為苛刻,向著群體前三強(qiáng)前進(jìn),螢火蟲(chóng)算法通過(guò)步長(zhǎng)控制搜索范圍,而灰狼算法則直接定義搜索范圍參數(shù)A,并令A(yù)線(xiàn)性遞減。
灰狼算法的結(jié)構(gòu)簡(jiǎn)單,但也不容易改進(jìn),數(shù)次改進(jìn)后只是改變了全局搜索能力和局部搜索能力的比例,綜合能力并沒(méi)有太大變化。
由于原點(diǎn)對(duì)于灰狼算法有著隱隱的吸引力,當(dāng)測(cè)試函數(shù)目標(biāo)值在原點(diǎn)時(shí),其結(jié)果會(huì)異常的好。因此,灰狼算法的實(shí)際效果沒(méi)有論文中的那么好,但也不差,算是一個(gè)中規(guī)中矩的優(yōu)化算法。
參考文獻(xiàn)
Mirjalili S , Mirjalili S M , Lewis A . Grey Wolf Optimizer[J]. Advances in Engineering Software, 2014, 69:46-61. 提取碼:wpff

以下指標(biāo)純屬個(gè)人yy,僅供參考

指標(biāo) 星數(shù)
復(fù)雜度 ★★☆☆☆☆☆☆☆☆
收斂速度 ★★★★★☆☆☆☆☆
全局搜索 ★★★★★☆☆☆☆☆
局部搜索 ★★★★★☆☆☆☆
優(yōu)化性能 ★★★★★☆☆☆☆☆
跳出局部最優(yōu) ★★★☆☆☆☆☆☆☆
改進(jìn)點(diǎn) ★★☆☆☆☆☆☆☆☆

目錄
上一篇 優(yōu)化算法筆記(十七)萬(wàn)有引力算法
下一篇 優(yōu)化算法筆記(十九)頭腦風(fēng)暴算法

優(yōu)化算法matlab實(shí)現(xiàn)(十八)灰狼算法matlab實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容