1 简介
自私羊群优化SHO算法是由Fausto于2017年提出的元启发式算法[16],它主要基于汉密尔顿[17]提出的自私群理论来模拟猎物与捕食者之间的狩猎关系。当群体中的个体受到捕食者的攻击时,为了增加生存机会,群体中的个体产生聚集行为,个体更有可能移动到相对安全的位置(群体的中心位置),并且群体的边缘个体更容易受到攻击,这也导致群体的边缘个体逃离群体,以增加他们被捕食者攻击时的生存机会。该方法假设整个平原是一个解空间,该算法包含两个不同的搜索因子:被狩猎群和狩猎群。每个搜索因子通过一组不同的进化算子指导算法的计算,以便更好地模拟猎物与捕食者关系之间的关系。
2 部分代码
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
3 仿真结果
4 参考文献
[1]朱惠娟, 王永利, 陈琳琳. 面向三维模型轻量化的自私羊群优化算法研究[J]. 计算机工程与应用, 2020, 56(3):7.