(源码)群体智能优化算法之正余弦优化算法(Sine Cosine Algorithm,SCA)

(源码)群体智能优化算法之正余弦优化算法(Sine Cosine Algorithm,SCA)
获取更多资讯,赶快关注上面的公众号吧!

正余弦优化算法(Sine Cosine Algorithm,SCA)

该算法是由澳大利亚的Mirjalili于2016年提出的一种基于种群的新型随机优化算法,SCA创建多个初始随机候选解,然后利用基于正弦和余弦函数的数学模型,使得这些解朝最优解方向或反向波动。算法源代码可以关注公众号后回复"正余弦"获取。

SCA

SCA本质上为基于种群的优化算法,而基于种群的优化算法的共同点是都包含两个阶段:探索和利用。探索阶段,算法以较大的概率随机搜索以充分探索搜索空间,而在利用阶段,随机概率逐渐下降。

SCA使用以下两个等式进行位置更新:
Xit+1=Xit+r1×sin(r2)×r3PitXit(1)X_{i}^{t+1}=X_{i}^{t}+r_{1} \times \sin \left(r_{2}\right) \times\left|r_{3} P_{i}^{t}-X_{i}^{t}\right|\tag{1}

Xit+1=Xit+r1×cos(r2)×r3PitXit(2)X_{i}^{t+1}=X_{i}^{t}+r_{1} \times \cos \left(r_{2}\right) \times\left|r_{3} P_{i}^{t}-X_{i}^{t}\right|\tag{2}

其中XitX_{i}^{t}为第tt次迭代中当前解在第ii个维度上的位置,r1r_1/r2r_2/r3r_3为随机数,PiP_{i}为第ii维终点的位置。

这两个等式通常按照如下的组合方式使用:
Xit+1={Xit+r1×sin(r2)×r3PitXit,r4<0.5Xit+r1×cos(r2)×r3PitXit,r40.5(3)X_{i}^{t+1}=\left\{\begin{array}{ll} X_{i}^{t}+r_{1} \times \sin \left(r_{2}\right) \times\left|r_{3} P_{i}^{t}-X_{i}^{t}\right|, & r_{4}<0.5 \\ X_{i}^{t}+r_{1} \times \cos \left(r_{2}\right) \times\left|r_{3} P_{i}^{t}-X_{i}^{t}\right|, & r_{4} \geq 0.5 \end{array}\right. \tag{3}

其中r4r_4为[0,1]之间的随机数。

可以看出,在SCA中主要涉及四个参数:r1r_1,r2r_2,r3r_3r4r_4。参数r1r_1为下一位置的所在区域(或移动方向),该区域既可以位于解和终点之间的空间内,也可以不在。参数r2r_2定义了朝向或背离终点的距离远近。参数r3[0,2]r_3\in[0,2]为终点引入了随机权重,以随机强调(r3>1r_3>1)或弱化(r3<1r_3<1)终点在距离计算时的作用。参数r4r_4用于以相等的概率在正弦和余弦之间进行切换。

(源码)群体智能优化算法之正余弦优化算法(Sine Cosine Algorithm,SCA)

等式(1)和(2)中正弦和余弦对下一位置的影响如图1所示,正弦和余弦的周期模式可以允许一个解在另一个解周围重新定位,从而保证利用两个解之间定义的空间,同时为了探索搜索空间,解应该能够搜索其对应终点之间之外的空间,而这可以通过改变正弦和余弦函数的取值范围来实现,如图2所示。

(源码)群体智能优化算法之正余弦优化算法(Sine Cosine Algorithm,SCA)

图3展示了改变正余弦的取值范围可以更新解的位置,该随机位置到底是在空间内还是空间外,是通过等式(3)中定义的r2[0,2π]r_2\in[0, 2\pi]来实现的。

(源码)群体智能优化算法之正余弦优化算法(Sine Cosine Algorithm,SCA)

为了平衡探索和利用,正弦和余弦的取值范围应该自适应地调整:
r1=ataT(4)r_{1}=a-t \frac{a}{T}\tag{4}

其中tt为当前迭代,TT为最大迭代次数,aa是一个常数。图4展示了当a=2a=2时取值范围递减的过程。

(源码)群体智能优化算法之正余弦优化算法(Sine Cosine Algorithm,SCA)

所以通过图3和图4可知,当取值范围在(1,2]和[-2,-1)范围内时,SCA算法在空间内进行探索,而当取值范围在[-1,1]之间时,SCA在空间内进行利用。

SCA算法的伪代码如下:

初始化初始解(XX)

Do

评估每个代理的目标函数

更新当前最优解(P=XP=X^*)

更新r1r_1,r2r_2,r3r_3r4r_4

更新代理的位置(式3)

While(tt<最大迭代次数)

Return全局最优解