新鲜出炉!2023年智能算法之雪消融优化器,MATLAB代码免费获取,在CEC2022进行测试...

今天为大家带来一期雪消融优化器(Snow ablation optimizer,SAO)。该算法发表于2023年6月1号。趁热乎,大家赶紧拿下!

雪消融优化器( SAO) 是受自然界中雪的升华和融化行为的启发,开发了一种新的基于物理的雪消融优化器(SAO)算法,模拟雪的升华和融化行为。

如下图所示:在融化的过程中,雪会转化为液态水,而它可以通过升华直接转化为蒸汽。同时,需要注意的是,融雪转化的液态水也可以通过蒸发转化为蒸汽。

4bc089d054ccb9e3ca96ef4dc224a6d0.png

本期在CEC2022函数集上进行测试,经过测试发现效果还是很不错的。

原理详解

①初始化阶段:

与大多数智能算法相似,就是随机生成一批粒子:

28a1201a97d1ee65a044a9bb9b7c5629.png

②探索阶段

当雪或由雪转化的液态水转化为蒸汽时,由于不规则的运动,搜索代理呈现出高度分散的特征。在这项研究中,布朗运动被用来模拟这种情况。作为一个随机过程,布朗运动被广泛应用于模拟动物的觅食行为,粒子的无休止和不规则运动、股票价格的波动行为等。对于标准布朗运动,步长是通过基于均值为零、方差为一的正态分布的概率密度函数来获得的。相关的数学表示如下:

bb6ccdb1590018b3255c0168081193b1.png

布朗运动能够探索搜索空间中的一些潜在区域。因此,它可以很好地反映蒸汽在搜索空间中扩散的情况。勘探过程中的位置计算公式如下:

f87cda829808ed0fd495e9af3d6fe50d.png

93089bc16d259bea98f2d65c252ab86b.png

83ceb6986e92608f184bff60ffe8ac5e.png

8f5b78b7126753842450404335902fd3.png

③开采阶段

当雪通过融化行为转化为液态水时,鼓励搜索代理围绕当前最佳解决方案开发高质量的解决方案,而不是在解决方案空间中以高度分散的特征进行扩展。作为最经典的融雪模型之一,degree-day法被用来反映融雪过程。该方法的一般形式如下所示:

53743eb938e8ee36db68f69c63aa52f3.png

2eda16821904b252cffdc3aeab54be67.png

09ed78540417fb4cbb634ae21a34627a.png

35531df6c6dd7491b0a82913c01af264.png

56a891e5cb0e5cfda7fc7b0906d0bf64.png

④双种群机制

一些从雪中转化的液态水也可以转化为蒸汽来进行勘探过程。也就是说,随着时间的推移,个体进行具有高度分散特征的不规则运动的可能性增加。然后算法逐渐有了探索解空间的趋势。在我们的研究中,二元种群机制是为了反映这种情况并保持开发和探索。如算法1所示,在迭代的早期阶段,将整个种群随机划分为两个大小相等的子种群。称之为双种群机制。

d836de14036326274bfeb4dd9200f47b.png

SAO算法的伪代码:

09f6074b7a0c901413bdde49f2bea6a4.png

结果展示

CEC2022测试结果:

做了个简单对比,SABO是减法优化器算法,SSA是麻雀优化算法,SAO是本文的雪消融优化器

F1

7682796ba64205f306ccac4e7dda0d7d.png

F2

4dc5f5f5475498ccbfee19b9c53646b8.png

F3

61ef4e37165c67c5db4ad7c31b6e9b54.png

F4

40a4a6aca3740f60ea492c3a7ab46cff.png

F5

4b9174639758e0840931e35697d3154f.png

F6

910f09b855c51f669a0955038b754e05.png

F7

b609f19e08930503ac04b8ebff6a3322.png

F8

8b2f83bf299a9fff6d245f4b62923082.png

F9

b3ac908e9d5209c9c55f37486d6edad2.png

F10

9eea03b3ad0764957ce97c68ad97124b.png

F11

2b02a1de9bd9ae723f8fc91f68604584.png

F12

1650b86524e000813d85355610fa7ac1.png

可以看到,SAO算法效果还是非常不错的!整体效果比麻雀和SABO算法都要好!接下来直接上代码

代码展示

function [Best_pos,Best_score,Convergence_curve]=SAO(N,Max_iter,lb,ub,dim,fobj)


