带认知因子的交叉鸽群算法-附代码
带认知因子的交叉鸽群算法
文章目录
摘要:鸽群优化算法在求解最优问题时易早熟收敛,陷入局部最优,因此本文提出了带认知因子的交叉鸽群算法.首先,将地图指南针算子和地标算子进行联合交叉运行;然后,在地图和指南针算子中引入了非线性递增的认知因子,并将其视为运动权值的三角函数;最后,在地标算子中,引入呈三角函数递增的压缩因子,增加算法的平滑性.
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(t−1)×g+rand×u×(Xg−Xi(t−1))(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(t−1)(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(t−1)+rand×w×(Xc(t)−Xi(t−1))(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(t−1)+Vi(r−1),1⩽t⩽TmcXi(t)=Xi(t−1)+rand×w×(Xc(t)−Xi(t−1)),1⩽t⩽Tl
两者独立运行, 评判标准比较单一, 如果其参 考标准陷入局部最优, 则整个鸽群会被引向局部最 优区域, 导致算法出现早熟收玫现象.而交叉鸽群 算法 (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(t−1)+Vi(t−1),1⩽t⩽TtmXi(t−1)+rand×w×(Xc(t)−Xi(t−1)),Ttm⩽t⩽TmcXi(t)=⎩
⎨
⎧Xi(t−1)+Vi(t−1),1⩽t⩽TtXi(t−1)+rand×w×(Xc(t)−Xi(t−1)),Tt⩽t⩽Tl
这样之前独立的两个算子运算中分别融合了 另一个运算规则, 每一部分都是两种寻优规则, 当 其中一个陷入局部最优时,另一种运算规则可以跳 出局部最优,这样两者互相牵制促进,使算法在全 局搜索和局部搜索中进行平衡, 避免过早地收敛.
3.实验结果
4.参考文献
[1]陶国娇,李智.带认知因子的交叉鸽群算法[J].四川大学学报(自然科学版),2018,55(02):295-300.
5.Matlab代码
6.python代码
相关文章
- 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
- 蓝桥杯-算法训练2 最大最小公倍数
- x264代码剖析(十一):核心算法之宏块分析函数x264_macroblock_analyse()
- java算法集训代码填空题练习1
- Java实现 蓝桥杯VIP 算法训练 会议中心
- Java实现 蓝桥杯VIP 算法训练 邮票
- Java实现 蓝桥杯VIP 算法训练 确定元音字母位置
- Java实现 蓝桥杯VIP 算法训练 校门外的树
- Java实现 蓝桥杯 算法提高 合并石子
- Java实现 蓝桥杯 算法训练 前缀表达式
- (算法)最长单词
- RSA算法原理(二)
- 算法 - 判定素数的四种方法(JavaScript)
- 【物流中心选址】智能优化算法在物流中心选址的应用(Matlab代码实现)
- 【风光不确定】基于多时间尺度滚动优化算法的主动配电网研究【IEEE33节点】(Matlab代码实现)
- 基于鲸鱼算法优化的lssvm回归预测-附代码
- 基于二进制粒子群算法的背包问题求解- 附代码
- 智能优化算法:混沌博弈优化算法-附代码
- 改进交叉算子的自适应人工蜂群黏菌算法-附代码
- 一种基于交叉选择的柯西反向鲸鱼优化算法 -附代码
- 一种改进的灰狼优化算法-附代码
- 基于变因子加权学习与邻代维度交叉策略的改进乌鸦算法 -附代码
- 关于KNN算法的新理解新运用
- 编程算法 - 数丑陋 代码(C)
- [转]算法与数据结构——入门总结与自学资料推荐
- 图像处理之霍夫变换(直线检測算法)
- Spark/Scala实现推荐系统中的相似度算法(欧几里得距离、皮尔逊相关系数、余弦相似度:附实现代码)
- 目标检测系列算法:YOLOv7代码复现