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代码,可直接复制)