群体智能优化算法-蜻蜓优化算法(Dragonfly Algorithm, DA,含Matlab源代码 ...

嚴華  论坛元老 | 2025-3-24 18:28:06 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1008|帖子 1008|积分 3024

一、文章摘要

蜻蜓优化算法(Dragonfly Algorithm, DA)是一种新颖的群体智能优化算法,由 Seyedali Mirjalili 在 2016 年提出。该算法受到蜻蜓群体在捕食、迁徙和交配行为中的飞行模式启发,并通过模拟蜻蜓在自然界中搜索猎物的行为来解决单目的、多目的和离散优化题目。DA 主要依靠五种行为规则(分离、对齐、聚合、猎物吸引、敌人规避)来更新蜻蜓的速度和位置,以实现全局搜索与局部搜索的平衡。本文具体介绍 DA 的数学模子、关键公式,并对 MATLAB 代码进行了逐行具体解释,以资助读者理解 DA 算法的工作原理及其在优化题目中的应用。

二、DA 算法具体介绍

(1)算法的灵感来源

蜻蜓优化算法(DA)受到蜻蜓群体行为的启发,在自然界中,蜻蜓主要以两种方式活动:


  • 静态群体行为(捕猎模式):蜻蜓在一个小范围内围绕猎物盘旋。
  • 动态群体行为(迁徙模式):蜻蜓群体在较大范围内迁徙,寻找更好的生存环境。
DA 通过数学模子模拟这些行为,并在优化题目中利用相应规则调整搜索个体的位置。

(2)数学模子及公式

DA 主要基于以下五个行为规则来控制个体的搜索行为:
① 分离(Separation)

分离行为用于制止蜻蜓之间的碰撞:

② 对齐(Alignment)

对齐行为用于使蜻蜓群体保持方向划一:

③ 聚合(Cohesion)

聚合行为使蜻蜓朝向相近个体的中心:

④ 猎物吸引(Attraction to Food)

蜻蜓会趋向于目的(最优解):

⑤ 敌人规避(Distraction from Enemy)

蜻蜓会远离天敌(最差解):

(3)速度和位置更新公式


三、DA 代码具体解释(MATLAB)

  1. function [Best_score,Best_pos,cg_curve]=DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
  2. % 存储收敛曲线
  3. cg_curve=zeros(1,Max_iteration);
  4. % 初始化边界(如果是单个数值,扩展为向量)
  5. if size(ub,2)==1
  6.     ub=ones(1,dim)*ub;
  7.     lb=ones(1,dim)*lb;
  8. end
  9. % 计算蜻蜓的搜索半径
  10. r=(ub-lb)/10;
  11. Delta_max=(ub-lb)/10;
  12. % 初始化食物(最优解)和敌人(最差解)
  13. Food_fitness=inf;
  14. Food_pos=zeros(dim,1);
  15. Enemy_fitness=-inf;
  16. Enemy_pos=zeros(dim,1);
  17. % 初始化蜻蜓的位置
  18. X=initialization(SearchAgents_no,dim,ub,lb);
  19. Fitness=zeros(1,SearchAgents_no);
  20. % 初始化蜻蜓的速度
  21. DeltaX=initialization(SearchAgents_no,dim,ub,lb);
  22. for iter=1:Max_iteration
  23.    
  24.     % 更新搜索半径
  25.     r=(ub-lb)/4+((ub-lb)*(iter/Max_iteration)*2);
  26.    
  27.     % 惯性权重
  28.     w=0.9-iter*((0.9-0.4)/Max_iteration);
  29.       
  30.     % 动态收缩因子
  31.     my_c=0.1-iter*((0.1-0)/(Max_iteration/2));
  32.     if my_c<0
  33.         my_c=0;
  34.     end
  35.    
  36.     % 计算五个控制参数
  37.     s=2*rand*my_c; % 分离权重
  38.     a=2*rand*my_c; % 对齐权重
  39.     c=2*rand*my_c; % 聚合权重
  40.     f=2*rand;      % 食物吸引力
  41.     e=my_c;        % 敌人规避
  42.     % 计算每个蜻蜓的适应度
  43.     for i=1:SearchAgents_no
  44.         Fitness(1,i)=fobj(X(:,i)');
  45.         if Fitness(1,i)<Food_fitness
  46.             Food_fitness=Fitness(1,i);
  47.             Food_pos=X(:,i);
  48.         end
  49.         
  50.         if Fitness(1,i)>Enemy_fitness
  51.             if all(X(:,i)<ub') && all( X(:,i)>lb')
  52.                 Enemy_fitness=Fitness(1,i);
  53.                 Enemy_pos=X(:,i);
  54.             end
  55.         end
  56.     end
  57.     for i=1:SearchAgents_no
  58.         % 计算蜻蜓的位置更新(公式 (3.6))
  59.         DeltaX(:,i) = (a*A(:,i) + c*C(:,i) + s*S(:,i) + f*F(:,i) + e*E(:,i)) + w*DeltaX(:,i);
  60.         
  61.         % 位置更新(公式 (3.7))
  62.         X(:,i) = X(:,i) + DeltaX(:,i);
  63.     end
  64.     % 更新最优解
  65.     Best_score=Food_fitness;
  66.     Best_pos=Food_pos;
  67.    
  68.     cg_curve(iter)=Best_score;
  69. end
  70. end
复制代码
四、总结

蜻蜓优化算法(DA)是一种基于群体行为的元启发式优化算法,具有以下特点:


  • 受自然界蜻蜓行为启发,包含五种搜索规则
  • 具有良好的全局搜索能力,并能自顺应收缩搜索范围
  • 适用于一连优化题目、组合优化题目和离散优化题目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表