文章目录
一、理论基础
1、正弦余弦算法
请参考这里。
算法步骤如算法1所示。
算法1 基本SCA
2、改进的正弦余弦算法
(1)反向学习初始化
反向学习(opposition- based learning, OBL)是近年来智能计算领域出现的一种新技术,目前已在PSO、DE等群体智能优化算法中得到了成功的应用。因此,本文将反向学习策略嵌入到标准SCA中进行种群初始化,为改善算法性能奠定基础。
定义1 反向点(opposite point)。 假设在
[
l
,
u
]
[l,u]
[l,u]上存在数
x
x
x,则
x
x
x的反向点定义为
x
′
=
l
+
u
−
x
x'=l+u-x
x′=l+u−x。将反向点的定义扩展到
d
d
d维空间,设
p
=
(
x
1
,
x
2
,
⋯
,
x
d
)
p=(x_1,x_2,\cdots,x_d)
p=(x1,x2,⋯,xd)为
d
d
d维空间的一个点,其中
x
i
∈
[
l
i
,
u
i
]
,
i
=
1
,
2
,
⋯
,
d
x_i∈[l_i,u_i],i=1,2,\cdots,d
xi∈[li,ui],i=1,2,⋯,d,则其反向点定义为
p
′
=
(
x
1
′
,
x
2
′
,
⋯
,
x
d
′
)
p'=(x_1',x_2',\cdots,x_d')
p′=(x1′,x2′,⋯,xd′),其中
x
i
′
=
l
i
+
u
i
−
x
i
x_i'=l_i+u_i-x_i
xi′=li+ui−xi。
根据上述定义,利用反向学习策略产生初始群体的具体步骤如算法2所示。
算法2 基于反向学习的初始化方法
合并
{
X
(
N
)
∪
O
X
(
N
)
}
\{X(N)∪OX(N)\}
{X(N)∪OX(N)},从中选取适应度值最好的
N
N
N个个体作为初始种群。
(2)修改个体位置更新方程
为了提高标准SCA的收敛精度和加快收敛速度,受PSO算法启发,本文在个体位置更新方程式中引入惯性权重
w
w
w,得到改进的个体位置更新公式如下:
X
(
t
+
1
)
=
{
w
X
(
t
)
+
r
1
×
sin
r
2
×
∣
r
3
×
X
∗
−
X
(
t
)
∣
,
r
4
<
0.5
w
X
(
t
)
+
r
1
×
cos
r
2
×
∣
r
3
×
X
∗
−
X
(
t
)
∣
,
r
4
≥
0.5
(1)
X(t+1)=\begin{dcases}wX(t)+r_1×\sin r_2×|r_3×X^*-X(t)|,\quad r_4<0.5\\wX(t)+r_1×\cos r_2×|r_3×X^*-X(t)|,\quad r_4≥0.5\end{dcases}\tag{1}
X(t+1)={wX(t)+r1×sinr2×∣r3×X∗−X(t)∣,r4<0.5wX(t)+r1×cosr2×∣r3×X∗−X(t)∣,r4≥0.5(1)其中,
w
w
w为惯性权重。
较大的惯性权重
w
w
w有利于全局搜索,较小的惯性权重
w
w
w有利于局部搜索。因此,本文提出一种自适应变化的惯性权重策略,即惯性权重随迭代次数增加而线性减小。
w
(
t
)
=
w
max
−
(
w
max
−
w
min
)
×
t
t
max
(2)
w(t)=w_{\max}-(w_{\max}-w_{\min})×\frac{t}{t_{\max}}\tag{2}
w(t)=wmax−(wmax−wmin)×tmaxt(2)其中,
t
t
t为当前迭代次数;
t
max
t_{\max}
tmax为最大迭代次数;
w
max
w_{\max}
wmax和
w
min
w_{\min}
wmin分别为惯性权重的最大值和最小值。由式(2)可以清晰地看出,惯性权重
w
w
w随迭代次数的增加而递减,在进化前期
w
w
w选取较大的值利于全局搜索,在进化后期
w
w
w选取较小的值利于局部精确搜索,从而提高算法的收敛精度和加快算法的收敛速度。
(3)算法步骤
本文提出的ISCA流程如图1所示。
二、仿真实验与结果分析
1、测试函数
为了验证本文提出的ISCA的寻优性能,从文献中选取八个高维标准函数进行测试,其具体表达式及变量范围如表1所示,八个函数的理论最优值均为0。
2、实验结果
(1)和原始SCA对比
采用本文所提出的ISCA对八个标准测试函数进行求解,并与基本SCA进行比较。八个函数的维数均设置为D=30维。为了比较的公平性,ISCA和SCA的种群规模均设置为50,最大迭代次数设置为1000,即最大适应度函数计算次数为50000。另外,经过反复多次实验确定ISCA其他参数设置如下:惯性权重最大值
w
max
=
0.8
w_{\max}= 0.8
wmax=0.8,惯性权重最小值
w
min
=
0.1
w_{\min}=0.1
wmin=0.1。ISCA和SCA分别对八个测试函数单独运行30次,记录其最优值、最差值、平均值和标准差,结果如表2所示。所有仿真实验均在Intel® Core™ i7-7700、8GB内存、3.60GHz主频的计算机上实现,程序采用MATLAB 2018a语言实现。
上图为ISCA和SCA对八个函数的收敛曲线。
最优值、最差值、平均值和标准差显示如下:
函数:F1
SCA:最优值: 2.7822e-08,最差值:0.68443,平均值:0.022971,标准差:0.12493
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F2
SCA:最优值: 3.5802e-08,最差值:5.3033e-05,平均值:6.7198e-06,标准差:1.0976e-05
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F3
SCA:最优值: 32.3308,最差值:12280.1818,平均值:1979.5323,标准差:2491.4823
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F4
SCA:最优值: 0.38054,最差值:24.9364,平均值:11.3292,标准差:6.9102
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F5
SCA:最优值: 0,最差值:0,平均值:0,标准差:0
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F6
SCA:最优值: 7.6934e-08,最差值:141.0587,平均值:17.3916,标准差:33.1537
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F7
SCA:最优值: 1.3262e-05,最差值:20.29,平均值:14.0356,标准差:8.6221
ISCA:最优值: 8.8818e-16,最差值:8.8818e-16,平均值:8.8818e-16,标准差:0
函数:F8
SCA:最优值: 6.3289e-06,最差值:0.70051,平均值:0.16298,标准差:0.1883
ISCA:最优值: 0,最差值:0,平均值:0,标准差:0
从以上仿真对比结果可以清晰地看出,与基本SCA相比,ISCA 在八个测试函数上均能获得较高的收敛精度和较快的收敛速度。
(2)不同维度下的收敛情况
对ISCA在不同维度下进行测试,以F3、F4、F6、F7为例,分别在
D
=
100
,
500
,
10000
D=100,500,10000
D=100,500,10000的维度下进行测试,结果显示如下。
函数:F3
D=100:最优值: 0,最差值:0,平均值:0,标准差:0
D=500:最优值: 0,最差值:0,平均值:0,标准差:0
D=1000:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F4
D=100:最优值: 7.1418e-314,最差值:5.7055e-263,平均值:2.0728e-264,标准差:0
D=500:最优值: 3.9186e-229,最差值:1.4142e-202,平均值:4.7264e-204,标准差:0
D=1000:最优值: 4.362e-206,最差值:5.2109e-179,平均值:1.7394e-180,标准差:0
函数:F6
D=100:最优值: 0,最差值:0,平均值:0,标准差:0
D=500:最优值: 0,最差值:0,平均值:0,标准差:0
D=1000:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F7
D=100:最优值: 8.8818e-16,最差值:8.8818e-16,平均值:8.8818e-16,标准差:0
D=500:最优值: 8.8818e-16,最差值:8.8818e-16,平均值:8.8818e-16,标准差:0
D=1000:最优值: 8.8818e-16,最差值:8.8818e-16,平均值:8.8818e-16,标准差:0
从上图可以看出,虽然ISCA在不同高维问题上最终获得了相同的收敛精度,但其收敛速度稍有不同。从上述结果可以看出,ISCA在求解高维优化问题时显示出较强的寻优能力。
三、参考文献
[1] 徐松金, 龙文. 求解高维优化问题的改进正弦余弦算法[J]. 计算机应用研究, 2018, 35(9): 2574-2577.