群体智能优化算法-蜻蜓优化算法(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)是一种基于群体行为的元启发式优化算法,具有以下特点:

  • 受自然界蜻蜓行为启发,包含五种搜索规则;
  • 具有良好的全局搜索能力,并能自适应收缩搜索范围;
  • 适用于连续优化问题、组合优化问题和离散优化问题。
相关推荐
赛博山人15 分钟前
美团龙猫(LongCat)发布 LongCat-2.5
人工智能
阿里云大数据AI技术17 分钟前
阿里云 AI 原生大数据服务 ADA 正式发布,开启“对话即交付”的数据新纪元
人工智能
Redamancy96831 分钟前
国产CAD横向测评:兼容、效率与长期保障怎么比
人工智能
miofly32 分钟前
NVIDIA Attribution:分布式 AI 训练故障的自动归因系统
人工智能
noravinsc37 分钟前
国内做程序研发用哪些ai工具好用,配置还简单?
人工智能
冻柠檬飞冰走茶44 分钟前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
宗旨飞翔1 小时前
不同的二叉搜索树
算法
736c1 小时前
固件开发岗算法
数据结构·算法
程序猿编码1 小时前
解决 LLM 算力浪费,一套统一 KV 管理层实现缓存复用
人工智能·神经网络·机器学习·缓存·llm·大模型推理
阿里云大数据AI技术1 小时前
云栖实录|阿里云AI搜索系列产品全新发布 - 新引擎
人工智能·elasticsearch