zl程序教程

您现在的位置是:首页 >  后端

当前栏目

带认知因子的交叉鸽群算法-附代码

算法代码 交叉 认知 因子
2023-09-14 09:06:12 时间

带认知因子的交叉鸽群算法


摘要:鸽群优化算法在求解最优问题时易早熟收敛,陷入局部最优,因此本文提出了带认知因子的交叉鸽群算法.首先,将地图指南针算子和地标算子进行联合交叉运行;然后,在地图和指南针算子中引入了非线性递增的认知因子,并将其视为运动权值的三角函数;最后,在地标算子中,引入呈三角函数递增的压缩因子,增加算法的平滑性.

1.鸽群算法

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

2.改进鸽群优化算法

2.1 地图和指南针算子中的交流因子

该文提出了带认知因子的鸽群算法 (Pigeoninspired Optimization with Congnitive Factor A l − \mathrm{Al}^{-} Al gorithm, PIOC): 首先, 让运动权值随迭代次数增 加在一定范围内慢慢地非线性衰减,这种变化过程 与余弦函数在 [ 0 , π ] [0, \pi] [0,π] 范围内变化一致,因此该文选 用了余弦函数模仿运动权值的变化 [ 11 ] { }^{[11]} [11]; 然后, 在更 新公式中引入了一种信息认知因子, 它来调节全局 最优位置在整个的过程中影响权重, 即算法局部搜 索能力的在算法中的平衡. 为了使算法在前期有更 好的全局搜索能力, 后期有更好的局部搜索能力, 同时参考文献 [ 12 ] [12] [12] 的整体变化思想,认知因子被视 为运动权值的三角函数, 在运动权值随时间非线性 递减的过程中, 认知因子发生相应的递增变化, 进 而通过增强两者之间的相互作用来平衡算法的全 局探索和局部开发能力, 更好地引导粒子进行优化搜索变化. 整个过程既保证了在前期收敛速度和全 局搜索能力, 又在某种程度上保证了后期的局部搜 索能力, 避免了算法的早熟收玫. 因此可将式 (1) 改 为的更新公式如下.
V i ( t ) = V i ( t − 1 ) × g + rand ⁡ × u × ( X g − X i ( t − 1 ) ) (6) \begin{gathered} V_i(t)=V_i(t-1) \times g+\operatorname{rand} \times u \times \left(X_g-X_i(t-1)\right) \end{gathered}\tag{6} Vi(t)=Vi(t1)×g+rand×u×(XgXi(t1))(6)
其中
g = a + b × cos ⁡ ( t × π / T n x ) (7) g=a+b \times \cos \left(t \times \pi / T_{n x}\right) \tag{7} g=a+b×cos(t×π/Tnx)(7)

u = c + d × cos ⁡ ( g × π ) (8) \begin{aligned} &u=c+d \times \cos (g \times \pi) \end{aligned} \tag{8} u=c+d×cos(g×π)(8)
其中, g g g 表示运动权值, 表示对当前粒子的速度继 承的比例, 其值介于 0 到 1 之间; u u u 是认知因子, a a a, b , c , d b, c, d b,c,d 是常数; T m c T_{m c} Tmc 为地图和指南针算子中的最大 迭代次数.

2.2 地标算子中的压缩因子

标准鸽群算法在地标算子中, 每次迭代鸽群数量都衰减为上次迭代 时数量的二分之一, 鸽群数量过快地衰减, 在后期 由于种群数量过少, 导致算法的多样性缺失, 影响 算法的寻优性能, 因此本文采用文献 [ 8 ] [8] [8] 中用一个 常数来定义每次迭代中鸽群的数量. 将式 (3) 改为 下式.
N p ( t ) = n × N p ( t − 1 ) (9) N_p(t)=n \times N_p(t-1) \tag{9} Np(t)=n×Np(t1)(9)
其中, n n n 是介于 0 到 1 之间的常数.同样, 文献 [ 8 ] [8] [8] 在地标算子中引入一个压缩因 子 w w w 来对地标算子进行压缩, 增加路径的平滑性, 同时通过压缩因子的交流, 也可以增强算法的进行 全局搜索能力, 提高算法的寻优能力. 因此, 式 (5) 可用下式替代.
X i ( t ) = X i ( t − 1 ) + rand ⁡ × w × ( X c ( t ) − X i ( t − 1 ) ) (10) X_i(t)=X_i(t-1)+\operatorname{rand} \times w \times\left(X_c(t)-X_i(t-1)\right)\tag{10} Xi(t)=Xi(t1)+rand×w×(Xc(t)Xi(t1))(10)

