智能优化算法:鸟群算法-附代码
智能优化算法:鸟群算法-附代码
摘要:鸟群算法(Bird Swarm Algorithm,BSA)是由 Xian-Bing Meng 等人根据自然界鸟群觅食、警觉和迁移等生物行为于 2015 年提出的一种新型生物启发式算法。该算法具有分散搜索,保持种群多样性,避免陷入局部最优的特点。
1.算法原理
鸟群算法模仿的生物行为可简化为如下规则:
(1) 每一只鸟自由选择觅食或保持警觉行为。
(2) 若选择觅食,每一只鸟即时记录并更新其所经过的最佳觅食位置,同时将此信息分享至整个种群,并记录种群最佳觅食位置。
(3) 若保持警觉,每只鸟均试图飞往种群的中心,此行为受种群间的竞争影响,食物储备多的鸟比储备少的有更大的概率飞往中心。
(4) 鸟群会周期性地飞往另一区域。鸟群之间会分享所寻觅的食物信息,这一习性使得种群更有利地生存下去。种群中食物储备最多的称为食物生产者,储备最少的称为乞食者,其它鸟随机作为 2 者之一。当鸟群从一个区域飞往另一区域,各只鸟的身份将发生改变。
(5) 生产者积极寻找食物,乞食者随机跟随一位生产者寻找食物。
规则 (1) 可制定为一个随机决策,当等概率产生的 (0, 1) 之间随机数大于常数 P 时,鸟觅食,否则保持警觉。每一只鸟根据自己和种群的觅食经验寻找食物,规则 (2) 可由下式表示。
x
i
,
j
t
+
1
=
x
i
,
j
t
+
(
p
i
,
j
−
x
i
,
j
t
)
∗
C
∗
r
a
n
d
(
0
,
1
)
+
(
g
j
−
x
i
,
j
t
)
∗
S
∗
r
a
n
d
(
0
,
1
)
(1)
x_{i,j}^{t+1} =x_{i,j}^t +(p_{i,j}-x_{i,j}^t)*C*rand(0,1)+(g_j - x_{i,j}^t)*S*rand(0,1)\tag{1}
xi,jt+1=xi,jt+(pi,j−xi,jt)∗C∗rand(0,1)+(gj−xi,jt)∗S∗rand(0,1)(1)
式中:
x
i
,
j
t
x_{i,j}^t
xi,jt为鸟当前所在位置;
p
i
,
j
p_{i,j}
pi,j为第
i
i
i 只鸟所经过的最佳位置;为种群最佳位置;
C
,
S
C , S
C,S 为两个正常数,分别称为认知系数及社会进化系数。
对于规则 (3) ,鸟试图飞往种群的中心位置,这不可避免地会与其它鸟产生竞争,因此,每一只鸟不会直接飞到种群中心。这种行为可由下式表示。
x
i
,
j
t
+
1
=
x
i
,
j
t
+
A
1
(
m
e
a
n
j
−
x
i
,
j
t
)
∗
r
a
n
d
(
0
,
1
)
+
A
2
∗
(
p
k
,
j
−
x
i
,
j
t
)
∗
r
a
n
d
(
−
1
,
1
)
(2)
x_{i,j}^{t+1} =x_{i,j}^t + A_1(mean_j-x_{i,j}^t )*rand(0,1)+A_2*(p_{k,j}-x_{i,j}^t)*rand(-1,1)\tag{2}
xi,jt+1=xi,jt+A1(meanj−xi,jt)∗rand(0,1)+A2∗(pk,j−xi,jt)∗rand(−1,1)(2)
A 1 = a 1 ∗ e x p ( − p F i t i s u m p F i t + ε ∗ N ) (3) A_1=a_1*exp(-\frac{pFit_i}{sumpFit+\varepsilon}*N)\tag{3} A1=a1∗exp(−sumpFit+εpFiti∗N)(3)
A 2 = a 2 ∗ e x p ( ( p F i t i − p F i t k ∣ p F i t i − p F i t k ∣ + ε ) ∗ p F i t k ∗ N s u m p F i t + ε ) (4) A_2=a_2*exp((\frac{pFit_i-pFit_k}{|pFit_i-pFit_k| + \varepsilon})* \frac{pFit_k*N}{sumpFit+\varepsilon})\tag{4} A2=a2∗exp((∣pFiti−pFitk∣+εpFiti−pFitk)∗sumpFit+εpFitk∗N)(4)
式中: k k k 是 [1, N ] 之间的随机整数,且 k ≠ i k\neq i k=i ; N N N 为种群规模; a 1 , a 2 a_1,a_2 a1,a2是 [0,2] 之间的常数; i p F i t ipFit ipFit 为第 i i i 只鸟的适应度值; s u m F i t sumFit sumFit 为整个种群的适应度之和; ε \varepsilon ε用来避免零分割,是计算机里最小的常数; m e a n j mean_j meanj为种群的平均适应度值。
为逃避追捕或寻找食物,鸟群会定期飞往其他区域,设迁移周期为 FQ ,当到达另一区域后,它们会重新觅食。一些作为生产者的鸟开始寻找食物,其他鸟跟随生产者寻觅食物。生产者和乞食者可由规则 (4) 从种群中筛选,生产者和乞食者的行为可由下式描述:
x
i
,
j
t
+
1
=
x
i
,
j
t
+
x
i
,
j
t
∗
r
a
n
d
n
(
0
,
1
)
(5)
x_{i,j}^{t+1} =x_{i,j}^t + x_{i,j}^t*randn(0,1)\tag{5}
xi,jt+1=xi,jt+xi,jt∗randn(0,1)(5)
x i , j t + 1 = x i , j t + ( x k , j t − x i , j t ) ∗ F L ∗ r a n d ( 0 , 1 ) (6) x_{i,j}^{t+1} =x_{i,j}^t + (x_{k,j}^t - x_{i,j}^t)*FL*rand(0,1)\tag{6} xi,jt+1=xi,jt+(xk,jt−xi,jt)∗FL∗rand(0,1)(6)
式中: r a n d n ( 0 , 1 ) randn(0,1) randn(0,1) 代表产生服从期望值为 0 ,标准差为 1 的高斯分布的一个随机数; k ∈ [ 1 , N ] k\in[1,N] k∈[1,N],且 k ≠ i k\neq i k=i ; F L ( F L ∈ [ 0 , 1 ] ) FL(FL\in[0,1]) FL(FL∈[0,1]) 为乞食者随同生产者觅食的概率。
算法流程图如下:
2.算法结果
3.参考文献
[1] MENG X B, GAO X Z, LU L H. A new bio-inspiredoptimization algorithm: bird swarm algorithm[J]. Journal ofExperimental and Theoretical Artificial Intelligent, 2015.
[2]曾嶒,彭春华,王奎,张艳伟,张明瀚.基于鸟群算法的微电网多目标运行优化[J].电力系统保护与控制,2016,44(13):117-122.
4.Matlab代码
鸟群优化算法
算法相关应用
名称 | 说明或者参考文献 |
---|---|
鸟群优化的BP神经网络(预测) | https://blog.csdn.net/u011835903/article/details/112149776(原理一样,只是优化算法你是鸟群算法) |
鸟群优化的BP神经网络(分类) | https://blog.csdn.net/u011835903/article/details/112149394(原理一样,只是优化算法你是鸟群算法) |
基于鸟群算法优化的最大熵多阈值分割 | https://blog.csdn.net/u011835903/article/details/108203775(原理一样,只是优化算法你是鸟群算法) |
鸟群算法优化的otsu多阈值分割 | https://blog.csdn.net/u011835903/article/details/108019744(原理一样,只是优化算法你是鸟群算法) |
鸟群优化的PID参数优化 | https://blog.csdn.net/u011835903/article/details/109306387(原理一样,只是优化算法你是鸟群算法) |
个人资料介绍
相关文章
- java——加密、解密算法
- 较新颖的智能优化算法[通俗易懂]
- 递归算法时间复杂度分析[通俗易懂]
- 算法的时间复杂度和空间复杂度-总结[通俗易懂]
- 人工智能:智能优化算法
- 智能优化算法经验谈[通俗易懂]
- 各种智能优化算法比较与实现(matlab版)
- 软件测试中如何测试算法
- AI人脸识别/车辆识别/口罩识别智能分析网关烟火检测算法的配置及使用
- docker高级篇2-分布式存储之三种算法
- 多智能体强化学习算法【二】【MADDPG、QMIX、MAPPO】
- 2022新书《图神经网络》,崔鹏、裴健等领域大牛撰写,全面介绍GNN算法与应用
- 十大经典排序算法
- 快速排序算法详解
- BFS算法模板与练习
- 我们正在进入大模型认知智能时代,算法工程师将被取代
- 电梯到底是什么调度算法?每次都要等半天!
- NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等
- 算法-二叉树的镜像详解编程语言
- C++快速排序(递归)算法详解
- 宜远智能CEO吴博:医学影像的数据标注、算法方法与算力优化
- 缺失的白皮书:DPOS共识算法工作原理及鲁棒性根源分析
- Oracle求两表总数的算法探究(oracle两个表的总数)
- 使用递归算法求第30位数的值