当前位置:   article > 正文

【智能优化算法】河马优化算法(Hippopotamus optimization algorithm,HO)

【智能优化算法】河马优化算法(Hippopotamus optimization algorithm,HO)

河马优化算法(Hippopotamus optimization algorithm,HO)是发表在中科院二区期刊“Scientific Reports”的文章“Hippopotamus Optimization Algorithm: a Novel Nature-Inspired Optimization Algorithm”上的算法。

01.引言

河马优化算法(Hippopotamus optimization algorithm,HO)是通过从河马观察到的固有行为中汲取灵感而构思的,展示了一种创新的元启发式方法。HO在概念上是使用一个三相模型来定义的,该模型结合了它们在河流或池塘中的位置更新,对捕食者的防御策略和逃避方法,这些都是数学公式。在161个基准函数中,它在寻找最优值方面获得了115个最高排名,包括单峰和高维多峰函数,固定维多峰函数,以及CEC 2019测试套件和CEC 2014测试套件的10、30、50和100维度以及Zigzag模式基准函数,这表明HO在开发和探索方面都表现出了显著的熟练程度。此外,它有效地平衡了探索和利用,支持搜索过程。根据解决四个不同的工程设计挑战的结果,HO有效地实现了最有效的解决方案,同时坚持遵守指定的约束条件。HO算法的性能评估涵盖了各个方面,包括与WOA、GWO、SSA、PSO、SCA、FA、GOA、TLBO、MFO和IWO的比较,后者被认为是研究最广泛的元启发式算法,AOA是最近开发的算法,CMA - ES是高性能优化器,因其在IEEE CEC竞赛中取得成功而得到认可。

02.代码流程

HO从河马生活中观察到的三种突出的行为模式中获得灵感:河马群由几只雌性河马、河马幼崽、多只成年雄性河马和一只占统治地位的雄性河马(兽群的领袖)组成。由于它们天生的好奇心,幼河马和幼河马经常表现出离开群体的倾向。因此,它们可能会被孤立,成为捕食者的目标。河马的第二种行为模式本质上是防御性的,当它们受到捕食者的攻击或其他生物侵入它们的领地时,就会被触发。河马表现出一种防御反应,它们将自己旋转向捕食者,并利用它们强大的下颚和发声来阻止和击退攻击者(图1)。狮子和斑点鬣狗等捕食者意识到这一现象,并积极寻求避免直接接触河马强大的下颚,作为一种预防措施,防止潜在的伤害。最后一种行为模式包含了河马的本能反应,即逃离捕食者并积极寻求与潜在危险区域保持距离。在这种情况下,河马努力向最近的水域航行,比如河流或池塘,就像狮子和斑点鬣狗经常表现出对进入水生环境的厌恶一样。

