【智能算法】樽海鞘群算法(SSA)原理及实现

在这里插入图片描述


1.背景

2017年,Mirjalili受到樽海鞘集群行为启发,提出了樽海鞘群算法(Salp Swarm Algorithm, SSA)。

2.算法原理

2.1算法思想

在这里插入图片描述

樽海鞘集群是领导者-追随者类型算法,整体以链式行为向食物移动。移动过程中,领导者进行全局探索,而追随者则充分进行局部探索。

2.2算法过程

领导者位置更新
x 1 = { F + c 1 ( ( u b − l b ) c 2 + l b ) c 3 ≥ 0 F − c 1 ( ( u b − l b ) c 2 + l b ) c 3 < 0 x^1=\begin{cases}\quad F+c_1\left(\left(ub-lb\right)c_2+lb\right)&c_3\geq0\\F-c_1\left(\left(ub-lb\right)c_2+lb\right)&c_3<0&\end{cases} x1={F+c1((ublb)c2+lb)Fc1((ublb)c2+lb)c30c3<0
其中, x 1 , F x^1,F x1,F分别代表领导者位置和食物位置。参数 c 1 c_1 c1在算法中起到平衡全局探索和局部开发作用:
c 1 = 2 e − ( 4 l L ) 2 c_1=2e^{-\left(\frac{4l}L\right)^2} c1=2e(L4l)2
参数 c 2 , c 3 c_2,c_3 c2,c3为[0,1]随机数,其实是为了增强随机性。
追随者位置更新
由Newton运动定律,樽海鞘应满足:
x i = 1 2 a t 2 + ν 0 t x^i=\frac12at^2+\nu_0t xi=21at2+ν0t
由于迭代次数是离散的,考虑到 ν 0 = 0 \nu_0=0 ν0=0,因此可表述为:
x i = 1 2 ( x i + x i − 1 ) x^{i}=\frac{1}{2}\big(x^{i}+x^{i-1}\big) xi=21(xi+xi1)
🤣这里感觉有点问题:
a = d v d t v = d x d t a=\frac{dv}{dt} \\ v=\frac{dx}{dt} a=dtdvv=dtdx
t t t是离散且间隔为1时,此时 a = v 2 − v 1 , v 2 = x 2 − x 1 a=v_2-v_1,v2=x_2-x_1 a=v2v1,v2=x2x1,进一步有 a = x 2 − 2 x 1 + x 0 a=x_2-2x_1+x_0 a=x22x1+x0
伪代码
在这里插入图片描述

3.代码实现

% 樽海鞘群优化算法
function [Best_pos, Best_fitness, Iter_curve, History_pos, History_best] = SSA(pop, maxIter, lb, ub, dim,fobj)
%input
%pop 种群数量
%dim 问题维数
%ub 变量上边界
%lb 变量下边界
%fobj 适应度函数
%maxIter 最大迭代次数
%output
%Best_pos 最优位置
%Best_fitness 最优适应度值
%Iter_curve 每代最优适应度值
%History_pos 每代种群位置
%History_best 每代最优个体位置
%% 初始化种群
for i=1:dim
    SalpPositions(:,i) = lb(i)+rand(pop,1).*(ub(i) - lb(i));                          % Initial population
end
if size(ub,2)==1
    ub=ones(dim,1)*ub;
    lb=ones(dim,1)*lb;
else
    ub=ub';
    lb=lb';
end
%% 记录
Iter_curve = zeros(1,maxIter);
Best_pos=zeros(1,dim);
Best_fitness=inf;
%% 计算适应度
for i=1:size(SalpPositions,1)
    SalpFitness(1,i)=fobj(SalpPositions(i,:));
end
%% 记录
[sorted_salps_fitness,sorted_indexes]=sort(SalpFitness);
for newindex=1:pop
    Sorted_salps(newindex,:)=SalpPositions(sorted_indexes(newindex),:);
end

Best_pos=Sorted_salps(1,:);
Best_fitness=sorted_salps_fitness(1);

%% 迭代
l=2; 
while l<maxIter+1
    
    c1 = 2*exp(-(4*l/maxIter)^2); % Eq. (3.2)
    
    for i=1:size(SalpPositions,1)
        
        SalpPositions= SalpPositions';
        
        if i<=pop/2
            for j=1:1:dim
                c2=rand();
                c3=rand();
                % Eq. (3.1)
                if c3<0.5 
                    SalpPositions(j,i)=Best_pos(j)+c1*((ub(j)-lb(j))*c2+lb(j));
                else
                    SalpPositions(j,i)=Best_pos(j)-c1*((ub(j)-lb(j))*c2+lb(j));
                end
            end
            
        elseif i>pop/2 && i<pop+1
            point1=SalpPositions(:,i-1);
            point2=SalpPositions(:,i);
            
            SalpPositions(:,i)=(point2+point1)/2; % % Eq. (3.4) in the paper
        end
        
        SalpPositions= SalpPositions';
    end
    
    for i=1:size(SalpPositions,1)
        
        Tp=SalpPositions(i,:)>ub';Tm=SalpPositions(i,:)<lb';
        SalpPositions(i,:)=(SalpPositions(i,:).*(~(Tp+Tm)))+ub'.*Tp+lb'.*Tm;
        
        SalpFitness(1,i)=fobj(SalpPositions(i,:));
        
        if SalpFitness(1,i)<Best_fitness
            Best_pos=SalpPositions(i,:);
            Best_fitness=SalpFitness(1,i);
            
        end
    end
    
    Iter_curve(l)=Best_fitness;
    History_pos{l} = SalpPositions;
    History_best{l} = Best_pos;
    l = l + 1;
end
end

在这里插入图片描述

4.参考文献

[1] Mirjalili S, Gandomi A H, Mirjalili S Z, et al. Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems[J]. Advances in engineering software, 2017, 114: 163-191.

  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小O的算法实验室

谢谢大佬的肯定!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值