多策略融合的改进麻雀搜索算法-附代码

多策略融合的改进麻雀搜索算法


摘要:对麻雀搜索算法易陷入局部最优、收敛速度慢等不足,提出一种多策略融合的改进麻雀搜索算法.采用精英混沌反向学习策略生成初始种群,增强初始个体的质量和种群多样性,实现对更多优质搜索区域的勘探以提升算法的局部极值逃逸能力和收敛性能;结合鸡群算法的随机跟随策略优化麻雀搜索算法中跟随者的位置更新过程,平衡算法的局部开发性能和全局搜索能力;采用柯西-高斯变异策略提升算法的种群多样性保持能力和抗停滞能力。

1.麻雀搜索算法

基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958

2.改进麻雀算法

2.1 初始种群多样化

选用均匀性更好的立方混沌映射初始化麻雀种 群, 混沌算子 [ 13 ] [13] [13] 具有随机性和规律性的优点, 能够在 一定范围内对所有的状态不重复遍历, 公式如下:
− 1 < y i < 1 , y i ≠ 0 , i = 0 , 1 , ⋯ N x i = X l b + ( X u b − X l b ) × ( y i + 1 ) 2 \begin{aligned} &-1<y_i<1, y_i \neq 0, i=0,1, \cdots N \\ &x_i=X_{l b}+\frac{\left(X_{u b}-X_{l b}\right) \times\left(y_i+1\right)}{2} \end{aligned} 1<yi<1,yi=0,i=0,1,Nxi=Xlb+2(XubXlb)×(yi+1)
式 (4) 中, x i x_i xi 为映射后麻雀个体; X l b X_{l b} Xlb X u b X_{u b} Xub 分别 对应解空间中的下界和上界. 混沌立方映射初始化 麻雀种群的具体过程为: 随机在 [ − 1 , 1 ] [-1,1] [1,1] 内生成一个 d \mathrm{d} d 维向量作为初始个体, 然后代入式 (2) 对其每一维进 行迭代生成 N − 1 \mathrm{N}-1 N1 个新个体, 最后代入式 (4) 将立方映 射产生的变量值映射到麻雀个体上.

通过透镜成像反向学习方法 [ 14 ] { }^{[14]} [14] 计算透镜成像 反向解来扩大可选解的范围, 增加选取更优解的概 率, 从而实现对初始种群个体质量的提升. 设 x j x_j xj x j ∗ x_j^* xj 分别表示当前麻雀个体及其透镜成像反向后个 体,
x j ∗ = a j + b j 2 + a j + b j 2 k − x j k x_j^*=\frac{a_j+b_j}{2}+\frac{a_j+b_j}{2 k}-\frac{x_j}{k} xj=2aj+bj+2kaj+bjkxj
式 (5) 中, a j a_j aj b j b_j bj 分别表示当前种群第 j \mathrm{j} j 维中的 最小值和最大值, k \mathrm{k} k 为透镜的缩放系数.
精英混沌反向学习策略初始化麻雀种群的具 体过程为: 随机初始化个体数为 N \mathrm{N} N 的初始麻雀种群 X = [ x i 1 , ⋯   , x i d ] , i = 1 ⋯ N , x i d X=\left[x_{i 1}, \cdots, x_{i d}\right], i=1 \cdots N, x_{i d} X=[xi1,,xid],i=1N,xid 表示第 i \mathrm{i} i 只麻雀在 第 d \mathrm{d} d 维的位置; 将种群 X \mathrm{X} X 代入式 (4) 生成混沌种群 Y \mathrm{Y} Y, 同时将种群 X \mathrm{X} X 代入式 (5) 生成透镜成像反向种群 Z;将种群 Y \mathrm{Y} Y 和种群 Z \mathrm{Z} Z 内麻雀个体根据适应度值进行排 序, 选择前 N \mathrm{N} N 个较优个体构成精英混沌反向种群 P \mathrm{P} P; 种群 P \mathrm{P} P 与原麻雀种群 X \mathrm{X} X 根据个体适应度值排序选取 前 N \mathrm{N} N 个个体组成新的初始麻雀种群.
X ′ = [ x i 1 ′ , ⋯   , x i d ′ ] X^{\prime}=\left[x_{i 1}^{\prime}, \cdots, x_{i d}^{\prime}\right] X=[xi1,,xid]

2.2 跟随者位置更新的改进

