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

  • 受自然界蜻蜓行为启发,包含五种搜索规则
  • 具有良好的全局搜索能力,并能自适应收缩搜索范围
  • 适用于连续优化问题、组合优化问题和离散优化问题
相关推荐
u0109272713 分钟前
模板编译期排序算法
开发语言·c++·算法
小白跃升坊6 分钟前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
kicikng10 分钟前
走在智能体前沿:智能体来了(西南总部)的AI Agent指挥官与AI调度官实践
人工智能·系统架构·智能体协作·ai agent指挥官·ai调度官·应用层ai
测试者家园12 分钟前
测试用例智能生成:是效率革命,还是“垃圾进,垃圾出”的新挑战?
人工智能·职场和发展·测试用例·测试策略·质量效能·智能化测试·用例设计
GIS瞧葩菜12 分钟前
Cesium 轴拖拽 + 旋转圈拖拽 核心数学知识
人工智能·算法·机器学习
njsgcs15 分钟前
dqn和cnn有什么区别 dqn怎么保存训练经验到本地
人工智能·神经网络·cnn
m0_6860416119 分钟前
C++中的适配器模式变体
开发语言·c++·算法
txzrxz19 分钟前
结构体排序,双指针,单调栈
数据结构·算法·双指针算法·单调栈·结构体排序
AndrewHZ23 分钟前
【AI黑话日日新】什么是AI智能体?
人工智能·算法·语言模型·大模型·llm·ai智能体
wWYy.24 分钟前
算法:二叉树最大路径和
数据结构·算法