天天看點

智能優化算法:水循環算法-附代碼智能優化算法:水循環算法-附代碼

智能優化算法:水循環算法-附代碼

文章目錄

  • 智能優化算法:水循環算法-附代碼
    • 1.算法原理
    • 2.算法結果
    • 3.參考文獻
    • 4.Matlab代碼

摘要:水 循 環 算 法 (water cycle alogrithm,WCA)是由Hadi Eskandar 等人受大自然水循環過程中溪流、江河、湖泊流向海洋的過程啟發而提出的一種全局優化算法.目前WCA已在工程優化等領域得到應用.

1.算法原理

WCA 是一種生物啟發的優化算法,它模拟自然界中的水循環過程,在種群中設定 3 類個體:海洋 Sea、河流River 及溪流 Stream. 海洋為目前種群的最優個體,河流為一定數量的僅次于海洋的個體,剩餘較差的個體即為溪流.

算法開始之前需要生成大小為 N p o p ∗ D N_{pop}*D Npop​∗D 的初始總群體,其中 N p o p N_{pop} Npop​是種群的總數量, D D D是設計變量的個數,是以這個随機矩陣為 :

[ S e a R i v e r 1 R i v e r 2 . . . . S t r e a m N s r + 1 S t r e a m N s r + 2 . . . S t r e a m N p o p ] = [ x 1 1 x 2 1 . . . x D 1 x 1 2 x 2 2 . . . x D 2 . . . . . . . . . . . . x 1 N p o p x 2 N p o p . . . x D N p o p ] (1) \left[\begin{matrix} Sea\\ River_1\\ River_2\\ ....\\ Stream_{N_{sr}+1}\\ Stream_{N_{sr}+2}\\ ... Stream_{N_{pop}} \end{matrix}\right]=\left[\begin{matrix} x_1^1&x_2^1&...&x_D^1\\ x_1^2&x_2^2&...&x_D^2\\ ...&...&...&...&\\ x_1^{N_{pop}}&x_2^{N_{pop}}&...&x_D^{N_{pop}}\\ \end{matrix}\right] \tag{1} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​SeaRiver1​River2​....StreamNsr​+1​StreamNsr​+2​...StreamNpop​​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​=⎣⎢⎢⎡​x11​x12​...x1Npop​​​x21​x22​...x2Npop​​​............​xD1​xD2​...xDNpop​​​​⎦⎥⎥⎤​(1)

其中, N s r N_{sr} Nsr​ 是海洋 S e a Sea Sea (數量為 1) 及河流 R i v e r River River 的數量之

和,這是在初始化的時候自行定義的,其餘流入海洋和河流的溪流 S t r e a m Stream Stream 的數量為 N s t r e a m N_{stream} Nstream​,其表達式為:

N s t r e a m = N p o p − N s r (2) N_{stream}=N_{pop}-N_{sr}\tag{2} Nstream​=Npop​−Nsr​(2)

緊接着,根據式(3)計算目前種群中流向海洋的溪流數量及流向對應河流的溪流數量:

N s r n = r o u n d ( ∣ C t n ∑ s = 1 N C t s ∣ N s t r e a m s ) , n = 1 , 2 , . . . , N s r (3) N_{sr_n}=round(|\frac{Ct_n}{\sum_{s=1}^NCt_s}|N_{streams}),n=1,2,...,N_{sr}\tag{3} Nsrn​​=round(∣∑s=1N​Cts​Ctn​​∣Nstreams​),n=1,2,...,Nsr​(3)

完成上述過程後,即可進行彙流過程,彙流過程如圖 1所示. 彙流過程中,溪流、河流和海洋的位置根據式(4)随機更新:

智能優化算法:水循環算法-附代碼智能優化算法:水循環算法-附代碼

圖1彙流過程

N s t r e a m t + 1 = X s t r e a m t + r a n d ∗ C ∗ ( X r i v e r t − X s t r e a m t ) N s t r e a m t + 1 = X s t r e a m t + r a n d ∗ C ∗ ( X s e a t − X s t r e a m t ) N r i v e r t + 1 = X r i v e r t + r a n d ∗ C ∗ ( X s e a t − X r i v e r t ) (4) N_{stream}^{t+1}=X_{stream}^t + rand*C*(X_{river}^t - X_{stream}^t)\\ N_{stream}^{t+1}=X_{stream}^t + rand*C*(X_{sea}^t - X_{stream}^t)\\ N_{river}^{t+1}=X_{river}^t + rand*C*(X_{sea}^t - X_{river}^t) \tag{4} Nstreamt+1​=Xstreamt​+rand∗C∗(Xrivert​−Xstreamt​)Nstreamt+1​=Xstreamt​+rand∗C∗(Xseat​−Xstreamt​)Nrivert+1​=Xrivert​+rand∗C∗(Xseat​−Xrivert​)(4)

