当前位置: 首页 > article >正文

群体智能优化算法-蜂鸟优化算法(Artificial Hummingbird Algorithm, AHA, 含Matlab源代码)

摘要

蜂鸟优化算法(Artificial Hummingbird Algorithm, AHA)是一种受蜂鸟觅食行为启发的新型智能优化算法。AHA 通过模拟蜂鸟的三种觅食行为:方向性飞行(Directed Foraging)、领地觅食(Territorial Foraging)和迁徙觅食(Migration Foraging) 来进行全局优化搜索。该算法通过适应性调整飞行模式,在搜索空间中有效地进行探索和开发,以提高优化性能。

1. 蜂鸟优化算法介绍

1.1 算法背景

蜂鸟(Hummingbird)是一种特殊的鸟类,以其极快的飞行速度和精准的飞行能力而著称。蜂鸟在觅食过程中采用不同的策略以最大化其能量摄取,同时适应环境变化。AHA 受蜂鸟的觅食行为启发,将其核心行为映射为优化算法中的搜索和开发过程。

AHA 主要基于以下三种觅食行为:

  1. 方向性飞行(Directed Foraging):蜂鸟根据记忆选择目标花朵,并朝向目标方向进行飞行,以最大化食物摄取效率。
  2. 领地觅食(Territorial Foraging):蜂鸟在已知的觅食区域内调整飞行路径,以避免与其他个体竞争。
  3. 迁徙觅食(Migration Foraging):当资源枯竭或环境变化时,蜂鸟会进行长距离飞行寻找新的食物源。

1.2 算法原理

AHA 通过种群个体(蜂鸟)的飞行行为模拟优化问题的求解过程,个体在搜索空间中不断调整位置,以找到最优解。其核心步骤如下:

  1. 初始化蜂鸟种群,在搜索空间中随机分布。
  2. 计算蜂鸟适应度值,评估当前解的质量。
  3. 方向性飞行,模拟蜂鸟根据记忆选择目标位置,并调整方向。
  4. 领地觅食,蜂鸟在特定区域内优化搜索路径。
  5. 迁徙觅食,模拟蜂鸟在资源枯竭时的长距离迁徙,以避免局部最优陷阱。
  6. 更新种群适应度值,并记录最优解。
  7. 重复上述过程,直至满足停止条件

1.3 相关数学公式

1.方向性飞行更新公式

2.领地觅食更新公式

3.迁徙觅食更新公式

2. MATLAB 代码实现

下面是 AHA 算法的完整 MATLAB 代码:

2.1 主函数 AHA

function [BestF,BestX,HisBestFit,VisitTable] = AHA(nPop, MaxIt, Low, Up, Dim, BenFunctions)
% 蜂鸟优化算法(AHA)
% nPop:种群规模,即蜂鸟数量
% MaxIt:最大迭代次数
% Low, Up:搜索空间的上下界
% Dim:问题维度
% BenFunctions:目标函数

% 初始化蜂鸟种群
PopPos = zeros(nPop, Dim);
PopFit = zeros(1, nPop);

for i = 1:nPop
    PopPos(i, :) = rand(1, Dim) .* (Up - Low) + Low;
    PopFit(i) = BenFunctions(PopPos(i, :));
end

% 初始化最优解
BestF = inf;
BestX = [];

for i = 1:nPop
    if PopFit(i) <= BestF
        BestF = PopFit(i);
        BestX = PopPos(i, :);
    end
end

% 记录历史最优值
HisBestFit = zeros(MaxIt, 1);
VisitTable = zeros(nPop);
VisitTable(logical(eye(nPop))) = NaN;  

% 迭代优化过程
for It = 1:MaxIt
    DirectVector = zeros(nPop, Dim); % 方向向量

    for i = 1:nPop
        r = rand;
        if r < 1/3
            % 对角线飞行
            RandDim = randperm(Dim);
            if Dim >= 3
                RandNum = ceil(rand * (Dim - 2) + 1);
            else
                RandNum = ceil(rand * (Dim - 1) + 1);
            end
            DirectVector(i, RandDim(1:RandNum)) = 1;
        elseif r > 2/3
            % 全向飞行
            DirectVector(i, :) = 1;
        else
            % 轴向飞行
            RandNum = ceil(rand * Dim);
            DirectVector(i, RandNum) = 1;
        end
    end

    % 方向性觅食
    for i = 1:nPop
        [MaxUnvisitedTime, TargetFoodIndex] = max(VisitTable(i, :));
        newPopPos = PopPos(TargetFoodIndex, :) + randn * DirectVector(i, :) .* (PopPos(i, :) - PopPos(TargetFoodIndex, :));
        newPopPos = SpaceBound(newPopPos, Up, Low);
        newPopFit = BenFunctions(newPopPos);
        
        if newPopFit < PopFit(i)
            PopFit(i) = newPopFit;
            PopPos(i, :) = newPopPos;
            VisitTable(i, TargetFoodIndex) = 0;
        else
            VisitTable(i, :) = VisitTable(i, :) + 1;
        end
    end

    % 记录最优解
    for i = 1:nPop
        if PopFit(i) < BestF
            BestF = PopFit(i);
            BestX = PopPos(i, :);
        end
    end
    HisBestFit(It) = BestF;
end
end

2.2 辅助函数

function X = SpaceBound(X, Up, Low)
% 边界检查,确保个体在搜索空间范围内
Dim = length(X);
S = (X > Up) + (X < Low);
X = (rand(1, Dim) .* (Up - Low) + Low) .* S + X .* (~S);
end

3. 总结

AHA 算法通过模拟蜂鸟的觅食行为,采用方向性飞行、领地觅食和迁徙觅食三种策略,实现对全局最优解的高效搜索。本文详细介绍了 AHA 的基本原理和数学模型,并提供了完整的 MATLAB 代码实现。AHA 适用于多种优化问题,在函数优化、工程优化等领域具有广泛的应用前景。


http://www.kler.cn/a/613813.html

相关文章:

  • EF Core 乐观并发控制(并发令牌)
  • Vue学习笔记集--postcss-px-to-viewport
  • 性能比拼: Rust vs C++
  • 从泛读到精读:合合信息文档解析如何让大模型更懂复杂文档
  • SQLModel笔记
  • 视图、MySQL、触发器、存储过程、流程控制语句
  • 免去繁琐的手动埋点,Gin 框架可观测性最佳实践
  • SpringBoot 面试八股文
  • 【Pytorch实战教程】with torch.no_grad():
  • 【ArcGIS】ArcGIS10.6彻底卸载和ArcGIS10.2安装全过程
  • git push的时候出现无法访问的解决
  • Flink TaskManager之间数据传输(NetworkManager)
  • 服务器硬盘出现故障都有哪些解决方法?
  • Redis中的数据类型与适用场景
  • MATLAB 控制系统设计与仿真 - 31
  • NFC 碰一碰发视频的短视频剪辑功能源码技术开发
  • 编程技术水平横向和垂直发展的抉择全方位分析
  • 【HTML】验证与调试工具
  • 前端性能优化思路_场景题
  • chrome-driver安装