2023年智能优化算法之霜冰优化算法,附MATLAB代码,直接复制

霜冰优化算法(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.

算法原理也很简单,代码简单易懂,适合改进。粒子更新核心公式如下:

73b3325fa5ee8e5c743d46776706e589.png

其中:

01be2c10082a7308d59fd8916822e3a8.png

伪代码为:

4e75422bb320f571b9124cf59954c26c.png

有关霜冰优化算法更详细的原理介绍,作者将原文文献打包在了压缩包里,大家可自行学习。下面依旧是采用CEC2005函数对霜冰算法进行测试,运行时作者将其与粒子群算法进行了对比,大家看一下效果

a4be81f309ddb058ec5d8194aaeaa9ad.png

19ad0d58c75022933261b9eab618c450.png

88384198309926d16348ffbb7f9a158b.png

0306d0971854f278fc5e9aeed261ca2f.png

55b576e690f5df859266a5791dd6581b.png

cd866bb49f87e4710af6fafdd74f9d94.png

1df5a36f005209b2858668c1067a670a.png

22f9bcaa8f2e2ce74023fb3bcc920630.png

845ca391131dbce912fd48f26c7265d1.png

07af672751efc1041afb6a084380b788.png

adf918d03cd4c56ade348d718c5ef3c8.png

评价:只能说两个算法相差不大,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

猜你喜欢

转载自blog.csdn.net/woaipythonmeme/article/details/131618598