第五彈——哈裡斯鷹優化算法

引言

首先非常感謝 @遠去的飛鷹 對上一期算法中存在的問題進行更正:

現已將“最個體”改正為“最優個體”。哈裡斯鷹算法(Harris Hawks Optimizer,HHO)是由Heidari、Mirjalili等人於2019年提出的一種元啟發式算法,不得不說Mirjalili教授是真滴厲害!哈裡斯之鷹主要生活在美國亞利桑那州南部地區,其之所以與眾不同,是因為它會與群體中的其他傢庭成員一起進行獨特的合作覓食活動,而其他種類的猛禽則通常獨自捕食獵物。正因如此,哈裡斯鷹獨特的群體捕食行為才非常適合被模擬成一種群智能優化過程。

圖1 哈裡斯鷹對獵物的突然襲擊

哈裡斯鷹優化算法

1.全局搜索階段

在自然界中,哈裡斯鷹會利用其犀利的雙眼偵查環境、追蹤獵物。但是,在茫茫的亞利桑那州南部地區,有時候日子並不好過。在沙漠地區,其常常需要花費幾個小時來等待,觀察,並追蹤獵物。因此,哈裡斯鷹的群體內部分散度很高,其個體隨機棲息在某些位置,並根據兩種策略探測獵物:

a.當q <0.5時,哈裡斯鷹會根據其它成員和獵物的位置進行棲息;

b.當q ≥0.5時,哈裡斯鷹會隨機棲息在種群活動范圍內的某顆樹上。

其中qr1、r2、r3、r4均為[0,1]內的隨機數,ublb為搜索空間上、下限;Xrand 為一隨機個體位置;Xrabbit 為獵物位置,Xave為種群內所有個體的平均位置。r3是一個比例系數,一旦r4的值接近1,就會進一步增加該策略的隨機性。類似於鯨魚優化算法,絕對值中的內容可看作兩個體間的相對距離;r1為隨機的比例系數,其為哈裡斯鷹的棲息提供多樣化趨勢並使其能夠探索不同區域的特征空間。

2.由全局搜索階段轉換至局部開發階段

哈裡斯鷹可以根據獵物的逃逸能量來進行不同狀態的轉換。在獵物的逃脫過程中,其逃逸能量E 將大大降低:

鑒於不同獵物間的逃逸能量存在差異,故原文令E0(逃逸能量初始值)在算法迭代過程中於[-1,1]內隨機變化。關於這個逃逸能量初始值,原文給瞭這樣的解釋:

當E0由0減小至-1時(E0<0),此時兔兔“身體越加疲乏”?其實可以理解為兔兔不斷逃跑耗費瞭很多能量,所以越來越虛;當E0由0增加至1時(E0>0),兔兔處於恢復能量階段。當|E |≥1時,哈裡斯鷹搜索不同的區域以進一步探索獵物的位置,此時對應全局搜索階段;當|E |<1時,哈裡斯鷹對相鄰的解進行局部勘探,故而對應局部開發階段。不知道為什麼,寫這篇文章時我總是會想到這個表情包:

原文給出瞭500次迭代條件下E 的兩條迭代曲線:

圖2 兩次迭代中E的迭代曲線

3.局部開發階段

在此階段中,哈裡斯鷹開始對獵物進行突襲。不幸的是,獵物經常先哈裡斯鷹一步逃脫。因此,根據獵物的逃逸行為和自身的追逐策略,哈裡斯鷹演變出瞭四種攻擊策略。

在說四種策略之前,要先提一下攻擊的前提。假設r 為兔兔逃脫概率,r <0.5時為成功逃脫,相反r ≥0.5為逃脫失敗。通常情況下,哈裡斯鷹會以強硬或輕柔的圍攻方式來捕獲獵物(一柔一剛,不得不佩服作者的想象力)。這圍攻方式意味著哈裡斯鷹將根據獵物的剩餘能量從不同方向輕柔或強硬地攻擊獵物。在實際情況下,哈裡斯鷹會越來越接近預期的獵物,並通過突襲而增加瞭合作殺死獵物的機會。一段時間後,獵物將損失越來越多的能量,這時哈裡斯鷹便加強圍攻過程,從而捕獲獵物。在這個過程中,逃逸能量E 的作用不言而喻。原文假設|E |≥0.5時,進行輕柔圍攻;當|E |<0.5時,進行強硬圍攻。

3.1輕柔圍攻

r ≥0.5且|E |≥0.5時,兔兔仍然有足夠的能量,此時哈裡斯鷹若是霸王硬上弓則勢必得不償失。因此,哈裡斯鷹在兔兔身邊不斷徘徊,磨其心智,使其疲憊,進而突襲:

其中J 為兔兔逃跑過程中的跳躍距離,J=2*(1-rand)。

3.2強硬圍攻

