智能优化算法:水循环算法-附代码
摘要:水 循 环 算 法 (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}
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡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=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=1NCtsCtn∣Nstreams),n=1,2,...,Nsr(3)
完成上述过程后,即可进行汇流过程,汇流过程如图 1所示. 汇流过程中,溪流、河流和海洋的位置根据式(4)随机更新:
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−tmaxdmaxt(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代码
个人资料介绍