果蝇(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

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

Fig1. 果蝇觅食行为示意图                                                         

1.果蝇位置初始化

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

X(i)=X\_aixs+rand

Y(i)=Y\_aixs+rand

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

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

Dist^2=(X(i)^2+Y(i)^2)

S_i=1/Dist

每只果蝇位置处的浓度:Smell(i)=fit(S_i)

找出全局最优:[BestSmell,BestIndex]=min(smell(i))

3、果蝇位置更新

Best\_Score=BestSmell

X\_best=X(BestIndex)

Y\_best=Y(BestIndex)

果蝇优化算法的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

运行结果:

 相关阅读:

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

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

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

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

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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karwen2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值