天天看點

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

先做一個聲明:文章是由我的個人公衆号中的推送直接複制粘貼而來,是以對智能優化算法感興趣的朋友,可關注我的個人公衆号:啟發式算法讨論。我會不定期在公衆号裡推送不同的智能優化算法,經典的,或者是近幾年提出的新型智能優化算法,并附帶MATLAB代碼。

這篇文章的公衆号連結在這裡:點一下

蛇優化(SO)算法

“這個算法我非常感興趣,就連圖檔都是那麼優美。但是也不得不事先說清楚,膽小者慎入,别到時吓得你在實驗室尖叫……然後又在那兒罵我,這就不太好了。因為,這個算法叫蛇優化算法……

初次看見這個算法是2022年年初,當時覺得文章的圖檔很美,一直印象很深,仔細學習後發現,這算法的性能還是很先進的,在求解許多複雜函數上,收斂性遠勝于其他算法……”

蛇優化(Snake Optimizer, SO)算法是2022年才提出的,受啟發于蛇的覓食和交配行為。這個算法本身不難,也比較容易實作,是一種值得推廣的先進算法。此外,這個算法本身就是才提出的,是以它的作者會将它與近幾年的state-of-the-art算法進行對比,是以SO算法具備優秀的收斂性能。它的原始參考文獻如下:

“Hashim F A, Hussien A G. Snake Optimizer: A novel meta-heuristic optimization algorithm[J]. Knowledge-Based Systems, 2022, 242: 108320.”

在講算法之前,先說一下這個期刊吧,KBS目前的IF是8.139,是中科院一區的TOP期刊,上面有很多關于智能優化算法的文章,是以大家可以關注下。并且,這個期刊對實驗的要求很高,是以這個期刊上的算法,其性能一般都是能夠得到保證的。非常不錯的一個期刊,強烈推薦閱讀。

先普及一點蛇的知識,友善了解算法的模型與設計。

蛇是爬行動物中的一種神奇生物。它們有無腿的細長身體,如圖1所示。此外,和所有的鱗目動物一樣,它們是冷血脊椎動物(變溫動物)。幾乎所有種類的蛇的頭骨都有許多關節,這使它們能夠吞下獵物,即使獵物比它們的頭還大。目前共發現蛇類3600種,隸屬520類,隸屬20科。蛇生活中最有趣的事情是它們獨特的交配行為。雌性蛇有許多繁殖特征(多次交配、季節性和繁殖方式)。雌性可以操縱基因型(配偶選擇和精子競争)和表現型(生理體溫調節和巢穴選擇)。

上圖上圖上圖!

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(a) 思考中的蛇 

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(b) 蛇之間的個體交鋒

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(c) 蛇在産卵

圖1 自然界中的蛇

(怎麼樣,這圖是不是很舒服?!美極了!)

雄性和雌性之間交配的發生受一些因素的支配。蛇在春末夏初這兩個溫度較低的寒冷地區交配,但交配過程不僅取決于溫度,還取決于食物的可獲得性。如果溫度低,食物可以獲得,雄性之間會互相争鬥以吸引雌性的注意。雌性可以決定是否交配。如果交配發生,雌性開始在巢穴或洞穴中産卵,一旦蛋生出來,它就離開。交配行為如圖2所示。上圖上圖!

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

圖2 蛇正在交配

(像不像麻花?一開始我就說了圖檔很優美……)

基于蛇的交配行為,作者就設計出了一種模仿蛇特殊交配行為的新型智能優化算法,也就是SO算法。對于每條蛇而言,如果在食物數量足夠,溫度很低的條件下,就會尋得最好的伴侶(也就是先有物質再說愛情!)。

01

靈感來源

蛇會在溫度較低且有食物時進行交配,否則蛇隻會尋找食物或吃掉現有的食物。根據這一資訊,作者認為搜尋過程有兩個階段:勘探(exploration)和開發(exploitation)。這是群智能優化中的兩個重要概念,我後面再和大家讨論。

