果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

这篇具有很好参考价值的文章主要介绍了果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 尊重他人劳动成果,请勿转载!

有问题可留言或私信,看到了都会回复解答!

其他算法请参考:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125730562?spm=1001.2014.3001.5502

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125826933?spm=1001.2014.3001.5502

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/115359297?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22115359297%22%2C%22source%22%3A%22xinzhi1992%22%7D

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/126761617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126761617%22%2C%22source%22%3A%22xinzhi1992%22%7D5、果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/127649424

果蝇优化算法的核心是利用果蝇搜索实物的机制来对问题进行寻优。果蝇根据气味来确定食物的位置,食物腐烂程度越高,气味越大,果蝇对其越敏感。果蝇的觅食行为如下图:

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

Fig1. 果蝇觅食行为示意图                                                         

1.果蝇位置初始化

每只果蝇位置随机产生公式如下:

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

2.果蝇通过气味寻找食物

刚开始,果蝇无法判断食物的位置,因此需先估算出个体与最初设立点之间的开始距离Dist,并计算出浓度Si。

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

每只果蝇位置处的浓度:

找出全局最优:

3、果蝇位置更新

果蝇优化算法的Matlab程序如下:

 
 
%pop——种群数量
%dim——问题维度
%ub——变量上界,[1,dim]矩阵
%lb——变量下界,[1,dim]矩阵
%fobj——适应度函数(指针)
%MaxIter——最大迭代次数
%Best_Pos——x的最佳值
%Best_Score——最优适应度值
clc;
clear all;
close all;
pop=50;
dim=2;
ub=[10,10];
lb=[-10,-10];
MaxIter=100;
fobj=@(x)fitness(x);%设置适应度函数
[Best_Pos,Best_Score,IterCurve]=FA(pop,dim,ub,lb,fobj,MaxIter);
%…………………………………………绘图…………………………………………
figure(1);
plot(IterCurve,'r-','linewidth',2);
grid on;
title('果蝇优化算法迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
%…………………………………… 结果显示……………………………………
disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数:',num2str(Best_Score)]);
 
 
%种群初始化函数
function [x,y]=initialization(pop,ub,lb,dim)
 x=zeros(pop,dim);
 y=zeros(pop,dim);
for i=1:pop
    for j=1:dim
        x(i,j)=(ub(j)-lb(j))*rand()+lb(j);
        y(i,j)=(ub(j)-lb(j))*rand()+lb(j);
    end
end
end
%越界调整函数
function x=BoundrayCheck(x,ub,lb,dim)
for i=1:size(x,1)
    for j=1:dim
        if x(i,j)>ub(j)
            x(i,j)=ub(j);
        end
        if x(i,j)<lb(j)
            x(i,j)=lb(j);
        end
    end
end
end
 
%适应度函数,可根据自身需要调整
function [Fitness]=fitness(x)
    Fitness=sum(x.^2);
end

%…………………………………………果蝇优化算法主体………………………………………
function [Best_Pos,Best_Score,IterCurve]=FA(pop,dim,ub,lb,fobj,MaxIter)
  [X_axis,Y_axis]=initialization(pop,ub,lb,dim);
  Best_Score=inf;
  X=zeros(pop,dim);
  Y=zeros(pop,dim);
  S=zeros(pop,dim);
  Dist=zeros(pop,dim);
  Smell=zeros(1,pop);
  IterCurve=zeros(1,MaxIter);
  for t=1:MaxIter
      for i=1:pop
          X(i,:)=X_axis(i,:)+2*rand(1,dim)-1;
          Y(i,:)=Y_axis(i,:)+2*rand(1,dim)-1;
          Dist(i,:)=(X(i,:).^2+Y(i,:).^2).^0.5;
          S(i,:)=1./Dist(i,:);
          S(i,:)=BoundrayCheck(S(i,:),ub,lb,dim);
          Smell(i)=fobj(S(i,:));
      end%结束i循环
      [BestSmell,BestIndex]=min(Smell);%寻找适应度最优值及对应的果蝇序列
      for i=1:pop
          X_axis(i,:)=X(BestIndex,:);
          Y_axis(i,:)=Y(BestIndex,:);
      end%结束i循环
      if BestSmell < Best_Score
          Best_Score =BestSmell;
          Best_Pos = S(BestIndex,:);
      end%结束if
      IterCurve(t) = Best_Score;
  end%结束t循环
end

运行结果:

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

 相关阅读:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)

5、果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)文章来源地址https://www.toymoban.com/news/detail-432344.html

到了这里,关于果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包