群智能优化之果蝇算法
是的,今天要说的就是果蝇算法,“果蝇”就是你理解的那个果蝇,这是在2011年由Wen-Tsao Pan提出的有一种新型的群体智能优化算法。
1,引言:
演化式计算是一种共享名词,系指达尔文进化论的 ”适者生存,不适者淘汰”,以此观念来实际模拟自然界演化过程所建立的演算方式,例如早期Holland (1975) 教授的遗传算法(Genetic Algorithms)。然而,后进者开始将演化重心转移到动物的觅食行为与群体行为上,最早是以Dorigo (1997)教授所提出的蚁群算法(Ant Colony Algorithm) ,该算法
是藉由蚂蚁在行进时,会释放出身体的分泌物,所谓的费洛蒙而能找出最短路径,达成优化境界。其后最早被提出的演算,也就是Eberhart(1995)教授的粒子群算法(Particle Swarm Optimization)。此算法是仿真鸟群的觅食行为,藉由迭代搜寻目前离食物最近的鸟的周围区域,最后能接近食物,达到所研究问题的最佳解。这两种算法皆是藉由动物群体觅食行为而发展出来的,因此有学者称为群体智能或是群智能算法。而它们也都必须透过迭代的搜寻才能搜寻到最佳解,因此亦属于演化式计算的领域。不论如何,生物为求生存必定有其存活的本能与方法,这些方法也是许多学者努力研究的方向。2011年Wen-Tsao Pan从果蝇的觅食行为得到启发,因而提出果蝇优化算法(Fruit Fly Optimization Algorithm, FOA).
2,关于FOA的基本概念:
果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法。果蝇本身在感官知觉上优于其他物种,尤其在嗅觉与视觉上,如图1 所示。果蝇的嗅觉器官能很好地搜集漂浮在空气中的各种气味,甚至能嗅到40 公里以外的食物源。然后,飞近食物位置后亦可使用敏锐的视觉发现食物与同伴聚集的位置,并且往该方向飞去。
图1 果蝇的身体构造
依照果蝇搜寻食物的特性,将其归纳为几个必要的步骤与程序范例,以提供读者参考,读者可配合图二进行了解:
图2 果蝇群体迭代搜寻食物的示意图
其步骤为:
(1) 随机初始果蝇群体位置。
Init X_axis
Init Y_axis
(2) 附与果蝇个体利用嗅觉搜寻食物de随机方向与距离。
Xi= X_axis + Random Value
Yi= Y_axis + Random Value
(3) 由于无法得知食物位置,因此先估计与原点的距离(Dist),再计算
味道浓度判定值(S),此值为距离的倒数。
Disti=sqrt(X_i^2+Y_i^2 );
Si=1/Disti
(4) 味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)。
Smelli = Function(Si)
(5) 找出此果蝇群体的中味道浓度最高的果蝇(求极大值)
[bestSmell bestIndex] = max(Smell)
(6) 保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位置飞去。
Smellbest = bestSmell
X_axis = X(bestIndex)
Y_axis = Y(bestIndex)
(7) 进入迭代寻优,重复执行步骤2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则执行步骤6。
3,举例:解析果蝇优化算法求解极小值
以FOA 求得函数极小值,其函数为:
y = -5 + x*x
其极小值的解答为-5。随机初始化果蝇群体位置区间为[0,10],迭代的果蝇搜寻食物的随机飞行方向与距离区间为[-1,1]。经由100 次迭代搜寻极小值后,程序执行结果逐渐逼近该函数极值之解答。图2为迭代搜寻函数极值的解所绘制的曲线图,由上图可发现该曲线逐渐逼近函数极小值-5,而该群果蝇之坐标为(46.9049, 82.8723)。
图2 迭代求解极小值函数曲线和果蝇搜寻轨迹
3.1,详细说明如下:
(1) 随机初始果蝇群体位置。
X_axis=10*rand();
Y_axis=10*rand();
(2) 附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。
X(i)=X_axis+2*rand()-1;
Y(i)=Y_axis+2*rand()-1;
(3) 由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数。
D(i)=(X(i)^2+Y(i)^2)^0.5;
S(i)=1/D(i);
(4) 味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)。
Smell(i)=-5+S(i)^2;
(5) 找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。
[bestSmell bestindex]=min(Smell);
(6) 保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位
置飞去。
X_axis=X(bestindex);
Y_axis=Y(bestindex);
Smellbest=bestSmell;
(7) 进入迭代寻优,重复执行步骤2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则执行步骤6.,
3.2,完整代码如下(MATLAB):
%***清空运行环境。
clc
clear
%***随机初始果蝇群体位置。
X_axis=10*rand();
Y_axis=10*rand();
%***设置参数。
maxgen=100; %迭代次数
sizepop=20; %种群规模
%***果蝇寻优开始,利用嗅觉寻找食物。
for i=1:sizepop
%***附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。
X(i)=X_axis+2*rand()-1;
Y(i)=Y_axis+2*rand()-1;
%***由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算
味道浓度判定值(S),此值为距离之倒数。
D(i)=(X(i)^2+Y(i)^2)^0.5;
S(i)=1/D(i);
%***味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)
以求出该果蝇个体位置的味道浓度(Smelli)。
Smell(i)=-5+S(i)^2;
end
%***找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。
[bestSmell bestindex]=min(Smell);
%***保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位
置飞去。
X_axis=X(bestindex);
Y_axis=Y(bestindex);
Smellbest=bestSmell;
%***果蝇迭代寻优开始
for g=1:maxgen
%***附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。
for i=1:sizepop
X(i)=X_axis+2*rand()-1;
Y(i)=Y_axis+2*rand()-1;
%***由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算
味道浓度判定值(S),此值为距离之倒数。
D(i)=(X(i)^2+Y(i)^2)^0.5;
S(i)=1/D(i);
%***判定值(S)代入判定函数以求出该果蝇位置的味道浓度(Smelli)。
Smell(i)= -5+S(i)^2;
end
%***找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。
[bestSmell bestindex]=min(Smell);
%***判断味道浓度是否优于前一迭代味道浓度,若是则保留最佳味道
浓度值与x、y 坐标,此时果蝇群体利用视觉往该位置飞去。
if bestSmell<Smellbest
X_axis=X(bestindex);
Y_axis=Y(bestindex);
Smellbest=bestSmell;
end
%***每代最优Smell 值纪录到yy 数组中,并记录最优迭代坐标
yy(g)=Smellbest;
Xbest(g)=X_axis;
Ybest(g)=Y_axis;
end
%***绘制迭代味到浓度与果蝇飞行路径趋势图
figure(1)
plot(yy)
title('Optimization process','fontsize',12)
xlabel('Iteration Number','fontsize',12);
ylabel('Smell','fontsize',12);
figure(2)
plot(Xbest,Ybest,'b.');
title('Fruit fly flying route','fontsize',14)
xlabel('X-axis','fontsize',12);
ylabel('Y-axis','fontsize',12);
群智能优化之果蝇算法相关推荐
- 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...
前言 支持向量机 (Support Vector Machines,SVM) 有两个重要参数:一个是正则化系数(c),一个是核参数(g,高斯核函数).针对这两个参数的优化,在libsvm工具箱的基础上 ...
- 博士论文阅读_仿生群智能优化算法及在点云配准中的应用研究
1.应用领域 计算机视觉:高效的仿生群智能优化策略应用于解决复杂的三维点云配准问题. 概念: (1)点云:是一个数据集,数据集中的每个点代表一组X.Y.Z几何坐标和一个强度值,这个强度值根据物体表面反 ...
- 基于群智能的路径规划算法(三)------遗传算法
本系列文章主要记录学习基于群智能的路径规划算法过程中的一些关键知识点,并按照理解对其进行描述和进行相关思考. 主要学习资料是来自 小黎的Ally 的 <第2期课程-基于群智能的三维路 ...
- 基于群智能的路径规划算法(四)------人工蜂群算法
本系列文章主要记录学习基于群智能的路径规划算法过程中的一些关键知识点,并按照理解对其进行描述和进行相关思考. 主要学习资料是来自 小黎的Ally 的 <第2期课程-基于群智能的三维路 ...
- 群智能优化算法之鲸鱼算法 Whale Optimization Algorithm (WOA) matlab版代码
MATLAB版 源码及相关工具箱下载地址:http://www.alimirjalili.com/WOA.html 页面如下: The Whale Optimization Algorithm (WO ...
- 【Matlab】智能优化算法_蜻蜓优化算法DA
[Matlab]智能优化算法_蜻蜓优化算法DA 1.背景介绍 2.灵感 3.公式推导 3.1 勘探和开发操作 4.算法流程图 5.文件结构 6.伪代码 7.详细代码及注释 7.1 DA.m 7.2 d ...
- 【智能优化算法】鸡群算法 (Chicken Swarm Optimization, CSO),2014
前言 鸡群算法 (Chicken Swarm Optimization,CSO) 是一种新颖的仿生学算法,充分继承群智能优化特点,创新采用个体分类.协作优化,最大程度挖掘最优解,又能很好避免早熟现象. ...
- 群智能算法改进第四期-改进灰狼优化算法
1.写在前面 该系列为改进智能优化算法,欢迎私信一起交流问题,更多的改进算法可查看往期的推文.有问题或者需要其他建议的话,非常欢迎后台私信交流,共同进步,如若出现违反学术道德的情况与本博客以及作者无关 ...
- 蝙蝠算法c语言,一种新颖的群智能算法:飞蛾扑火优化算法
李志明+莫愿斌+张森 摘要 飞蛾扑火优化(MFO)算法是一种新颖的群智能优化算法,该算法的主要灵感来源于飞蛾在自然界中被称为横向定位的飞行方式.作为一种新提出的仿生群智能优化算法,分析了飞蛾扑火优化算 ...
最新文章
- CUDA统一内存分析
- 【深度学习】面向医学图像的病灶分割调研(二)
- 关闭uboot MMU 会导致android2.3 S5pv210 系统不稳定?!why
- 数据库(左、中、右)连接
- 说出来你可能不信,我用excel就能做一张高端的统计报表
- Restarting ..Terminated
- 同心向前,Google Play 十周年啦!
- 【大数据】什么是数据集成?(SeaTunnel 集成工具介绍)
- 【ElenmentUI el-date-picker日期选择器,结束时间不得早于开始时间,且只能选择距开始时间指定天数的日期】
- 微信小程序开通直播的条件
- 页面地址index.html,分析首页链接:/和/index.html
- css文本溢出时候,如何把多余的文字显示省略号
- Shell知识点(一)基本语法
- 【Matlab】Matlab图片清晰拷贝到论文中并去掉空白边距
- chrome浏览器关闭安全模式
- Java秒杀系统实战系列~JMeter压力测试重现秒杀场景中超卖等问题
- 维护【软件工程总结】
- 小程序wx.getLocation,wx.openLocation地图相关的问题
- 按键精灵脚本转换成c语言,问一个关于按键码转换的问题
- 初学 Android项目 {家庭理财通}