勘探在這裡代表了環境因素影響,即寒冷的地方和食物,在這種情況下,蛇隻在它的環境中尋找食物(局部搜尋)。對于開發,這一階段包括許多過渡階段,以獲得更有效的全局搜尋。在有食物但溫度很高的情況下,蛇隻會專注于吃現有的食物。最後,如果食物充足而環境寒冷,這就會導緻交配過程的發生;交配過程有戰鬥模式或交配模式。在戰鬥模式中,每隻雄性會為了得到最好的雌性而戰鬥,而每隻雌性則會努力選擇最好的雄性(就好比為了某個女生,男生與男生進行決鬥吧)。在交配模式中,每一對之間的交配發生與食物的數量有關。如果交配過程發生在搜尋空間,雌性蛇有可能産卵,孵化出小蛇。

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

圖3 孵化出的小蛇

02

算法設計

 作者依據上述啟發,設計了SO算法,主要包括以下5個大的步驟:

2.1 種群初始化

初始化種群就是在搜尋空間内随機産生N個個體作為原始種群進行計算。具體操作是每個個體的每一維随機産生一個取值範圍以内的數。即:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(1)

其中,r是[0,1]之間的随機數,Xi是種群中的個體,而Xmin和Xmax分别為優化問題取值範圍的上下邊界。

2.2 将種群分為雌、雄兩個子種群

作者假設雄性個體的數量為種群的50%,雌性也為50%。這樣,種群就被分為兩組:雄性組和雌性組。用以下2個公式來劃分種群:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

  (2)

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(3)

其中,N為種群中的個體數,即種群規模;Nm為雄性個體數;Nf為雌性個體數。

2.3 評估每一組個體并确定溫度和食物量

在每組中找到最好的個體,得到最好的雄性fbest,m和最好的雌性fbest.f以及食物位置ffood。最好的雄性和雌性分别就是兩個子種群中的最優個體。溫度可以用下面的等式來定義:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (4)

其中,t為目前疊代次數,T為最大疊代次數。這樣設計就使得溫度是随着疊代而不斷變化的,并且溫度整體上是逐漸降低的,實作種群從全局搜尋到局部勘探的過渡。

作者又定義了食物數量Q,食物數量可以通過下面的等式得到:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(5)

其中,c1是常數,等于0.5。這是作者設定的一個值。(5)式的設計保證了蛇的食物數量越來越多,越來越充足,進而模拟了低溫且食物充足的環境,幫助蛇的交配和孵化。

2.4  勘探階段(沒有食物)

如果食物數量Q<門檻值Threshold(0.25),蛇通過選擇任意随機位置來搜尋食物,并更新它們的位置。對勘探階段的模拟,如下所述:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

   (6)

其中,Xi,m為第i隻雄性蛇的位置,Xrand,m為随機選擇的雄性蛇的位置,rand是0到1之間的随機數。Am為雄性蛇找到食物的能力,計算方法如下:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (7)

其中,frand,m為Xrand,m的适應度,而fi,m為Xi,m的适應度;c2為常數,取值為0.05。

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

    (8)

(這裡先說明一下,原始文章中的公式(8)是打錯了的,你們可以自己對照下)。其中,Xi,f為第i條雌性的位置,Xrand,f為随機選擇的雌性蛇的位置;rand是[0,1]範圍内的随機數;Af為雌性蛇尋找食物的能力,計算公式如下:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(9)

其中,frand,f是Xrand,f和的适應度,而fi,m為雌性蛇群中第i個個體的适應度。

2.5 開發階段(食物存在)

食物數量Q>門檻值Threshold的條件下:

(這個其實不難了解,就好比人。我們在食物有限的情況下,填飽肚子是最重要的,是以隻會在小範内搜尋,即勘探;當食物充足時,我們往往想尋找一些更美味的食物,進而擴大尋找的範圍,即開發)

如果溫度temperature>門檻值Threshold(0.6),(這裡也要注意下,這個門檻值和前面那個門檻值是兩碼事,我專門用不同的顔色區分了一下。此外,這裡的溫度是通過公式(4)計算出來時,是一種抽象的概念,并不代表實際的溫度),那麼此時環境的溫度處于熱狀态(hot)。蛇隻會尋找食物,位置更新公式如下:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(10)

