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

一、文章摘要

蜻蜓优化算法(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)

Matlab 复制代码
function [Best_score,Best_pos,cg_curve]=DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)

% 存储收敛曲线
cg_curve=zeros(1,Max_iteration);

% 初始化边界(如果是单个数值,扩展为向量)
if size(ub,2)==1
    ub=ones(1,dim)*ub;
    lb=ones(1,dim)*lb;
end

% 计算蜻蜓的搜索半径
r=(ub-lb)/10;
Delta_max=(ub-lb)/10;

% 初始化食物(最优解)和敌人(最差解)
Food_fitness=inf;
Food_pos=zeros(dim,1);
Enemy_fitness=-inf;
Enemy_pos=zeros(dim,1);

% 初始化蜻蜓的位置
X=initialization(SearchAgents_no,dim,ub,lb);
Fitness=zeros(1,SearchAgents_no);

% 初始化蜻蜓的速度
DeltaX=initialization(SearchAgents_no,dim,ub,lb);

for iter=1:Max_iteration
    
    % 更新搜索半径
    r=(ub-lb)/4+((ub-lb)*(iter/Max_iteration)*2);
    
    % 惯性权重
    w=0.9-iter*((0.9-0.4)/Max_iteration);
       
    % 动态收缩因子
    my_c=0.1-iter*((0.1-0)/(Max_iteration/2));
    if my_c<0
        my_c=0;
    end
    
    % 计算五个控制参数
    s=2*rand*my_c; % 分离权重
    a=2*rand*my_c; % 对齐权重
    c=2*rand*my_c; % 聚合权重
    f=2*rand;      % 食物吸引力
    e=my_c;        % 敌人规避

    % 计算每个蜻蜓的适应度
    for i=1:SearchAgents_no 
        Fitness(1,i)=fobj(X(:,i)');
        if Fitness(1,i)<Food_fitness
            Food_fitness=Fitness(1,i);
            Food_pos=X(:,i);
        end
        
        if Fitness(1,i)>Enemy_fitness
            if all(X(:,i)<ub') && all( X(:,i)>lb')
                Enemy_fitness=Fitness(1,i);
                Enemy_pos=X(:,i);
            end
        end
    end

    for i=1:SearchAgents_no
        % 计算蜻蜓的位置更新(公式 (3.6))
        DeltaX(:,i) = (a*A(:,i) + c*C(:,i) + s*S(:,i) + f*F(:,i) + e*E(:,i)) + w*DeltaX(:,i);
        
        % 位置更新(公式 (3.7))
        X(:,i) = X(:,i) + DeltaX(:,i);
    end

    % 更新最优解
    Best_score=Food_fitness;
    Best_pos=Food_pos;
    
    cg_curve(iter)=Best_score;
end
end

四、总结

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

  • 受自然界蜻蜓行为启发,包含五种搜索规则
  • 具有良好的全局搜索能力,并能自适应收缩搜索范围
  • 适用于连续优化问题、组合优化问题和离散优化问题
相关推荐
鸿乃江边鸟几秒前
Nanobot 从 gateway 启动命令来看个人助理Agent的实现
人工智能·ai
大任视点2 分钟前
深耕AI短剧赛道!聿潇娱乐签约鹤砚声工作室 加速精品内容布局
人工智能
杜子不疼.3 分钟前
用 Python 实现 RAG:从文档加载到语义检索全流程
开发语言·人工智能·python
chao1898443 分钟前
基于改进二进制粒子群算法的含需求响应机组组合问题MATLAB实现
开发语言·算法·matlab
bryant_meng4 分钟前
【Reading Notes】(8.11)Favorite Articles from 2025 November
人工智能·深度学习·业界资讯
Spliceㅤ6 分钟前
Transformer
人工智能·深度学习·transformer
谁似人间西林客7 分钟前
工艺智能如何重塑汽车制造全流程?
人工智能·汽车·制造
枫叶林FYL11 分钟前
【自然语言处理 NLP】8.2 Ring Attention 与分布式长上下文训练
人工智能·分布式·自然语言处理
思维新观察11 分钟前
流量红利消退,可酷AI无人直播破局,引领行业进入效率竞争新时代
大数据·人工智能
Imxyk11 分钟前
P9242 [蓝桥杯 2023 省 B] 接龙数列
c++·算法·图论