【智能优化算法】斑鬣狗优化算法(Spotted hyena optimizer,SHO)

斑鬣狗优化算法(Spotted hyena optimizer,SHO)是发表在中科院二区的“ADVANCES IN ENGINEERING SOFTWARE”期刊上的之智能优化算法。

01.引言

斑鬣狗优化算法(Spotted hyena optimizer,SHO),其灵感来自斑点鬣狗的行为。该算法背后的主要概念是斑鬣狗与其协作行为之间的社会关系。SHO 的三个基本步骤是寻找猎物、包围和攻击猎物,这三个步骤都是通过数学建模和实现的。

02.代码流程图

鬣狗是大型的类狗食肉动物。它们生活在非洲和亚洲的稀树草原、草原、亚沙漠和森林中。它们在野外能活10-12年,棕色鬣狗和土狼在大小,行为和饮食类型上都有所不同。所有这些物种都有像熊一样的姿势,因为前腿比后腿长。斑点鬣狗是熟练的猎手,也是其他三种鬣狗(即条纹鬣狗、棕色鬣狗和土狼鬣狗)中体型最大的。斑点鬣狗也被称为笑鬣狗,因为它的声音与人类的笑声非常相似。它们之所以这样叫,是因为它们的皮毛上有红棕色的斑点,上面有黑色的斑点。斑点鬣狗是一种复杂、聪明、高度群居的动物,有着可怕的名声。它们有能力无休止地争夺地盘和食物。在斑点鬣狗家族中,雌性成员占主导地位,生活在他们的部落中。然而,男性成员成年后离开他们的部落去寻找并加入一个新的部落。在这个新家庭中,它们是获得食物份额最低的成员。加入氏族的男性成员总是和同一个成员(朋友)呆在一起很长时间。而雌性,则永远是一个稳定的地方。关于斑点鬣狗的一个有趣的事实是,当发现新的食物来源时,它们会发出类似于人类笑声的声音来相互交流。斑点鬣狗通常以群体为单位生活和狩猎,依靠一个由信任的朋友组成的网络,拥有超过100个成员。为了扩大它们的网络,它们通常会和另一只斑点鬣狗结成伙伴关系,这只斑点鬣狗是朋友的朋友,或者通过亲属关系有某种联系,而不是任何未知的斑点鬣狗。斑点鬣狗是群居动物,它们可以通过特殊的叫声,如姿势和信号来相互交流。它们使用多种感官程序来识别它们的亲属和其他个体。他们还可以识别第三方亲属,并对其家族成员之间的关系进行排序,并在社会决策中使用这些知识。斑点鬣狗通过视觉、听觉和嗅觉追踪猎物。下图显示了斑点鬣狗的跟踪、追逐、包围和攻击机制。密集的集群有利于斑点鬣狗之间的高效合作,也有利于斑点鬣狗的适应性最大化。

03.部分代码

function [Best_hyena_score,Best_hyena_pos,Convergence_curve]=SHO(N,Max_iterations,lowerbound,upperbound,dimension,fitness)
hyena_pos=init(N,dimension,upperbound,lowerbound);
Convergence_curve=zeros(1,Max_iterations);
Iteration=1;
while Iteration<Max_iterations
    
    
    for i=1:size(hyena_pos,1)
        
        H_ub=hyena_pos(i,:)>upperbound;
        H_lb=hyena_pos(i,:)<lowerbound;
        hyena_pos(i,:)=(hyena_pos(i,:).*(~(H_ub+H_lb)))+upperbound.*H_ub+lowerbound.*H_lb;  
        hyena_fitness(1,i)=fitness(hyena_pos(i,:));  
        
    end
       
    if Iteration==1
        [fitness_sorted FS]=sort(hyena_fitness);
        sorted_population=hyena_pos(FS,:);
        best_hyenas=sorted_population;
        best_hyena_fitness=fitness_sorted;
        
    else
        double_population=[pre_population;best_hyenas];
        double_fitness=[pre_fitness best_hyena_fitness];
        [double_fitness_sorted FS]=sort(double_fitness);
        double_sorted_population=double_population(FS,:);
        fitness_sorted=double_fitness_sorted(1:N);
        sorted_population=double_sorted_population(1:N,:);
        best_hyenas=sorted_population;
        best_hyena_fitness=fitness_sorted;
    end
    
    NOH=noh(best_hyena_fitness);
    
   
    Best_hyena_score=fitness_sorted(1);
    Best_hyena_pos=sorted_population(1,:);
    pre_population=hyena_pos;
    pre_fitness=hyena_fitness;
    
    a=5-Iteration*((5)/Max_iterations);
    HYE=0;
    CV=0;
    for i=1:size(hyena_pos,1)
        
        for j=1:size(hyena_pos,2)
             for k=1:NOH
            HYE=0;
             r1=rand();
             r2=rand(); 
            Var1=2*a*r1-a; 
            Var2=2*r2; 
            distance_to_hyena=abs(Var2*sorted_population(k)-hyena_pos(i,j));
            HYE=sorted_population(k)-Var1*distance_to_hyena;
            CV=CV+HYE;        
            distance_to_hyena=0;
             end
        
        hyena_pos(i,j)=(CV/(NOH+1));
        CV=0;
        end
        
    end
    
    Convergence_curve(Iteration)=Best_hyena_score;
    
     Iteration=Iteration+1; 
end

04.代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MATLAB科研小白

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值