其中,Xi,j為個體(雄性或雌性)蛇的位置,Xfood為最佳個體的位置,c3為常數,等于2。

如果溫度temperature<門檻值Threshold(0.6),那麼此時環境的溫度處于冷狀态(cold),蛇将處于戰鬥模式或交配模式:

a). 戰鬥模式

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(11)

其中,Xi,m為第i個雄性的位置;Xbest,f為雌蛇組中的最佳位置;rand是[0,1]範圍内的随機數;FM為雄性蛇的戰鬥能力。

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(12)

其中,Xi,f為第i個雌性的位置,Xbest,m為雄性群體中最優個體的位置,FF為雌性蛇的作戰能力。(原文章中的公式(12)也有問題,等号後面應該是t,而不是t+1)

FM和FF可分别由以下公式計算:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (13)

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (14)

其中,fbest,f為雌性蛇組最佳個體的适應度,而fbest,m為雄性蛇組最佳個體的适應度,fi為個體i的适應度。

b). 交配模式

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(15)

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (16)

其中,Xi,m為第i個雄性的位置;Xi,f為第i個雌性的位置;rand是[0,1]範圍内的随機數;Mm和Mf分别表示雄性和雌性的交配能力,由以下公式計算:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (17)

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

  (18)

其中,fi,m為第i個雄性個體的适應度;fi,f第i個雌性個體的适應度。如果蛋蛋被孵化,則選擇種群中最差的雄性和雌性個體進行替換:

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (19)

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 (20)

其中,Xworst,m為雄性蛇組中的最差個體;而Xworst,f為雌性蛇組中的最差個體。

自此,作者便完整地提出了SO算法。我們可以發現,SO算法是基于雙種群的。雙種群互相利用種群内和種群間的資訊進行搜尋,兼顧勘探和開發,最終實作種群的進化。

03

計算流程

為了讓大家更清晰SO算法的計算流程,這裡我用visio繪制了它的計算流程圖。雖然SO算法的計算公式較多,蛇在優化過程中存在多種行為,但其數學模型并不複雜,隻要把每個判斷下的操作理清楚就不難了。如圖4所示。

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

 圖4 SO算法的計算流程圖

04

實驗結果與分析

接下來我們來讨論下SO算法的性能,這裡主要是利用測試函數進行一下簡單的檢驗。在編碼實作這個算法時,種群規模N我設定的50,最大疊代次數T為1000,測試函數的次元為30,其他的參數值均按照原始參考文獻進行設定。

由于公衆号篇幅有限,這裡隻簡單讨論下。以Ackley、Zakharov和Rosenbrock基準函數為例,觀察算法的收斂效果。如圖5所示,分别繪制了SO算法在3種函數上的收斂曲線。

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(a) Ackley函數

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(b) Zakharov函數

蛇優化(SO)算法(含MATLAB代碼)01靈感來源02算法設計03計算流程 04實驗結果與分析05MATLAB代碼

(c) Rosenbrock函數

圖5 SO算法收斂曲線

可以看出,SO算法在這些多峰函數上的收斂性還是比較優越的。當然,圖中沒有其他對比算法,在沒有比較的情況下說它有效就顯得有點蒼白了。但就收斂曲線可以發現,SO算法在尋優過程中,能夠跳出局部最優,後期收斂迅速。觀察收斂曲線還可以看出,SO算法的缺點是在進化前期收斂速度非常緩慢,幾乎看不到收斂趨勢,進入進化的中後期才開始逐漸下降。是以,如果對SO算法感興趣的同學,這個就是一個突破口,想辦法提升它前期的收斂速度。

此外,由于是今年年初才提出的算法,它的理論體系還不完善,其全局收斂性沒有得到證明,在實際問題中的應用也較少。是以,如果對SO感興趣,還是有很多工作可以做的。

05

MATLAB代碼

公衆号:啟發式算法讨論

繼續閱讀