03.部分代码

  1. %% Designed and Developed by Mohammad Hussien Amiri and Nastaran Mehrabi Hashjin
  2. function[Best_score,Best_pos,HO_curve]=HO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness)
  3. lowerbound=ones(1,dimension).*(lowerbound); % Lower limit for variables
  4. upperbound=ones(1,dimension).*(upperbound); % Upper limit for variables
  5. %% Initialization
  6. for i=1:dimension
  7. X(:,i) = lowerbound(i)+rand(SearchAgents,1).*(upperbound(i) - lowerbound(i)); % Initial population
  8. end
  9. for i =1:SearchAgents
  10. L=X(i,:);
  11. fit(i)=fitness(L);
  12. end
  13. %% Main Loop
  14. for t=1:Max_iterations
  15. %% Update the Best Condidate Solution
  16. [best , location]=min(fit);
  17. if t==1
  18. Xbest=X(location,:); % Optimal location
  19. fbest=best; % The optimization objective function
  20. elseif best<fbest
  21. fbest=best;
  22. Xbest=X(location,:);
  23. end
  24. for i=1:SearchAgents/2
  25. %% Phase1: The hippopotamuses position update in the river or pond (Exploration)
  26. Dominant_hippopotamus=Xbest;
  27. I1=randi([1,2],1,1);
  28. I2=randi([1,2],1,1);
  29. Ip1=randi([0,1],1,2);
  30. RandGroupNumber=randperm(SearchAgents,1);
  31. RandGroup=randperm(SearchAgents,RandGroupNumber);
  32. % Mean of Random Group
  33. MeanGroup=mean(X(RandGroup,:)).*(length(RandGroup)~=1)+X(RandGroup(1,1),:)*(length(RandGroup)==1);
  34. Alfa{1,:}=(I2*rand(1,dimension)+(~Ip1(1)));
  35. Alfa{2,:}= 2*rand(1,dimension)-1;
  36. Alfa{3,:}= rand(1,dimension);
  37. Alfa{4,:}= (I1*rand(1,dimension)+(~Ip1(2)));
  38. Alfa{5,:}=rand;
  39. A=Alfa{randi([1,5],1,1),:};
  40. B=Alfa{randi([1,5],1,1),:};
  41. X_P1(i,:)=X(i,:)+rand(1,1).*(Dominant_hippopotamus-I1.*X(i,:));
  42. T=exp(-t/Max_iterations);
  43. if T>0.6
  44. X_P2(i,:)=X(i,:)+A.*(Dominant_hippopotamus-I2.*MeanGroup);
  45. else
  46. if rand()>0.5
  47. X_P2(i,:)=X(i,:)+B.*(MeanGroup-Dominant_hippopotamus);
  48. else
  49. X_P2(i,:)=((upperbound-lowerbound)*rand+lowerbound);
  50. end
  51. end
  52. X_P2(i,:) = min(max(X_P2(i,:),lowerbound),upperbound);
  53. L=X_P1(i,:);
  54. F_P1(i)=fitness(L);
  55. if(F_P1(i)<fit(i))
  56. X(i,:) = X_P1(i,:);
  57. fit(i) = F_P1(i);
  58. end
  59. L2=X_P2(i,:);
  60. F_P2(i)=fitness(L2);
  61. if(F_P2(i)<fit(i))
  62. X(i,:) = X_P2(i,:);
  63. fit(i) = F_P2(i);
  64. end
  65. end
  66. %% Phase 2: Hippopotamus defense against predators (Exploration)
  67. for i=1+SearchAgents/2 :SearchAgents
  68. predator=lowerbound+rand(1,dimension).*(upperbound-lowerbound);
  69. L=predator;
  70. F_HL=fitness(L);
  71. distance2Leader=abs(predator-X(i,:));
  72. b=unifrnd(2,4,[1 1]);
  73. c=unifrnd(1,1.5,[1 1]);
  74. d=unifrnd(2,3,[1 1]);
  75. l=unifrnd(-2*pi,2*pi,[1 1]);
  76. RL=0.05*levy(SearchAgents,dimension,1.5);
  77. if fit(i)> F_HL
  78. X_P3(i,:)=RL(i,:).*predator+(b./(c-d*cos(l))).*(1./distance2Leader);
  79. else
  80. X_P3(i,:)=RL(i,:).*predator+(b./(c-d*cos(l))).*(1./(2.*distance2Leader+rand(1,dimension)));
  81. end
  82. X_P3(i,:) = min(max(X_P3(i,:),lowerbound),upperbound);
  83. L=X_P3(i,:);
  84. F_P3(i)=fitness(L);
  85. if(F_P3(i)<fit(i))
  86. X(i,:) = X_P3(i,:);
  87. fit(i) = F_P3(i);
  88. end
  89. end
  90. %% Phase 3: Hippopotamus Escaping from the Predator (Exploitation)
  91. for i=1:SearchAgents
  92. LO_LOCAL=(lowerbound./t);
  93. HI_LOCAL=(upperbound./t);
  94. Alfa{1,:}= 2*rand(1,dimension)-1;
  95. Alfa{2,:}= rand(1,1);
  96. Alfa{3,:}=randn;
  97. D=Alfa{randi([1,3],1,1),:};
  98. X_P4(i,:)=X(i,:)+(rand(1,1)).*(LO_LOCAL+D.* (HI_LOCAL-LO_LOCAL));
  99. X_P4(i,:) = min(max(X_P4(i,:),lowerbound),upperbound);
  100. L=X_P4(i,:);
  101. F_P4(i)=fitness(L);
  102. if(F_P4(i)<fit(i))
  103. X(i,:) = X_P4(i,:);
  104. fit(i) = F_P4(i);
  105. end
  106. end
  107. best_so_far(t)=fbest;
  108. disp(['Iteration ' num2str(t) ': Best Cost = ' num2str(best_so_far(t))]);
  109. Best_score=fbest;
  110. Best_pos=Xbest;
  111. HO_curve=best_so_far;
  112. end
  113. end

04.代码效果图

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/561723
推荐阅读
相关标签
  

闽ICP备14008679号