个人主页:研学社的博客
欢迎来到本博客❤️❤️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
本文目录如下:
目录
1 概述
2 运行结果
3 参考文献
4 Matlab代码及文章讲解
文章来源:
本文提出了一种新的基于群的元启发式算法,称为金枪鱼群优化(TSO)。㼿TSO的主要灵感来源于金枪鱼群的合作觅食行为。㼿e工作模拟了金枪鱼群的两种觅食行为,包括螺旋觅食和抛物线觅食,以开发一种有效的元启发式算法。㼿通过在一组基准函数和几个实际工程问题上与其他元启发式方法进行比较来评估TSO的性能。使用灵敏度、可扩展性、鲁棒性和收敛性分析,并结合Wilcoxon秩和检验和Friedman检验。㼿仿真结果表明,与其他比较算法相比,TSO的性能更好。
部分代码:
%___________________________________________________________________%
% Tuna swarm optimization (TSO) %
% %
% Developed in MATLAB R2016b %
% %
% Author and programmer: Andi Tang %
% %
% Main paper: Tuna swarm optimization: A novel swarm-based %
% metaheuristic algorithm for global optimization %
% DOI: 10.1155/2021/9210050 %
% Computational Intelligence and Neuroscience%
% %
% %
%___________________________________________________________________%
function [Tuna1_fit,Tuna1,Convergence_curve]=TOA_final_version_submit(Particles_no,Max_iter,Low,Up,Dim,fobj)
Tuna1=zeros(1,Dim); Tuna1_fit=inf;
T=initialization(Particles_no,Dim,Up,Low);
Iter=0;
aa=0.7;
z=0.05;
while Iter
a1=aa+(1-aa)*C;
a2=(1-aa)-(1-aa)*C;
for i=1:size(T,1)
Flag4ub=T(i,:)>Up;
Flag4lb=T(i,:)
fitness(i)=fobj(T(i,:));
if fitness(i)
end
end
%---------------- Memory saving-------------------
if Iter==0
fit_old=fitness; C_old=T;
end
for i=1:Particles_no
if fit_old(i)
end
end
C_old=T; fit_old=fitness;
%-------------------------------------------------
t=(1-Iter/Max_iter)^(Iter/Max_iter);
if rand
else
if 0.5
Beta=exp(r1*exp(3*cos(pi*((Max_iter-Iter+1)/Max_iter))))*(cos(2*pi*r1));
if C>rand
T(1,:)=a1.*(Tuna1+Beta*abs(Tuna1-T(1,:)))+a2.*T(1,:); %Equation (8.3)
else
IndivRand=rand(1,Dim).*(Up-Low)+Low;
T(1,:)=a1.*(IndivRand+Beta*abs(IndivRand-T(i,:)))+a2.*T(1,:);%Equation (8.1)
end
else
TF = (rand>0.5)*2-1;
if 0.5>rand
T(1,:)=Tuna1+rand(1,Dim).*(Tuna1-T(1,:))+TF.*t^2.*(Tuna1-T(1,:));%Equation (9.1)
else
T(1,:) =TF.* t^2.*T(1,:);%Equation (9.2)
end
end
end
for i=2:Particles_no
if rand
T(i,:)= (Up-Low)*rand+Low;
else
if 0.5
Beta=exp(r1*exp(3*cos(pi*((Max_iter-Iter+1)/Max_iter))))*(cos(2*pi*r1));
if C>rand
T(i,:)=a1.*(Tuna1+Beta*abs(Tuna1-T(i,:)))+a2.*T(i-1,:);%Equation (8.4)
else
IndivRand=rand(1,Dim).*(Up-Low)+Low;
T(i,:)=a1.*(IndivRand+Beta*abs(IndivRand-T(i,:)))+a2.*T(i-1,:);%Equation (8.2)
end
else
TF = (rand>0.5)*2-1;
if 0.5>rand
T(i,:)=Tuna1+rand(1,Dim).*(Tuna1-T(i,:))+TF*t^2.*(Tuna1-T(i,:)); %Equation (9.1)
else
T(i,:) = TF*t^2.*T(i,:);%Equation (9.2)
end
end
end
end
Iter=Iter+1;
Convergence_curve(Iter)=Tuna1_fit;
end
部分理论来源于网络,如有侵权请联系删除。