w = e + f × cos ⁡ ( t × π / T l ) (11) \begin{aligned} &w=e+f \times \cos \left(t \times \pi / T_l\right) \end{aligned} \tag{11} w=e+f×cos(t×π/Tl)(11)
其中, e , f e, f e,f 是常数; T l T_l Tl 是地标算子最大迭代次数.

2.3 联合交叉运行

在地图和指南针算子中主要是以自身的运动权值和全局最优位置两者互相协作作为飞行的参考; 而地标算子中主要是以中心 鸽子的位置作为飞行的参考方向. 也就是说原始 算法是一个分段函数, 如下式.
{ X i ( t ) = X i ( t − 1 ) + V i ( r − 1 ) , 1 ⩽ t ⩽ T m c X i ( t ) = X i ( t − 1 ) + rand ⁡ × w × ( X c ( t ) − X i ( t − 1 ) ) , 1 ⩽ t ⩽ T l \left\{\begin{array}{l} X_i(t)=X_i(t-1)+V_i(r-1), \quad 1 \leqslant t \leqslant T_{m c} \\ X_i(t)=X_i(t-1)+\operatorname{rand} \times w \times\left(X_c(t)-\right. \\ \left.X_i(t-1)\right), 1 \leqslant t \leqslant T_l \end{array}\right. Xi(t)=Xi(t1)+Vi(r1),1tTmcXi(t)=Xi(t1)+rand×w×(Xc(t)Xi(t1)),1tTl
两者独立运行, 评判标准比较单一, 如果其参 考标准陷入局部最优, 则整个鸽群会被引向局部最 优区域, 导致算法出现早熟收玫现象.而交叉鸽群 算法 (Crossed Pigeon-inspired Optimization Algorithm, CPIO)就是将这两个阶 段的算子进行联合交叉运行: 地图和指南针算子 中, 在该阶段的后小半部分用地标算子的规则来进 行鸽群位置的更新; 在地标算子阶段中的前小半部 分用地图和指南针算子的标准来进行位置的更新. 可以将其理解为两个分段函数, 如下.
{ X i ( t ) = { X i ( t − 1 ) + V i ( t − 1 ) , 1 ⩽ t ⩽ T t m X i ( t − 1 ) + rand ⁡ × w × ( X c ( t ) − X i ( t − 1 ) ) , T t m ⩽ t ⩽ T m c X i ( t ) = { X i ( t − 1 ) + V i ( t − 1 ) , 1 ⩽ t ⩽ T t X i ( t − 1 ) + rand ⁡ × w × ( X c ( t ) − X i ( t − 1 ) ) , T t ⩽ t ⩽ T l \left\{\begin{array}{c} X_i(t)=\left\{\begin{array}{c} X_i(t-1)+V_i(t-1), 1 \leqslant t \leqslant T_{t m} \\ X_i(t-1)+\operatorname{rand} \times w \times\left(X_c(t)-\right. \\ \left.X_i(t-1)\right), T_{t m} \leqslant t \leqslant T_{m c} \end{array}\right. \\ X_i(t)=\left\{\begin{array}{c} X_i(t-1)+V_i(t-1), 1 \leqslant t \leqslant T_t \\ X_i(t-1)+\operatorname{rand} \times w \times\left(X_c(t)-\right. \\ \left.X_i(t-1)\right), T_t \leqslant t \leqslant T_l \end{array}\right. \end{array}\right. Xi(t)= Xi(t1)+Vi(t1),1tTtmXi(t1)+rand×w×(Xc(t)Xi(t1)),TtmtTmcXi(t)= Xi(t1)+Vi(t1),1tTtXi(t1)+rand×w×(Xc(t)Xi(t1)),TttTl
这样之前独立的两个算子运算中分别融合了 另一个运算规则, 每一部分都是两种寻优规则, 当 其中一个陷入局部最优时,另一种运算规则可以跳 出局部最优,这样两者互相牵制促进,使算法在全 局搜索和局部搜索中进行平衡, 避免过早地收敛.

3.实验结果

请添加图片描述

4.参考文献

[1]陶国娇,李智.带认知因子的交叉鸽群算法[J].四川大学学报(自然科学版),2018,55(02):295-300.

5.Matlab代码

6.python代码