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