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

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

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)_第1张图片

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)

运行结果:

果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)_第2张图片

 相关阅读:

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

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

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

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

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

你可能感兴趣的:(Matlab,matlab,算法,开发语言)