标准 SSA 算法中的跟随者在向最优位置移动 时, 容易出现种群在短时间内迅速集聚的情况, 虽然 能够达到快速收玫的效果, 但种群的多样性骤降, 致 使算法陷入局部最优的概率大大增加. 鸡群优化算 法 [ 15 ] { }^{[15]} [15] 是一种具有优秀全局寻优能力的随机优化算 法, 其中的随机跟随策略是母鸡以一定概率向公鸡 靠笼, 既保证了收玫性, 又没有降低种群多样性, 能 够很好地兼顾局部开发和全局搜索. 母鸡的位置更 新公式如下:
X i , j t + 1 = X i , j t + S 1 rand ⁡ ( 0 , 1 ) ( X r , j t − X i , j t ) + S 2  rand  ( 0 , 1 ) ( X r , j t − X i , j t ) S 1 = exp ⁡ ( ( f i − f r ) / ( ∣ ( f i ) ∣ + ε ) ) S 2 = exp ⁡ ( f s − f i ) \begin{gathered} X_{i, j}^{t+1}=X_{i, j}^t+S_1 \operatorname{rand}(0,1)\left(X_{r, j}^t-X_{i, j}^t\right)+ \\ S_2 \text { rand }(0,1)\left(X_{r, j}^t-X_{i, j}^t\right) \\ S_1=\exp \left(\left(f_i-f_r\right) /\left(\left|\left(f_i\right)\right|+\varepsilon\right)\right) \\ S_2=\exp \left(f_s-f_i\right) \end{gathered} Xi,jt+1=Xi,jt+S1rand(0,1)(Xr,jtXi,jt)+S2 rand (0,1)(Xr,jtXi,jt)S1=exp((fifr)/((fi)+ε))S2=exp(fsfi)
式 (8) 中, r r r 表示母鸡配偶中任意第 r r r 只公鸡; 式 (9) 中 s \mathrm{s} s 表示鸡群内任意第 s \mathrm{s} s 只公鸡或母鸡, r ≠ s \mathrm{r} \neq \mathrm{s} r=s.
将随机跟随策略引入麻雀搜索算法中的跟随者 位置更新过程, 充分利用上一代个体的位置信息和 概率性变化. 改进后跟随者位置更新公式如下: x i , d t + 1 = { Q ⋅ exp ⁡ ( X worst  t − x i , d t i 2 ) ,  if  i > n / 2 X i , d t + S 3 rand ⁡ ( 0 , 1 ) ( x k , j t − x i , d t ) ,  if  i ≤ n / 2 x_{i, d}^{t+1}=\left\{\begin{array}{l}Q \cdot \exp \left(\frac{X_{\text {worst }}^t-x_{i, d}^t}{i^2}\right), \text { if } i>n / 2 \\ X_{i, d}^t+S_3 \operatorname{rand}(0,1)\left(x_{k, j}^t-x_{i, d}^t\right), \\ \text { if } i \leq n / 2\end{array}\right. xi,dt+1= Qexp(i2Xworst txi,dt), if i>n/2Xi,dt+S3rand(0,1)(xk,jtxi,dt), if in/2 式 (10) 中, S 3 = exp ⁡ ( f s − f i ) , f i S_3=\exp \left(f_s-f_i\right), f_i S3=exp(fsfi),fi 表示第 i \mathrm{i} i 只麻雀 的适应度值 k ∈ [ 1 , N ] \mathrm{k} \in[1, N] k[1,N], 且 k ≠ i \mathrm{k} \neq \mathrm{i} k=i.

2.3 引入柯西高斯变异策略

在基本 SSA 算法迭代的后期, 麻雀个体的快速 同化, 导致容易出现局部最优停滞的情况. 为了解决 这一问题, 采用柯西 -高斯变异策略[16], 选择当前适 应度最好的个体进行变异, 然后比较其变异前后的 位置, 选择较优的位置代入下一次迭代. 具体公式如 下:
U best  t = X best  t [ 1 + λ 1  cauchy  ( 0 , σ 2 ) + λ 2  Gauss  ( 0 , σ 2 ) ] σ = { 1 , f ( X best  ) < f ( X i ) exp ⁡ ( f ( X best  ) − f ( X i ) ∣ f ( X best  ) ∣ ) ,  otherwise  \begin{gathered} U_{\text {best }}^t=X_{\text {best }}^t\left[1+\lambda_1 \text { cauchy }\left(0, \sigma^2\right)+\right. \\ \left.\lambda_2 \text { Gauss }\left(0, \sigma^2\right)\right] \\ \sigma=\left\{\begin{array}{l} 1, f\left(X_{\text {best }}\right)<f\left(X_i\right) \\ \exp \left(\frac{f\left(X_{\text {best }}\right)-f\left(X_i\right)}{\left|f\left(X_{\text {best }}\right)\right|}\right), \text { otherwise } \end{array}\right. \end{gathered} Ubest t=Xbest t[1+λ1 cauchy (0,σ2)+λ2 Gauss (0,σ2)]σ={1,f(Xbest )<f(Xi)exp(f(Xbest )f(Xbest )f(Xi)), otherwise 
式 (11) 中, U best  t U_{\text {best }}^t Ubest t 表示最优个体变异后的位置; σ 2 \sigma^2 σ2表示柯西 - 高斯变异策略的标准差; cauchy ⁡ ( 0 , σ 2 ) \operatorname{cauchy}\left(0, \sigma^2\right) cauchy(0,σ2) 是 满足柯西分布的随机变量;Gauss ( 0 , σ 2 ) \left(0, \sigma^2\right) (0,σ2) 是满足高斯 分布的随机变量; λ 1 = 1 − t 2 / T max ⁡ 2 \lambda_1=1-t^2 / T_{\max }^2 λ1=1t2/Tmax2 λ 2 = t 2 / T max ⁡ 2 \lambda_2=t^2 / T_{\max }^2 λ2=t2/Tmax2 是随 迭代次数自适应调整的动态参数. 在寻优过程中, λ 1 \lambda_1 λ1 逐渐减小, λ 2 \lambda_2 λ2 逐渐增大, 使算法可以跳出当前停滞, 并协调其局部开发和全局探索的能力.

3.实验结果

请添加图片描述

4.参考文献

[1]付华,刘昊.多策略融合的改进麻雀搜索算法及其应用[J/OL].控制与决策:1-10[2021-09-09].https://doi.org/10.13195/j.kzyjc.2021.0582.

5.Matlab代码

6.python代码

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
柯西高斯变异算法是一种常用的优化算法,其主要思想是通过将个体间的差异向高斯分布的随机扰动转化,从而实现种群的更新和进化。MATLAB是一种常用的科学计算软件,可以方便地实现柯西高斯变异算法。 下面是一个简单的柯西高斯变异MATLAB代码示例: ```matlab function [x,fval]=cmaes(funfcn,x0,sigma,maxiter,tol) % 输入:funfcn目标函数句柄,x0初始解,sigma初始标准差,maxiter最大迭代次数,tol停止条件 % 输出:x最优解,fval最优解对应的目标函数值 D=length(x0); % 维数 xmean=x0'; % 初始化均值 ps=0; % 累计路径长度 pc=zeros(D,1); % 累计演化路径 C=eye(D); % 协方差矩阵 iter=1; % 迭代次数 while iter<=maxiter % 生成样本集 for k=1:lambda z(:,k)=randn(D,1); % 高斯分布随机数 y(:,k)=xmean+sigma*C*z(:,k); % 样本生成 f(k)=feval(funfcn,y(:,k)); % 计算目标函数值 end % 更新均值和协方差矩阵 [f,idx]=sort(f); % 排序 xmean=xmean+(y(:,idx(1))-xmean)/mu; % 更新均值 ps=(1-cs)*ps+sqrt(cs*(2-cs)*mueff)*(C*z(:,idx(1:mu))*w); % 更新演化路径长度 hsig=norm(ps)/sqrt(1-(1-cs)^(2*iter/lambda))/chiN<D+1.5; % 判断是否需要调整步长 pc=(1-cc)*pc+hsig*sqrt(cc*(2-cc)*mueff)*(xmean-xold)/sigma; % 更新演化路径 C=(1-c1-cmu)*C+c1*(pc*pc'+(1-hsig)*(cc*(2-cc)*C))+cmu*C*(z(:,idx(1:mu))*w)'*(z(:,idx(1:mu))*w); % 更新协方差矩阵 sigma=sigma*exp((norm(pc)/chiN-damps)/sqrt(D)); % 更新标准差 iter=iter+1; % 迭代次数加1 end x=xmean; % 最优解为均值向量 fval=feval(funfcn,x); % 计算最优解对应的目标函数值 end ``` 相关问题: 1. 什么是柯西高斯变异算法? 2. MATLAB中如何实现柯西高斯变异算法? 3. 柯西高斯变异算法有哪些应用场景?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值