if(max(size(ub)) == 1)
   ub = ub.*ones(1,dim);
   lb = lb.*ones(1,dim);  
end
%Initialize the set of random solutions
X=initialization(N,dim,ub,lb);


Best_pos=zeros(1,dim);
Best_score=inf;
Objective_values = zeros(1,size(X,1));


Convergence_curve=[];
N1=floor(N*0.5);
Elite_pool=[];


% Calculate the fitness of the first set and find the best one
for i=1:size(X,1)
    Objective_values(1,i)=fobj(X(i,:));
    if i==1
        Best_pos=X(i,:);
        Best_score=Objective_values(1,i);
    elseif Objective_values(1,i)<Best_score
        Best_pos=X(i,:);
        Best_score=Objective_values(1,i);
    end
    
    All_objective_values(1,i)=Objective_values(1,i);
end


[~,idx1]=sort(Objective_values);
second_best=X(idx1(2),:);
third_best=X(idx1(3),:);
sum1=0;
for i=1:N1
    sum1=sum1+X(idx1(i),:);
end
half_best_mean=sum1/N1;
Elite_pool(1,:)=Best_pos;
Elite_pool(2,:)=second_best;
Elite_pool(3,:)=third_best;
Elite_pool(4,:)=half_best_mean;


Convergence_curve(1) = Best_score;


for i=1:N
    index(i)=i;
end


Na=N/2;
Nb=N/2;


%Main loop
l=2; % start from the second iteration since the first iteration was dedicated to calculating the fitness
while l<=Max_iter
    RB=randn(N,dim);          %Brownian random number vector
    T=exp(-l/Max_iter);
    k=1;
    DDF=0.35*(1+(5/7)*(exp(l/Max_iter)-1)^k/(exp(1)-1)^k);
    M=DDF*T;
    
    %% Calculate the centroid position of the entire population
    for j=1:dim
        sum1=0;
        for i=1:N
            sum1=sum1+X(i,j);
        end
        X_centroid(j)=sum1/N;
    end
    
    %% Select individuals randomly to construct pop1 and pop2
    index1=randperm(N,Na);
    index2=setdiff(index,index1);
    
    for i=1:Na
        r1=rand;
        k1=randperm(4,1);
        for j=1:size(X,2) % in j-th dimension
            X(index1(i),j)= Elite_pool(k1,j)+RB(index1(i),j)*(r1*(Best_pos(j)-X(index1(i),j))+(1-r1)*(X_centroid(j)-X(index1(i),j)));
        end
    end
    
    if Na<N
    Na=Na+1;
    Nb=Nb-1;
    end


    
    if Nb>=1
    for i=1:Nb
        r2=2*rand-1;
        for j=1:size(X,2) % in j-th dimension
            X(index2(i),j)= M*Best_pos(j)+RB(index2(i),j)*(r2*(Best_pos(j)-X(index2(i),j))+(1-r2)*(X_centroid(j)-X(index2(i),j)));
        end
    end
    end
    
    % Check if solutions go outside the search spaceand bring them back
    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
        
        % Calculate the objective values
        Objective_values(1,i)=fobj(X(i,:));
        % Update the destination if there is a better solution
        if Objective_values(1,i)<Best_score
            Best_pos=X(i,:);
            Best_score=Objective_values(1,i);
        end
    end
   
    %% Update the elite pool
    [~,idx1]=sort(Objective_values);
    second_best=X(idx1(2),:);
    third_best=X(idx1(3),:);
    sum1=0;
    for i=1:N1
        sum1=sum1+X(idx1(i),:);
    end
    half_best_mean=sum1/N1;
    Elite_pool(1,:)=Best_pos;
    Elite_pool(2,:)=second_best;
    Elite_pool(3,:)=third_best;
    Elite_pool(4,:)=half_best_mean;


    Convergence_curve(l)=Best_score;
    l=l+1;
end

参考文献:

Lingyun Deng, Sanyang Liu. Snow ablation optimizer: A novel metaheuristic technique for numerical optimization and engineering design,Expert Systems with Applications,Volume 225,2023.

文献原文已经放在代码压缩包里了。

2023智能算法合集代码免费获取方式

完整代码获取方式:后台回复关键字,不区分大小写。关键字:

2023

猜你喜欢

转载自blog.csdn.net/woaipythonmeme/article/details/132574360
今日推荐