✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
智能优化算法是一种常用的求解最优化问题的方法,包括遗传算法、粒子群优化算法、蚁群算法等等。这些算法具有不同的优缺点和适用范围,因此在实际应用中需要进行对比。
下面是一些常见的智能优化算法及其特点:
- 遗传算法(GA):通过模拟种群遗传过程来寻找最优解,具有全局搜索能力和收敛速度较快的特点。
- 粒子群算法(PSO):通过模拟粒子在解空间中的运动过程来寻找最优解,具有易于实现和求解速度快的特点。
- 蚁群算法(ACO):利用蚁群在食物与蚂蚁巢穴之间的搜索规律来寻找最优解,具有分布式搜索和适用于多目标优化等特点。
- 本文涵盖鲸鱼算法、麻雀算法、遗传算法、蝗虫算法、灰狼算法、改进蝗虫算法、改进灰狼算法、改进飞蛾算法、飞蛾算法、多元宇宙算法、北方苍鹰算法、粒子群算法、蛇群算法、正弦算法等
为了比较这些算法的性能,通常需要进行不同函数测试。常用的测试函数包括Sphere、Rastrigin、Griewank、Ackley、Schwefel和Rosenbrock等。这些函数具有不同的复杂度和性质,可以用于评估不同算法的性能。另外加入了运行时间对比。
⛄ 部分代码
%_________________________________________________________________________________
% Equilibrium Optimizer source code (Developed in MATLAB R2015a)
%
% programming: Afshin Faramarzi & Seyedali Mirjalili
%
% e-Mail: afaramar@hawk.iit.edu, afshin.faramarzi@gmail.com
%
% paper:
% A. Faramarzi, M. Heidarinejad, B. Stephens, S. Mirjalili,
% Equilibrium optimizer: A novel optimization algorithm
% Knowledge-Based Systems
% DOI: https://doi.org/10.1016/j.knosys.2019.105190
%____________________________________________________________________________________
function [Ave,Sd,Convergence_curve]=EO(Particles_no,Max_iter,lb,ub,dim,fobj,Run_no)
for irun=1:Run_no
Ceq1=zeros(1,dim); Ceq1_fit=inf;
Ceq2=zeros(1,dim); Ceq2_fit=inf;
Ceq3=zeros(1,dim); Ceq3_fit=inf;
Ceq4=zeros(1,dim); Ceq4_fit=inf;
C=initialization(Particles_no,dim,ub,lb);
Iter=0; V=1;
a1=2;
a2=1;
GP=0.5;
while Iter<Max_iter
for i=1:size(C,1)
Flag4ub=C(i,:)>ub;
Flag4lb=C(i,:)<lb;
C(i,:)=(C(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
fitness(i)=fobj(C(i,:));
if fitness(i)<Ceq1_fit
Ceq1_fit=fitness(i); Ceq1=C(i,:);
elseif fitness(i)>Ceq1_fit && fitness(i)<Ceq2_fit
Ceq2_fit=fitness(i); Ceq2=C(i,:);
elseif fitness(i)>Ceq1_fit && fitness(i)>Ceq2_fit && fitness(i)<Ceq3_fit
Ceq3_fit=fitness(i); Ceq3=C(i,:);
elseif fitness(i)>Ceq1_fit && fitness(i)>Ceq2_fit && fitness(i)>Ceq3_fit && fitness(i)<Ceq4_fit
Ceq4_fit=fitness(i); Ceq4=C(i,:);
end
end
%---------------- Memory saving-------------------
if Iter==0
fit_old=fitness; C_old=C;
end
for i=1:Particles_no
if fit_old(i)<fitness(i)
fitness(i)=fit_old(i); C(i,:)=C_old(i,:);
end
end
C_old=C; fit_old=fitness;
%-------------------------------------------------
Ceq_ave=(Ceq1+Ceq2+Ceq3+Ceq4)/4; % averaged candidate
C_pool=[Ceq1; Ceq2; Ceq3; Ceq4; Ceq_ave]; % Equilibrium pool
t=(1-Iter/Max_iter)^(a2*Iter/Max_iter); % Eq (9)
for i=1:Particles_no
lambda=rand(1,dim); % lambda in Eq(11)
r=rand(1,dim); % r in Eq(11)
Ceq=C_pool(randi(size(C_pool,1)),:); % random selection of one candidate from the pool
F=a1*sign(r-0.5).*(exp(-lambda.*t)-1); % Eq(11)
r1=rand(); r2=rand(); % r1 and r2 in Eq(15)
GCP=0.5*r1*ones(1,dim)*(r2>=GP); % Eq(15)
G0=GCP.*(Ceq-lambda.*C(i,:)); % Eq(14)
G=G0.*F; % Eq(13)
C(i,:)=Ceq+(C(i,:)-Ceq).*F+(G./lambda*V).*(1-F); % Eq(16)
end
Iter=Iter+1;
Convergence_curve(Iter)=Ceq1_fit;
Ceqfit_run(irun)=Ceq1_fit;
end
% display(['Run no : ', num2str(irun)]);
% display(['The best solution obtained by EO is : ', num2str(Ceq1,10)]);
% display(['The best optimal value of the objective funciton found by EO is : ', num2str(Ceq1_fit,10)]);
% disp(sprintf('--------------------------------------'));
end
Ave=mean(Ceqfit_run);
Sd=std(Ceqfit_run);
end
%%
function [Cin,domain]=initialization(SearchAgents_no,dim,ub,lb)
Boundary_no= size(ub,2); % numnber of boundaries
% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1
Cin=rand(SearchAgents_no,dim).*(ub-lb)+lb;
domain=ones(1,dim)*(ub-lb);
end
% If each variable has a different lb and ub
if Boundary_no>1
for i=1:dim
ub_i=ub(i);
lb_i=lb(i);
Cin(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;
end
domain=ones(1,dim).*(ub-lb);
end
end
⛄ 运行结果