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è)體,其位置為
原文描述了灰狼群的很多行為,如包圍獵物(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)灰狼為
,當(dāng)前灰狼的為
,則該灰狼向著目標(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ù)。
實(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)解位置試一試,。
實(shí)驗(yàn)二:。

| 值 | |
|---|---|
| 最優(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ì)非常的好。
下面使用,并將灰狼的初始位置限定在(50,100)的范圍內(nèi),看看實(shí)驗(yàn)圖像是否和實(shí)驗(yàn)二的圖像一致。
實(shí)驗(yàn)三. ,初始種群取值范圍為(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)四.
| 值 | |
|---|---|
| 問(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)五. ,三只頭狼添加貪心算法。
| 值 | |
|---|---|
| 問(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)六. ,
在實(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)七. ,
在實(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)暴算法