【群智能算法改进】一种改进的火鹰优化算法 改进的IFHO算法【Matlab代码#77】

文章目录

    • 【`获取资源`请见文章第5节:资源获取】
    • [1. 原始火鹰优化算法](#1. 原始火鹰优化算法)
      • [1.1 种群初始化](#1.1 种群初始化)
      • [1.2 火鹰点火阶段](#1.2 火鹰点火阶段)
      • [1.3 猎物移动阶段](#1.3 猎物移动阶段)
    • [2. 改进的火鹰优化算法](#2. 改进的火鹰优化算法)
      • [2.1 Tent映射种群初始化](#2.1 Tent映射种群初始化)
      • [2.2 非线性复合自适应惯性权重随机抉择策略](#2.2 非线性复合自适应惯性权重随机抉择策略)
    • [3. 部分代码展示](#3. 部分代码展示)
    • [4. 仿真结果展示](#4. 仿真结果展示)
    • [5. 资源获取](#5. 资源获取)

获取资源请见文章第5节:资源获取】


1. 原始火鹰优化算法

火鹰优化算法(Fire Hawk Optimizer, FHO)是2023年提出的新算法。作者受鸣笛鸢,黑鸢和棕色猎鹰的觅食行为的启发,提出了这个算法。考虑这些鸟,它们在自然界中捕捉猎物的特定行为,特别是通过放火的方式,故命名此算法为火鹰优化算法。火鹰的奇怪行为是故意用嘴叼着燃烧的树枝来传播火焰,作者对它们的爪子进行了检查和分析,以建立一个数学模型。火鹰优化算法分为以下几个阶段:

1.1 种群初始化

1.2 火鹰点火阶段


1.3 猎物移动阶段



2. 改进的火鹰优化算法

2.1 Tent映射种群初始化

混沌序列具有良好的随机性、遍历性和规律性,利用这些特征进行优化、搜索,能够有效地保持种群的多样性,抑制算法陷入局部最优,使全局搜索能力得到加强。研究表明,不同的混沌映射对混沌优化过程的影响很大。目前来说,在优化启发式算法中,用的相对较多的是Logistic混沌映射和Tent混沌映射。Tent映射具有比Logistic映射更好的遍历均匀性和更快的搜索速度。Tent映射的表达式如下:

2.2 非线性复合自适应惯性权重随机抉择策略

在原始FHO算法中,如果某个个体陷入局部最优后,其更新公式在这个局部最优解附近进行搜索,也不易跳出这个局部解,为了提高算法跳出局部最优的能力,提出了这个非线性复合自适应惯性权重随机抉择策略。

提出的自适应权重因子w的图像如下:

3. 部分代码展示

matlab 复制代码
function [Best_score,Best_pos,Curve] = IFHO(nPop,Max_iter,lb,ub,dim,fobj)
% 该算法基于啸鸢、麻鹰和褐隼的觅食行为,这些鸟类被称为火鹰,
% 因为它们在自然界中捕捉猎物的具体行动,特别是通过"放火"的方式。
% 该算法模拟了火鹰的觅食行为,考虑了生火和传火以及捕获猎物的过程。
%% 边界矢量化
VarMin = lb.*ones(1,dim);
VarMax = ub.*ones(1,dim);
%% 算法的一般参数
HN = randi([1 ceil(nPop/5)],1,1) ;      % 火鹰最大数量
%% 初始化阶段
Cost=[];

%% 改进点1:Tent混沌映射初始化种群 %%%%
Pop = initialization_Tent(nPop, dim, ub, lb); 

for i=1:nPop
    % 随机初始化种群
    % Pop(i,:)=unifrnd(VarMin,VarMax,[1 dim]);
    % 计算适应度值
    Cost(i,1)=fobj(Pop(i,:));
end
% 排序找出初始最优
[Cost, SortOrder]=sort(Cost);
Pop=Pop(SortOrder,:);
BestPop=Pop(1,:);
SP=mean(Pop);

% 火鹰
FHPops=Pop(1:HN,:);

% 猎物
Pop2=Pop(HN+1:end,:);

% 火鹰与猎物之间的距离
for i=1:HN
    nPop2=size(Pop2,1);
    if nPop2<HN
        break
    end
    Dist=[];
    for q=1:nPop2
        Dist(q,1)=distance(FHPops(i,:), Pop2(q,:));
    end
    [ ~, b]=sort(Dist);
    alfa=randi(nPop2);
    PopNew{i,:}=Pop2(b(1:alfa),:);
    Pop2(b(1:alfa),:)=[];
    if isempty(Pop2)==1
        break
    end
end

if isempty(Pop2)==0
    PopNew{end,:}=[PopNew{end,:} ;Pop2];
end

% 更新最优解
GB=Cost(1);
BestPos=BestPop;
%% 主循环
Iter=1;
while Iter<=Max_iter
    fprintf('迭代次数:%d\n', Iter);
    Iter=Iter+1;
    PopTot=[];
    Cost=[];

4. 仿真结果展示






5. 资源获取

可更换其他群智能算法,获取完整代码资源。👇👇👇👀名片

相关推荐
Brookty9 分钟前
【算法】归并排序
数据结构·算法·排序算法
·醉挽清风·10 分钟前
学习笔记—C++—模板初阶
开发语言·c++·笔记·学习
User_芊芊君子11 分钟前
跨平台开发选Java还是C?应用场景与性能深度对比
java·c语言·开发语言
一只小松许️1 小时前
Rust泛型与特性
java·开发语言·rust
星星火柴9362 小时前
数据结构:哈希表 | C++中的set与map
数据结构·c++·笔记·算法·链表·哈希算法·散列表
搬砖工程师Cola3 小时前
<C#>在 C# .NET 6 中,使用IWebHostEnvironment获取Web应用程序的运行信息。
开发语言·c#·.net
CS创新实验室4 小时前
数据结构:最小生成树的普里姆算法和克鲁斯卡尔算法
数据结构·算法·图论·计算机考研
八了个戒5 小时前
「数据可视化 D3系列」入门第三章:深入理解 Update-Enter-Exit 模式
开发语言·前端·javascript·数据可视化
失去妙妙屋的米奇5 小时前
matplotlib数据展示
开发语言·图像处理·python·计算机视觉·matplotlib
夏天的阳光吖5 小时前
C++蓝桥杯实训篇(四)
开发语言·c++·蓝桥杯