基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958
2.1.1 Tent 混沌序列
混沌作为自然界普遍存在的一种非线性现象,因混沌变量具有随机性、遍历性和规律性的特点,被很多学者应用于优化搜索问题,不仅能有效保持种群的多样性,而且有利于算法跳出局部最 优,改善全局搜索能力。常见的 Logistic 映射是一种典型的混沌系统,由图 1 可以看出,它在[0,0.05] 和[0.9,1]两个范围的取值概率较高,因此算法寻优速度受 Logistic 遍历不均匀性的影响,寻优效率会 降低。单梁等研究表明,Tent 映射的遍历均匀性和收敛速度均优于 Logistic 映射,并通过严格的数 学推理,证明了 Tent 映射可以作为产生优化算法的混沌序列。Tent 映射表达式如下:
z i + 1 = { 2 z i , 0 ≤ z ≤ 1 2 2 ( 1 − z i ) , 1 2 < z ≤ 1 (1) z_{i+1}=\left\{\begin{array}{c} 2 z_{i}, 0 \leq z \leq \frac{1}{2} \\ 2\left(1-z_{i}\right), \frac{1}{2}
Tent 映射通过贝努利移位变换后表示如下:
z i + 1 = ( 2 z i ) m o d 1 (2) z_{i+1}=(2z_i)mod1 \tag{2} zi+1=(2zi)mod1(2)
分析发现,Tent 混沌序列中存在小周期,并且存在不稳定周期点。为避免其落入小周期点或不稳 定周期点,同时不破坏混沌变量的三大特性,在原有的 Tent 映射表达式上引入随机变量 r a n d ( 0 , 1 ) / N T rand(0,1)/NT rand(0,1)/NT,改进后的表达式如下:
z i + 1 = { 2 z i + rand ( 0 , 1 ) × 1 N T , 0 ≤ z ≤ 1 2 2 ( 1 − z i ) + rand ( 0 , 1 ) × 1 N T , 1 2 < z ≤ 1 (3) z_{i+1}=\left\{\begin{array}{c} 2 z_{i}+\operatorname{rand}(0,1) \times \frac{1}{N T}, 0 \leq z \leq \frac{1}{2} \\ 2\left(1-z_{i}\right)+\operatorname{rand}(0,1) \times \frac{1}{N T}, \frac{1}{2}
贝努利变换后的表达式为:
z i + 1 = ( 2 z i ) m o d 1 + r a n d ( 0 , 1 ) × 1 / N T (4) z_{i+1}=(2z_i)mod1+rand(0,1)\times1/NT \tag{4} zi+1=(2zi)mod1+rand(0,1)×1/NT(4)
式中:NT 是混沌序列内的粒子个数,rand(0,1)是[0,1]之间的随机数。 根据 Tent 映射的特性,在可行域中产生混沌序列的步骤如下:
Step1 随机产生(0,1)内的初值 z 0 z_0 z0,记 i = 0 i=0 i=0.
Step2 利用式(4)进行迭代,产生 Z Z Z序列, i i i 自增 1。
Step3 如果迭代达到最大次数,程序运行停止,保存产生的 Z Z Z序列。
2.1.2 Tent 混沌扰动
算法引入混沌扰动,避免其陷入局部最优,提高了全局搜索能力和寻优精度。混沌扰动的步骤描 述如下:
Step1 应用式(4)产生混沌变量 Z d Z_d Zd。
Step2 将混沌变量载波到待求解问题的解空间
n e w X d = m i n d + ( m a x d − m i n in d ) ⋅ Z d (5) \mathrm{new} \boldsymbol{X}_{d}=\mathrm{min}_{d}+\left(\mathrm{max}_{d}-\mathrm{min} \text { in }_{d}\right) \cdot \boldsymbol{Z}_{d} \tag{5} newXd=mind+(maxd−min in d)⋅Zd(5)
Step3 按下式对个体进行混沌扰动
new X ′ = ( X ′ + new X ) / 2 (6) \operatorname{new} \boldsymbol{X}^{\prime}=\left(\boldsymbol{X}^{\prime}+\operatorname{new} \boldsymbol{X}\right) / 2 \tag{6} newX′=(X′+newX)/2(6)
式中: X ′ X' X′表示需要进行混沌扰动的个体, n e w X newX newX 为产生的混沌扰动量, n e w X ′ n ew X' newX′ 为混沌扰动后的个 体。
高斯变异来源于高斯分布,具体指在进行变异操作时,用符合均值为 μ \mu μ ,方差为 σ 2 \sigma ^2 σ2的正态分布 的一个随机数来替代原来的参数值。变异公式为:
mutation ( x ) = x ( 1 + N ( 0 , 1 ) ) (7) \text {mutation }(x)=x(1+N(0,1)) \tag{7} mutation (x)=x(1+N(0,1))(7)
式中: x x x 为原来的参数值; N ( 0 , 1 ) N(0,1) N(0,1)表示期望为 0;标准差为 1 的正态分布随机数; m u t a t i o n ( x ) mutation(x) mutation(x)为高斯变异后的数值。
CSSA 算法引入 Tent 混沌搜索和高斯变异,增加了种群多样性,提高了算法的搜索性能和开拓性 能,避免陷入局部最优,其具体实现步骤如下:
Step1. 初始化,包括种群规模 N N N,发现者个数 p N u m pNum pNum,侦察预警的麻雀个数 s N u m sNum sNum,目标函数的维数 D D D,初始值的上下界 l b lb lb、 u b ub ub,最大迭代次数 T T T。
Step2. 应用 2.2.1 节中的 Tent 混沌序列初始化种群,生成 N N N 个 D D D 维向量 Z i Z_i Zi,并将其各分量通过式 (5)载波到原问题空间变量的取值范围内。
Step3. 计算每只麻雀的适应度 f i f_i fi,选出当前最优适应度 f g f_g fg 和其所对应的位置 x b xb xb,以及当前最劣适应度 f w f_w fw和其对应的位置 x w x_w xw.
Step4. 选取适应度优的前 p N u m pNum pNum个麻雀作为发现者,剩余的作为加入者,更新发现者和加入者的位置。
Step5. 从麻雀种群中随机选取 s N u m sNum sNum 只麻雀进行侦察预警,并更新其位置。
Step6. 一次迭代完成后,重新计算每只麻雀的适应度值 f i f_i fi 和麻雀种群的平均适应度值 f a v g f_{avg} favg。
(1) 当 f i < f a v g f_i
(2)当 f i ≥ f a v g f_i\geq f_{avg} fi≥favg时表明出现“发散”趋势,按 2.1.2 节对个体 i 进行 Tent 混沌扰动,如果扰动后的 个体性能更优,则用扰动后的个体替代扰动前的个体,否则保持原个体不变。
Step7. 根据麻雀种群当前的状态,更新整个种群所经历的最优位置 x b x_b xb 和其适应度 f g f_g fg,以及最差位置 x w x_w xw和其适应度 f w f_w fw。
Step8. 判断算法运行是否达到最大迭代次数或者求解精度,若是,循环结束,输出寻优结果;否 则返回 Step4。
[1]吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-10[2020-11-16].https://doi.org/10.13700/j.bh.1001-5965.2020.0298.