1 简介
果蝇算法基本原理果蝇具有强大的嗅觉和视觉,在觅食过程中,果蝇首先利用嗅觉搜索功能确定食物的大体位置,并向该位置迅速靠近.在到达食物附近时,果蝇个体通过其敏锐的视觉定位同伴和食物所处的位置,并飞至该位置 .通过对果蝇觅食过程的分析,得到果蝇算法的基本原理.
(1)嗅觉搜索阶段:果蝇通过嗅觉搜索到食物散发的气味浓度,确定食物的大体位置,在确定飞行的随机方向和步长后,向该位置靠近;
(2)视觉定位阶段:当接近食物时,果蝇会通过视觉搜索具有最大气味浓度的果蝇个体所处的位置,并飞至最优果蝇个体所处的位置
2 部分代码
%% FOA封装程序 clc; clear all close all %% 初始化参数 maxgen=100; %最大迭代次数 sizepop=50; dim=2; L=1; %% 初始化矩阵 X_best=zeros(maxgen,dim); Y_best=zeros(maxgen,dim); Smell_best=zeros(1,maxgen); %% 初始化果蝇坐标; X_axis=10*rand(1,dim); Y_axis=10*rand(1,dim); %% 生成果蝇群 [Si,X,Y]=gengrate_foa(X_axis,Y_axis,sizepop,dim,L); %% 寻找最优个体 [BestSmell,Index]=find_Schaffer(Si); SmellBest=BestSmell; %SmellBest为全局最优 %% 取出最优个体的两个维度的X,Y坐标 X_axis=X(Index,:); Y_axis=Y(Index,:); for g=1:maxgen %% 生成果蝇群 [Si,X,Y]=gengrate_foa(X_axis,Y_axis,sizepop,dim,L); %% 寻找最优个体 [BestSmell,Index]=find_Schaffer(Si); if BestSmell<SmellBest X_axis=X(Index,:); Y_axis=Y(Index,:); %更新极值 SmellBest=BestSmell; end Smell_best(g)=SmellBest; X_best(g,:)=X_axis; Y_best(g,:)=Y_axis; end %% 输出最终值 SmellBest %% 绘制图像 figure(1) plot(Smell_best,'b'); title('最佳个体适应度值变化趋势') xlabel('迭代次数') ylabel('适应度值') img =gcf; %获取当前画图的句柄 print(img, '-dpng', '-r600', './img.png') %即可得到对应格式和期望dpi的图像
3 仿真结果
4 参考文献
[1]吴小文, & 李擎. (2013). 果蝇算法和5种群智能算法的寻优性能研究. 火力与指挥控制, 38(004), 17-20,25.
5 MATLAB代码与数据下载地址
见博客主页