智能优化算法:水循环算法-附代码

智能优化算法:水循环算法-附代码


摘要:水 循 环 算 法 (water cycle alogrithm,WCA)是由Hadi Eskandar 等人受大自然水循环过程中溪流、江河、湖泊流向海洋的过程启发而提出的一种全局优化算法.目前WCA已在工程优化等领域得到应用.

1.算法原理

WCA 是一种生物启发的优化算法,它模拟自然界中的水循环过程,在种群中设定 3 类个体:海洋 Sea、河流River 及溪流 Stream. 海洋为当前种群的最优个体,河流为一定数量的仅次于海洋的个体,剩余较差的个体即为溪流.

算法开始之前需要生成大小为 N p o p ∗ D N_{pop}*D NpopD 的初始总群体,其中 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} SeaRiver1River2....StreamNsr+1StreamNsr+2...StreamNpop=x11x12...x1Npopx21x22...x2Npop............xD1xD2...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=NpopNsr(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=1NCtsCtnNstreams),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+randCXrivertXstreamt)Nstreamt+1=Xstreamt+randCXseatXstreamt)Nrivert+1=Xrivert+randCXseatXrivert)(4)

其中, t t t 是迭代数; 1 ≤ C ≤ 2 1\leq C\leq2 1C2 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} XseatXrivert<dmax,t=1,2,...,Nsr1(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=dmaxttmaxdmaxt(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(UBLB)(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代码

https://mianbaoduo.com/o/bread/aJmTkps=

猜你喜欢

转载自blog.csdn.net/u011835903/article/details/108549079
今日推荐