扇区搜索机制的果蝇优化算法-附代码
扇区搜索机制的果蝇优化算法
文章目录
摘要:针对传统果蝇算法 (FOA)搜索方向不均匀导致算法求解高维问题时收敛稳定性差和收敛精度低的问题,对果蝇算法的搜索机制进行研究,用扇区搜索机制替代传统搜索机制产生新型果蝇算法 (SS-FOA)。分析果蝇群搜索机制对果蝇飞行方向的影响,提出扇区搜索机制;提出再优化概念,将扇区搜索机制用于参考文献中优化算法再优化。
1.果蝇优化法
基础果蝇优化算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108344654
2. 扇区搜索机制
2.1 扇区搜索机制分析及设计
为了避免因果蝇群搜索不均匀所导致果蝇飞行方向单一的问题,提出一种均匀的果蝇群搜索机制。首先将以种群坐标为中心,搜索步长为半径的虚拟圆划分成多个扇区。再使每个果蝇都沿着属于自己的扇区飞行,每个果蝇的飞行步长都为 [ 0,L]的随机值,这样使果蝇飞向各个方向的概率相同。果蝇群只会向着味道浓度最大的方向前进,不会受到果蝇群分布不均匀的影响,从而提高算法的稳定性与收敛精度。给出果蝇群基于扇区搜索机制生成果蝇个体的具体步骤如下:
步骤1 根据种群规模Sizepop确定扇区角度,其中 t为扇区的角度间隔
t
=
0
:
2
π
Sizepop
−
4
:
2
π
(2)
t=0: \frac{2 \pi}{\operatorname{Sizepop}-4}: 2 \pi \tag{2}
t=0:Sizepop−42π:2π(2)
步骤2以种群坐标为中心,在每个扇区随机生成果蝇个体,扇区的划分使用了正弦函数和余弦函数
{
X
i
=
X
axis
+
L
sin
(
t
)
×
rand
(
)
Y
i
=
Y
a axis
+
L
cos
(
t
)
×
rand
(
)
(3)
\left\{\begin{array}{l} X_{i}=X \text { axis }+L \sin (t) \times \text { rand }() \\ Y_{i}=Y \text { a axis }+L \cos (t) \times \operatorname{rand}() \end{array}\right. \tag{3}
{Xi=X axis +Lsin(t)× rand ()Yi=Y a axis +Lcos(t)×rand()(3)
改进后果蝇群分布如图所示,可以看出改进后的果蝇群分布在二维平面呈现出以种群坐标为原点的近圆状,圆的半径为搜索步长L ,每个果蝇与种群坐标间的距离为[0,L]的随机值,方向都各自独立且沿着各自的扇区方向飞行,保证了果蝇群选择每个飞行方向的概率相同,有效减少迭代步长的不稳定性。
同时,为了减少算法的无效迭代,设置在
π
/
4
,
3
π
/
4
,
5
π
/
4
,
7
π
/
4
\pi/4,3\pi/4,5\pi/4,7\pi/4
π/4,3π/4,5π/4,7π/4这 4 个特殊扇区方向上不再使用传统的随机步长,而使用定值步长。即在4个扇区方向上放置4只果蝇个体,其搜索步长固定为L ,这样设置可以使果蝇群在搜索气味源位置固定且较远的目标时,会以最快速度接近明显的目标。
2.2 再优化概念
扇区搜索机制改进了传统果蝇算法的搜索机制,但是对传统算法的步长及寻优方式不会产生影响。因此扇区搜索机制最重要的特征是可与已改进的果蝇优化方法结合,用于果蝇优化算法的再优化。使用扇区搜索机制替换传统搜索机制能在已改进果蝇算法的基础上达到更高的收敛精度和稳定性。
2.3 SS-FOA算法
将扇区搜索机制与传统果蝇算法结合,提出新型算法SS-FOA 算法,其具体实现步骤如下:
步骤1 初始化算法参数:最大迭代次数 Maxgen,种群规模Sizepop,扇区角度 t ,初始化种群坐标[X_axis,Y_axis];
步骤2 根据扇区搜索机制产生果蝇个体,其中R 为[0,L]的随机值,扇区角度间隔 t由式(2)推出
{
X
i
=
X
_
a
x
i
s
+
R
sin
(
t
)
Y
i
=
Y
_
a
x
i
s
+
R
cos
(
t
)
,
i
<
Sizepop-4
.
(4)
\left\{\begin{array}{l} X_{i}=X_{\_axis }+R \sin (t)\\ Y_{i}=Y_{\_axis }+R \cos (t) \end{array}, i<\right.\text { Sizepop-4 }. \tag{4}
{Xi=X_axis+Rsin(t)Yi=Y_axis+Rcos(t),i< Sizepop-4 .(4)
产生固定方向的果蝇个体,其中 L为搜索半径
{
X
i
=
X
axis
+
L
sin
(
T
)
Y
i
=
Y
axis
+
L
cos
(
T
)
,
T
=
n
π
4
,
n
=
1
,
3
,
5
,
7
(5)
\left\{\begin{array}{l} X_{i}=X \text { axis }+L \sin (T) \\ Y_{i}=Y \text { axis }+L \cos (T) \end{array}, T=\frac{n \pi}{4}, n=1,3,5,7\right. \tag{5}
{Xi=X axis +Lsin(T)Yi=Y axis +Lcos(T),T=4nπ,n=1,3,5,7(5)
步骤3 定位果蝇个体坐标
[
X
i
,
Y
i
]
[X_i,Y_i]
[Xi,Yi] ,并根据式(6)求得个体味道浓度值 S
{
D
i
=
X
i
2
+
Y
i
2
S
i
=
1
/
D
i
(6)
\left\{\begin{array}{l} D_{i}=\sqrt{X_{i}^{2}+Y_{i}^{2}} \\ S_{i}=1 / D_{i} \end{array}\right. \tag{6}
{Di=Xi2+Yi2Si=1/Di(6)
步骤4 将味道浓度值
S
i
S_i
Si带入判定函数求出每个果蝇的适应度
S
m
e
l
l
i
Smell_i
Smelli
Smell
i
=
function
(
S
i
)
(7)
\text { Smell }_{i}=\text { function }\left(S_{i}\right) \tag{7}
Smell i= function (Si)(7)
步骤5 如果种群最优优于当前最优,则将种群最优个体的坐标作为下一次迭代的种群坐标,并记录其适应度
{
Smellbest
=
best Smell
X
axis
=
X
(
bestindex
)
Y
axis
=
Y
(
bestindex
)
(8)
\left\{\begin{array}{l} \text { Smellbest }=\text { best Smell } \\ X_{\text {axis }}=X(\text { bestindex }) \\ Y_{\text {axis }}=Y(\text { bestindex }) \end{array}\right. \tag{8}
⎩⎨⎧ Smellbest = best Smell Xaxis =X( bestindex )Yaxis =Y( bestindex )(8)
步骤6 重复执行步骤 2~ 步骤 2 ,直到达到终结条件。
3.实验结果
4.参考文献
[1]曹珍贯,李智威,余俊峰.扇区搜索机制的果蝇优化算法[J].计算机工程与设计,2019,40(06):1590-1594.
5.Matlab代码
6.python代码
相关文章
- 大流量下的 ElasticSearch 搜索演进
- Android BLE与终端通信(二)——Android Bluetooth基础科普以及搜索蓝牙设备显示列表
- 算法练习之将有序数组转换为二叉搜索树,平衡二叉树
- 数据结构与算法-2 最短路径 Dijkstra A*搜索 [MD]
- Python排序搜索基本算法之归并排序实例分析
- SAP UI 搜索分页技术
- ML之SVM:利用SVM算法(超参数组合进行单线程网格搜索+3fCrVa)对20类新闻文本数据集进行分类预测、评估
- 混合灰狼和布谷鸟搜索优化算法(Matlab完整代码实现)
- 机器学习(四十):随机搜索、网格搜索、遗传算法对机器学习模型寻优效果比较
- 智能优化算法:回溯搜索优化算法-附代码
- Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战
- 数据结构与算法问题 二叉搜索树
- 图的遍历BFS广度优先搜索
- 小样本学习,阿里做得比较早,但是效果未知——小样本有3类解决方法(算法维度):迁移学习、元学习(模型基础上学习模型)、度量学习(相似度衡量,也就是搜索思路),数据维度还有GAN
- 安全行业全景图——可搜索所有的安全厂商
- 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF
- ES 搜索结果expalain 可以类似数据库性能调优来看排序算法的选择
- 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
- 混合灰狼和布谷鸟搜索优化算法(Matlab完整代码实现)
- 数据结构和算法 十六、指数查找/跳转搜索/鞍背搜索