尊重他人劳动成果,请勿转载!
有问题可留言或私信,看到了都会回复解答!
其他算法请参考:
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.果蝇位置初始化
每只果蝇位置随机产生公式如下:
2.果蝇通过气味寻找食物
刚开始,果蝇无法判断食物的位置,因此需先估算出个体与最初设立点之间的开始距离Dist,并计算出浓度Si。
每只果蝇位置处的浓度:
找出全局最优:
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
运行结果:
相关阅读:
1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)
2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)
3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)
4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)文章来源:https://www.toymoban.com/news/detail-432344.html
5、果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)文章来源地址https://www.toymoban.com/news/detail-432344.html
到了这里,关于果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!