r ≥0.5且|E |<0.5時,兔兔非常疲憊,面對強敵唯以頭搶地爾。此時哈裡斯鷹直接霸王硬上弓:

圖3為該攻擊模式的模擬圖:

圖3 哈裡斯鷹的強硬圍攻模擬圖

3.3漸進式快速俯沖的輕柔圍攻

r <0.5且|E |>0.5時,兔兔有機會逃脫,且逃逸能量足夠。針對這種情況,哈裡斯鷹需要在進攻前形成一個漸進式快速俯沖的輕柔圍攻方式,具體通過以下策略實施:

此番更新後,若是適應度值沒有改善,則執行另一種策略:

其中D 為空間維度,S 是一個1×D 的隨機向量,即S=randn(1,D);LF (D)為Levy飛行函數:

其中u、v 為[0,1]內均勻分佈的隨機數, β=1.5。綜上所述,該圍攻方式可總結為:

由此可得漸進式快速俯沖的輕柔圍攻總體矢量示例圖:

圖4 漸進式快速俯沖的輕柔圍攻總體矢量示例圖(嘔這該死的水印。。。)

3.4漸進式快速俯沖的強硬包圍

r<0.5且|E |<0.5時,兔兔有機會逃逸,但逃逸能量不足,因此哈裡斯鷹在突襲前先形成一個強硬包圍圈,穩住場面,再縮小它們和獵物的平均距離。我認為之所以設置這樣一種情況是因為如果強攻,則搜索半徑迅速縮小,這反而幫助獵物節省能量從而趁機逃脫。不得不說哈裡斯鷹老司機啊,就是到手的肉也要保證萬無一失:

由此可得漸進式快速俯沖的強硬圍攻總體矢量示例圖:

圖5 漸進式快速俯沖的強硬圍攻總體矢量2D示例圖圖6 漸進式快速俯沖的強硬圍攻總體矢量3D示例圖

綜上所述,HHO算法的捕食策略簡圖及迭代偽代碼為:

圖7 哈裡斯鷹的捕食策略簡圖

性能測試

最近逛Mathwork時發現瞭有趣的桁架優化設計問題,這個模型簡直就和理論力學中學的一模一樣!隻不過理論力學求的是受力,而非重量優化。本次測試就對他開刀。

10桿桁架優化設計問題

該問題的主要目的是最大化的降低結構的整體重量。在計算中對許用應力和節點位移限值的各種組合的橫截面積使用離散值和連續值。圖8顯示瞭10根懸臂桁架的幾何形狀、支撐和負載條件:

圖8 10根懸臂桁架的分佈狀況

桁架構件的最大容許應力為±25千磅力/平方英寸,垂直和水平方向上的最大節點撓度為±2.0in。該材料的單位重量為0.1磅/立方英寸,彈性模量為10^7磅/平方英寸。註意有如下轉換:

離散變量狀態

顧名思義,該狀態下的參數由一組41個離散值構成:(1.62, 1.80, 1.99, 2.13, 2.38, 2.62, 2.88, 2.93, 3.09, 3.13, 3.38, 3.47, 3.55, 3.63, 3.84, 3.87, 3.88, 4.18, 4.22, 4.49, 4.59, 4.80, 4.97, 5.12, 5.74, 7.22, 7.97, 11.5, 13.5, 13.9, 14.2, 15.5, 16.0, 16.9, 18.8, 19.9, 22.0, 22.9, 26.5, 30.0, and 33.5 )。這就有點像窮舉法,隻是組合的問題,所以不太想做。原文給出瞭幾種對比結果:

可以看出每種算法所得參數組合均相同,隻不過成功率存在差異而已。

連續變量狀態

該狀態下每根桿的橫截面積均處於[0.1,35]平方英寸內,因此非常適合用算法去優化。本次測試選取GWO與HHO進行對比,種群規模設為30,最大迭代次數為500,運算10次後取參數平均值。下圖9為某次三種算法的迭代曲線:

圖9 三種算法針對10桿桁架問題的優化過程

為瞭更貼合原文數據,將種群規模改為10,最大迭代次數改為100,下圖10為修改後三種算法的迭代曲線:

圖10 三種算法針對10桿桁架問題的優化過程

從圖10中可以看到這個結果非常離譜。。。我們先看一下原文數據:

對於不同位置的桿,各算法的優化結果幾近相同,可是問題案例中對各參數僅做出瞭如下解釋:

這裡並沒有提到各桿質量在適應度函數中的權重比,但是從數據中總是感覺有權重這麼一回事,所以還有待研究。

總結

總的來說HHO算法對哈裡斯鷹的捕食行為模擬的十分真實,雖然在桁架優化問題中表現不如GWO,但實際上在很多測試函數中HHO展現出的性能是非常強的,不得不說HHO算法給瞭我們很多啟發。若是對文章內容有疑問或是個人見解歡迎大傢提出

赞(0)