霜冰优化算法(Rime optimization algorithm)是Hang Su于2023年2月提出的,该算法受到雾霾冰生长机制的启发,通过模拟软霜冰粒子的运动,提出了一种用于算法搜索的霜冰搜索策略。
参考文献:Hang Su, Dong Zhao, Ali Asghar Heidari, Lei Liu, Xiaoqin Zhang, Majdi Mafarja, Huiling Chen,RIME: A physics-based optimization,Neurocomputing,ELSEVIER- 2023.
算法原理也很简单,代码简单易懂,适合改进。粒子更新核心公式如下:
其中:
伪代码为:
有关霜冰优化算法更详细的原理介绍,作者将原文文献打包在了压缩包里,大家可自行学习。下面依旧是采用CEC2005函数对霜冰算法进行测试,运行时作者将其与粒子群算法进行了对比,大家看一下效果
评价:只能说两个算法相差不大,RIME原理毕竟也很简单,改进的空间就会很大。
代码:
function [Best_rime_rate,Best_rime,Convergence_curve]=RIME(N,Max_iter,lb,ub,dim,fobj)
% initialize position
Best_rime=zeros(1,dim);
Best_rime_rate=inf;%change this to -inf for maximization problems
Rimepop=initialization(N,dim,ub,lb);%Initialize the set of random solutions
Lb=lb.*ones(1,dim);% lower boundary
Ub=ub.*ones(1,dim);% upper boundary
it=1;%Number of iterations
Convergence_curve=zeros(1,Max_iter);
Rime_rates=zeros(1,N);%Initialize the fitness value
newRime_rates=zeros(1,N);
W = 5;%Soft-rime parameters, discussed in subsection 4.3.1 of the paper
%Calculate the fitness value of the initial position
for i=1:N
Rime_rates(1,i)=fobj(Rimepop(i,:));%Calculate the fitness value for each search agent
%Make greedy selections
if Rime_rates(1,i)<Best_rime_rate
Best_rime_rate=Rime_rates(1,i);
Best_rime=Rimepop(i,:);
end
end
% Main loop
while it <= Max_iter
RimeFactor = (rand-0.5)*2*cos((pi*it/(Max_iter/10)))*(1-round(it*W/Max_iter)/W);%Parameters of Eq.(3),(4),(5)
E =(it/Max_iter)^0.5;%Eq.(6)
newRimepop = Rimepop;%Recording new populations
normalized_rime_rates=normr(Rime_rates);%Parameters of Eq.(7)
for i=1:N
for j=1:dim
%Soft-rime search strategy
r1=rand();
if r1< E
newRimepop(i,j)=Best_rime(1,j)+RimeFactor*((Ub(j)-Lb(j))*rand+Lb(j));%Eq.(3)
end
%Hard-rime puncture mechanism
r2=rand();
if r2<normalized_rime_rates(i)
newRimepop(i,j)=Best_rime(1,j);%Eq.(7)
end
end
end
for i=1:N
%Boundary absorption
Flag4ub=newRimepop(i,:)>ub;
Flag4lb=newRimepop(i,:)<lb;
newRimepop(i,:)=(newRimepop(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
newRime_rates(1,i)=fobj(newRimepop(i,:));
%Positive greedy selection mechanism
if newRime_rates(1,i)<Rime_rates(1,i)
Rime_rates(1,i) = newRime_rates(1,i);
Rimepop(i,:) = newRimepop(i,:);
if newRime_rates(1,i)< Best_rime_rate
Best_rime_rate=Rime_rates(1,i);
Best_rime=Rimepop(i,:);
end
end
end
Convergence_curve(it)=Best_rime_rate;
it=it+1;
end
需要的同学直接粘贴用于自己的实际问题即可。下方卡片回复关键词,获取完整代码。
关键词:2023