其中, t t t 是疊代數; 1 ≤ C ≤ 2 1\leq C\leq2 1≤C≤2 , C C C 的最優值可以選為 2; r a n d rand rand是 0 和 1 之間均勻分布的随機數; X s t r e a m t X_{stream}^t Xstreamt​及 X s t r e a m t + 1 X_{stream}^{t+1} Xstreamt+1​分别表示第 t t t 次及第 t + 1 t+1 t+1 次疊代時溪流的位置; X r i v e r t X_{river}^t Xrivert​及 X r i v e r t + 1 X_{river}^{t+1} Xrivert+1​ 分别表示第 t t t 次及第 t + 1 t+1 t+1 次疊代時河流的位置; X s e a t X_{sea}^t Xseat​及 X s e a t + 1 X_{sea}^{t+1} Xseat+1​ 分别表示第 t t t 次及第 t + 1 t+1 t+1 次疊代時海洋的位置. 式(4)中分别為流向河流的溪流、流向海洋的溪流及流向海洋的河流的位置更新公式. 溪流在每次更新過後,計算出相應的适應度值,若該值優于與其相連的河流的适應度值,則将該溪流的位置與該河流的位置進行交換. 河流與海洋、溪流與海洋之間也有類似的交換. 在沒有滿足設定要求之前,海洋、河流和溪流的位置将根據相應的公式不斷地更新.

所有的尋優算法都要考慮收斂過快而陷入局部最優的問題,水循環算法引入蒸發過程來避免該問題的發生. 在水循環過程中,那些流速過慢還有無法達到大海的溪流和河流最終都會蒸發,蒸發過程的出現會引來新的降水. 是以,必須檢查河流及溪流是否足夠靠近海洋,若距離較遠則進行蒸發過程,蒸發過程的判斷條件為

∣ X s e a t − X r i v e r t ∣ < d m a x , t = 1 , 2 , . . . , N s r − 1 (5) |X_{sea}^t - X_{river}^t|<d_{max},t=1,2,...,N_{sr}-1 \tag{5} ∣Xseat​−Xrivert​∣<dmax​,t=1,2,...,Nsr​−1(5)

其中, d m a x d_{max} dmax​是接近零的小數. 蒸發過程結束後,應用降雨過程并在不同的位置形成新的溪流或河流(類似遺傳算法的突變過程). 較大的可 d m a x d_{max} dmax​以防止額外搜尋,但是會降低在海洋附近區域的搜尋強度. 是以, d m a x d_{max} dmax​的值應該自适應地降低:

d m a x t + 1 = d m a x t − d m a x t t m a x (6) d_{max}^{t+1}=d_{max}^t - \frac{d_{max}^t}{t_{max}}\tag{6} dmaxt+1​=dmaxt​−tmax​dmaxt​​(6)

其中, t m a x t_{max} tmax​ 為最大疊代數.

循環過程中的蒸發作用對河流和海洋的影響很小,是以在進行降雨過程之後影響的是溪流的位置. 降雨過程後溪流的新位置為 :

X s t r e a m n e w = L B + r a n d ∗ ( U B − L B ) (7) X_{stream}^{new}=LB+rand*(UB-LB)\tag{7} Xstreamnew​=LB+rand∗(UB−LB)(7)

其中,L B (lower bound)和 U B (upper bound)分别表示設計變量的下界和上界.

算法步驟:

(1) 初始化算法參數.

(2) 随機生成初始種群,形成初始溪流(雨滴)、河流和海洋.

(3)計算每個雨滴的适應度函數值.

(4) 利用式(3)确定雨滴流向河流和海洋的強度;利用式(4)更新溪流位置;更新河流位置.

(5) 若溪流給出的适應度值比其相連的河流好,則河流和溪流的位置對換;若河流給出的适應度值比其相連的海洋好,則海洋和河流的位置對換。

(6) 判斷 是 否滿 足 蒸 發 條件.若 滿 足 蒸 發 條件,利用式(7)進入降水過程,形成新的降水。

(7) 利用式(6)減小 d m a x d_{max} dmax​值;判斷算法是否滿足終止條件,若滿足,則轉到 (8);否則,重複執行(3) - (6)

(8) 輸出最優解。

2.算法結果

智能優化算法:水循環算法-附代碼智能優化算法:水循環算法-附代碼

3.參考文獻

[1] Eskandar H, Sadollah A, Bahreininejad A, et al. Water cycle algorithm - A novel metaheuristic optimization method for solving constrained engineering optimization problems[J]. Computers & Structures, 2012, 110: 151-166.

[2] 金愛娟,蘇俊豪,李少龍.基于水循環算法的開關磁阻電機性能優化[J/OL].資訊與控制:1-12[2020-09-12].https://doi.org/10.13976/j.cnki.xk.2020.2048.

4.Matlab代碼

個人資料介紹