【Matlab】智能优化算法_人工蜂鸟算法AHA

这篇具有很好参考价值的文章主要介绍了【Matlab】智能优化算法_人工蜂鸟算法AHA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.背景介绍

蜂鸟是一种令人惊叹的动物,被认为是世界上最小的鸟类。如果用大脑与身体的比例来衡量蜂鸟的智力,蜂鸟将是地球上包括人类在内最聪明的动物。蜂鸟是最小的蜂鸟,平均体长5.5厘米,体重1.95克。蜂鸟拍打翅膀的频率是所有鸟类中最高的,可达每秒80次。蜂鸟一般以各种昆虫为食,如蚊子、象鼻虫和蚜虫。为了提供足够的飞行能量,蜂鸟每天还吃大量的花蜜和花内的甜液。图1显示了一只正在觅食的蜂鸟。

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

蜂鸟的特别之处在于它们惊人的觅食记忆力。蜂鸟大脑中的海马体对学习和记忆起着至关重要的作用,它比迄今为止研究过的任何其他鸟类的海马体都要大得多。蜂鸟很小,但却非常聪明,它的大脑与体型相比比其他任何鸟类都要大,这证明蜂鸟具有惊人的记忆力。事实上,每只蜂鸟都能记住某一地区单朵花的具体信息,包括花的位置、花蜜质量和含量、花蜜填充率以及它们最后一次光顾这些花的时间。鸟类还能记住食物来源的时空信息。有了这些信息,蜂鸟实际上可以有效地制定计划,避免重访最近采样的花朵。关于个体经历的记忆的使用和存储被称为外显记忆,以前经常被用来区分动物和人类。有了这种独特的技能,蜂鸟成为高效的觅食者,并倾向于访问它们很久没有访问过的花朵,以获得更多的收获。

蜂鸟的另一项特殊技能是飞行能力。蜂鸟微小的身体和高频率的振翅使它们成为鸟类中最优秀的飞行者。蜂鸟的肩关节灵活,可以将翅膀旋转180度,并保持翅膀呈 "八 "字形运动。这种独特的飞行方式有助于蜂鸟从下击和上击中获得力量,而其他鸟类只是简单地扇动翅膀,仅从下击中获得升力。蜂鸟可被视为鸟类世界中的直升机,因为经常可以观察到它们像直升机一样上升。蜂鸟可以精确地向任何方向飞行。除了像其他鸟类一样飞行外,蜂鸟还能以不同的姿态飞行,包括前后、上下和左右。对角线飞行也是蜂鸟掌握的一种奇特的飞行姿势,这是其他鸟类无法比拟的。在寻找食物时,它们可以围绕潜在的食物资源绕圈飞行。令人难以置信的是,蜂鸟可以在空中的一个地方停留一段时间。蜂鸟具有很强的迁徙能力;它们通常会在恶劣天气或食物短缺时飞行数千英里迁徙到偏远地区。

AHA算法的主要灵感来源于蜂鸟的飞行技能、记忆能力和觅食策略。下一节将对这些行为进行数学建模,并提出一种人工蜂鸟算法。

2.数学模型

本节将介绍一种基于蜂鸟智能行为的生物启发优化算法AHA。AHA的三个主要组成部分解释如下。

食物来源:在现实中,蜂鸟为了从一组食物源中选择一个合适的食物源,通常会评估食物源的属性,包括单朵花的花蜜质量和含量、花蜜填充率以及最后一次访问花朵的时间。在AHA中,为简化起见,假定每个食物源的花朵数量和类型相同;食物源是一个解向量,食物源的充蜜率用函数适配值表示。适应度值越高,食物源的花蜜填充率越高。

蜂鸟:每只蜂鸟总是被分配到一个特定的食物源,从那里它可以得到食物,然后这个蜂鸟和食物源有相同的位置。蜂鸟可以牢记这一特定食物源的位置和花蜜填充率,并与种群中的其他蜂鸟分享这一信息。此外,对每只蜂鸟而言,它还能记住每种食物源自己有多长时间没有光顾。

访问表: 访问表记录了不同蜂鸟对每种食物源的访问级别,表示同一蜂鸟上次访问某一食物源至今的时间。蜂鸟访问量高的食物源将被优先访问。为了获得更多的花蜜,蜂鸟需要获得食物来源的时空信息。有了这些信息,蜂鸟实际上可以有效地制定计划,避免再次光顾最近采样过的花朵。关于个体经历的记忆的使用和存储被称为外显记忆,以前常被用来区分动物和人类。有了这种独特的技能,蜂鸟成为高效的觅食者,并倾向于访问它们很久没有访问过的花朵,以获得更多的收获。

AHA算法是一种基于蜂群的元启发式方法,用于解决优化问题。本小节提供了三个模拟蜂鸟三种觅食行为的数学模型:引导觅食、领地觅食和迁徙觅食。这三种觅食行为如图2所示。与大多数基于蜂群的优化算法类似,本算法的结构可分为三个主要阶段。

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

2.1 初始化

将n只蜂鸟种群置于n个食物源上,随机初始化如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

其中,Low和Up分别为d维问题的上边界和下边界,r为[0, 1]中的随机向量,xi表示作为给定问题解的第i个食物源的位置。

食物来源访问表初始化如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

其中,对于i = j,VTi ,j = null表示蜂鸟正在其特定食物源取食;对于i ̸= j,VTi ,j = 0表示第j个食物源在当前迭代中刚刚被第i只蜂鸟访问过。

2.2 指导觅食

每只蜂鸟都有访问花蜜量最大的食物源的自然倾向,这意味着目标食物源需要有较高的花蜜填充率和蜂鸟较长的未访问时间。因此,在AHA中,蜂鸟应该确定觅食行为中访问量最大的食物源,然后从中选择花蜜填充率最高的食物源作为目标食物源。确定目标食物源后,蜂鸟就可以飞向该食物源取食。

在觅食过程中,包括全向飞行、对角飞行和轴向飞行在内的三种飞行技能被充分使用,并通过引入方向切换向量在AHA算法中建模。该向量用于控制d维空间中的一个或多个方向是否可用。图3显示了三维空间中的三种飞行行为。可以看出,轴向飞行表明蜂鸟可以沿任意坐标轴飞行;对角线飞行允许蜂鸟从矩形的一角横向移动到对角,由三个坐标轴中的任意两个坐标轴决定。全向飞行表明,任何飞行方向都可以投射到三个坐标轴中的每一个坐标轴上。换句话说,所有鸟类都使用全向飞行,但只有蜂鸟掌握轴向和对角线飞行。

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

这些飞行模式可以扩展到d-D空间,其中轴向飞行定义如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

对角线飞行的定义如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

全向飞行的定义如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

其中 randi([1, d]) 产生一个从 1 到 d 的随机整数,randperm(k) 产生一个从 1 到 k 的随机整数排列,r1 是 (0, 1] 中的一个随机数。d-D空间中的对角线飞行在超矩形内,超矩形由任意2到d-1坐标轴围成。蜂鸟在三维空间中使用三种飞行技巧的运动如图4所示,图中红线代表全向飞行,绿线代表对角飞行,蓝线代表轴向飞行。图中,蜂鸟需要从(4,4,4)移动到(0,0,0)。经过8个单位的时间后,蜂鸟能够通过三种不同的飞行技巧到达所需的点。这表明飞行技能的数学模型能够模拟蜂鸟在三维和多维空间中的搜索行为。

通过这些飞行能力,蜂鸟可以访问其目标食物源,从而获得候选食物源。因此,蜂鸟会从旧的食物源更新为从所有现有食物源中选择的目标食物源。模拟引导觅食行为和候选食物源的数学公式如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法#pic_center)

其中,xi(t)为第i个食物源在t时刻的位置,xi,tar(t)为第i只蜂鸟打算访问的目标食物源的位置,a为引导因子,服从均值=0、标准差=1的正态分布N(0, 1)。式(6)使每个当前食物源更新其在目标食物源附近的位置,并模拟蜂鸟通过不同飞行模式的引导觅食。第i个食物源的位置更新如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

其中f(·)表示函数适配值。式(8)表明,如果候选食物源的花蜜填充率优于当前食物源的花蜜填充率,蜂鸟就会放弃当前食物源,留在式(6)得到的候选食物源中觅食。

在AHA算法中,访问表是存储食物源访问信息的重要组件。蜂鸟每次迭代都可以根据访问表找到它要访问的目标食物源。访问表记录了每种食物源自上次被同一蜂鸟访问后多长时间未被访问,未被访问的时间越长表示访问水平越高。每只蜂鸟都希望选择访问量最高的食物源。如果有多个食物源的最高访问水平相同,则选择花蜜填充率最好的食物源作为蜂鸟访问的目标食物源。种群中的每只蜂鸟通过公式(6)访问自己的目标食物源。在每次迭代中,当蜂鸟使用公式(6)对其目标食物源进行引导觅食时,该蜂鸟的其他食物源的访问水平递增1,其访问的目标食物源的访问水平初始化为0。蜂鸟进行引导觅食后,如果没有更好的花蜜填充率(解决方案),蜂鸟将不会改变其食物源;如果有更好的花蜜填充率(解决方案),蜂鸟将用新的食物源替代当前的食物源,然后蜂鸟将停留在新的食物源。相应蜂鸟所在食物源的更新表明所有其他蜂鸟对该食物源的访问级别更新。需要更新的访问级别被设置为其他食物源的最高级别,并以1递增。

图5显示了一组六个食物源的访问表,上面放置了六只蜂鸟。访问表中的数字是蜂鸟的访问级别,表示蜂鸟有多长时间没有访问食物源。例如,蓝色数字 "8 "表示蜂鸟x2在蜂鸟x5居住的食物源上8个时间段内没有光顾。

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

下面的示例(最小化问题)显示了如何维护访问表,以及如何在引导觅食策略中为每只蜂鸟选择目标食物源。

给定蜂鸟种群数量为4只,蜂鸟的位置和访问表分别用式(1)和(2)初始化。第一只蜂鸟发现三个具有相同最高访问水平的食物源,其中蜂鸟x4的食物源具有最高的花蜜填充率。因此,该食物源是第一只蜂鸟的目标食物源。对该蜂鸟执行公式(6)和(8)后,蜂鸟x2和x3的食物源的访问水平增加1,因为蜂鸟x1都没有访问这两个食物源,目标食物源x4初始化为0。 图6(a)显示了第一只蜂鸟的访问水平更新和目标食物源的选择。

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

第二只蜂鸟发现了三个具有相同最高访问水平的食物源,其中蜂鸟x4的食物源具有最高的花蜜填充率。因此,蜂鸟x4的食物源是第二只蜂鸟的目标食物源。对第二只蜂鸟执行公式(6)和(8)后,蜂鸟x1和x3的食物源的访问水平增加1,目标食物源x4初始化为0。蜂鸟x2的蜜源被候选蜂鸟v2替代,因为候选蜂鸟v2的采蜜率比蜜源x2的采蜜率高,因此,其他蜂鸟的蜜源x2的访问水平需要改为最高访问水平,每行增加1。图6(b)显示了第二只蜂鸟的访问水平更新和目标食物源的选择。

对于第三只蜂鸟,蜂鸟x2的食物源由于其最高的访问水平而成为目标食物源,因此蜂鸟x1和x4的食物源的访问水平增加1,目标食物源x2的访问水平初始化为0。第三只蜂鸟的访问水平更新和目标食物源的选择如图6(c)所示。

对于第4只蜂鸟,蜂鸟x2的目标食物源是其访问水平最高的食物源,因此蜂鸟x2的访问水平初始化为0,蜂鸟x1和x3的食物源访问水平增加1。由于蜂鸟x4被替换为候选食物源v4,因此其他每只蜂鸟的食物源x4的访问水平在每一行都需要改变为访问水平增加1的最高食物源。图6(d)显示了第4只蜂鸟的访问水平更新和目标食物源的选择。经过一次迭代后,蜂鸟的更新访问表如图7所示。

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

2.3 领地觅食

蜂鸟在目标食物源采食花蜜后,很可能会寻找新的食物源,而不是去其他现有的食物源。因此,蜂鸟可以很容易地在自己的领地内移动到邻近区域,在那里可能会发现一个新的食物源作为候选方案,该方案可能比当前方案更好。模拟蜂鸟在领地觅食策略中的局部搜索和候选食物源的数学方程如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

其中,b为地域因子,服从均值=0、标准差=1的正态分布N(0,1)。式(9)可以使任何蜂鸟通过其特殊的飞行技能,根据其个人位置在其本地附近轻松地找到新的食物来源。在执行地域觅食策略后,应更新访问表。

2.4 迁徙觅食

当蜂鸟经常光顾的区域缺乏食物时,蜂鸟通常会迁徙到更远的食物源觅食。在AHA算法中,定义了一个迁移系数。如果迭代次数超过迁移系数的预定值,则蜂鸟将迁移到整个搜索空间中随机产生的新的食物源。此时,蜂鸟将放弃旧的食物源,在新的食物源停留觅食,然后更新访问表。蜂鸟从花蜜填充率最差的食物源迁移到随机产生的新食物源的觅食过程如下:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

其中,xwor为种群中花蜜填充率最差的食物源。

在引导觅食策略中,当没有食物源的位置被调整时,蜂鸟倾向于向作为各自目标食物源的不同食物源移动,导致蜂鸟的探索程度较高,收敛到局部最优的概率较低。当有一个食物源被新的食物源更新时,更新后的食物源比旧的食物源更有可能作为相同的目标食物源,会引导驻扎在其他不同食物源的蜂鸟向其移动,从而导致蜂鸟更高的利用率。考虑到式(6),在迭代的早期阶段,由于食物源之间的距离较远,因此强调探索,而随着迭代次数的增加,食物源之间的距离适应性地减小,因此强调开发。在地域性觅食策略中,蜂鸟在本地附近进行开发。此外,蜂鸟的迁徙觅食表明蜂鸟在搜索空间中实施了探索过程。

在AHA中,除了种群数量和最大迭代次数这两个常用参数外,在考虑是否进行迁移时只需要确定一个控制参数。在最坏的情况下,如果在进行引导觅食和领地觅食时所有食物源都没有替换,蜂鸟将根据每次迭代的访问表轮流访问每个食物源作为其目标源。假定蜂鸟在引导觅食或领地觅食中选择的概率为50%,并且在引导觅食中访问其它食物源的概率相同。因此,在最坏的情况下,蜂鸟可能在迭代2n次后访问与目标食物源相同的食物源。在这种情况下,需要执行迁移觅食策略来改善停滞和探索搜索空间。因此,建议采用以下与种群数量相关的迁移系数定义:

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

3.文件结构

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

AHA.m							% 人工蜂鸟算法
BenFunctions.m					% 基准函数
FunRange.m						% 范围函数
main.m							% 主函数
SpaceBound.m					% 速度约束

4.伪代码

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

5.详细代码及注释

5.1 AHA.m

function [BestX,BestF,HisBestFit,VisitTable]=AHA(FunIndex,MaxIt,nPop)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FunIndex: The index of function.                    %
% MaxIt: The maximum number of iterations.            %
% nPop: The size of hummingbird population.           %
% PopPos: The position of population.                 %
% PopFit: The fitness of population.                  %
% Dim: The dimensionality of prloblem.                %
% BestX: The best solution found so far.              %
% BestF: The best fitness corresponding to BestX.     %
% HisBestFit: History best fitness over iterations.   %
% Low: The low boundary of search space               %
% Up: The up boundary of search space.                %
% VisitTable: The visit table.                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Low,Up,Dim]=FunRange(FunIndex);
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,:),FunIndex,Dim);
end

BestF=inf;
BestX=[];

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

% Initialize visit table
HisBestFit=zeros(MaxIt,1);
VisitTable=zeros(nPop) ;
VisitTable(logical(eye(nPop)))=NaN;

for It=1:MaxIt
    DirectVector=zeros(nPop,Dim);% Direction vector/matrix
    
    for i=1:nPop
        r=rand;
        if r<1/3     % Diagonal flight
            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;
        else
            if r>2/3  % Omnidirectional flight
                DirectVector(i,:)=1;
            else  % Axial flight
                RandNum=ceil(rand*Dim);
                DirectVector(i,RandNum)=1;
            end
        end
        
        if rand<0.5   % Guided foraging
            [MaxUnvisitedTime,TargetFoodIndex]=max(VisitTable(i,:));
            MUT_Index=find(VisitTable(i,:)==MaxUnvisitedTime);
            if length(MUT_Index)>1
                [~,Ind]= min(PopFit(MUT_Index));
                TargetFoodIndex=MUT_Index(Ind);
            end
            
            newPopPos=PopPos(TargetFoodIndex,:)+randn*DirectVector(i,:).*...
                (PopPos(i,:)-PopPos(TargetFoodIndex,:));
            newPopPos=SpaceBound(newPopPos,Up,Low);
            newPopFit=BenFunctions(newPopPos,FunIndex,Dim);
            
            if newPopFit<PopFit(i)
                PopFit(i)=newPopFit;
                PopPos(i,:)=newPopPos;
                VisitTable(i,:)=VisitTable(i,:)+1;
                VisitTable(i,TargetFoodIndex)=0;
                VisitTable(:,i)=max(VisitTable,[],2)+1;
                VisitTable(i,i)=NaN;
            else
                VisitTable(i,:)=VisitTable(i,:)+1;
                VisitTable(i,TargetFoodIndex)=0;
            end
        else    % Territorial foraging
            newPopPos= PopPos(i,:)+randn*DirectVector(i,:).*PopPos(i,:);
            newPopPos=SpaceBound(newPopPos,Up,Low);
            newPopFit=BenFunctions(newPopPos,FunIndex,Dim);
            if newPopFit<PopFit(i)
                PopFit(i)=newPopFit;
                PopPos(i,:)=newPopPos;
                VisitTable(i,:)=VisitTable(i,:)+1;
                VisitTable(:,i)=max(VisitTable,[],2)+1;
                VisitTable(i,i)=NaN;
            else
                VisitTable(i,:)=VisitTable(i,:)+1;
            end
        end
    end
    
    if mod(It,2*nPop)==0 % Migration foraging
        [~, MigrationIndex]=max(PopFit);
        PopPos(MigrationIndex,:) =rand(1,Dim).*(Up-Low)+Low;
        PopFit(MigrationIndex)=BenFunctions(PopPos(MigrationIndex,:),FunIndex,Dim);
        VisitTable(MigrationIndex,:)=VisitTable(MigrationIndex,:)+1;
        VisitTable(:,MigrationIndex)=max(VisitTable,[],2)+1;
        VisitTable(MigrationIndex,MigrationIndex)=NaN;
    end
    
    for i=1:nPop
        if PopFit(i)<BestF
            BestF=PopFit(i);
            BestX=PopPos(i,:);
        end
    end
    
    HisBestFit(It)=BestF;
end

5.2 BenFunctions.m


function Fit=BenFunctions(X,FunIndex,Dim)




switch FunIndex
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%unimodal function%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %Sphere
    case 1
        Fit=sum(X.^2);
        
        %Schwefel 2.22
    case 2
        Fit=sum(abs(X))+prod(abs(X));
        
        %Schwefel 1.2
    case 3
        Fit=0;
        for i=1:Dim
            Fit=Fit+sum(X(1:i))^2;
        end
        
        %Schwefel 2.21
    case 4
        Fit=max(abs(X));
        
        %Rosenbrock
    case 5
        Fit=sum(100*(X(2:Dim)-(X(1:Dim-1).^2)).^2+(X(1:Dim-1)-1).^2);
        
        %Step
    case 6
        Fit=sum(floor((X+.5)).^2);
        
        %Quartic
    case 7
        Fit=sum([1:Dim].*(X.^4))+rand;
        
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%multimodal function%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        
        %Schwefel
    case 8
        Fit=sum(-X.*sin(sqrt(abs(X))));
        
        %Rastrigin
    case 9
        Fit=sum(X.^2-10*cos(2*pi.*X))+10*Dim;
        
        %Ackley
    case 10
        Fit=-20*exp(-.2*sqrt(sum(X.^2)/Dim))-exp(sum(cos(2*pi.*X))/Dim)+20+exp(1);
        
        %Griewank
    case 11
        Fit=sum(X.^2)/4000-prod(cos(X./sqrt([1:Dim])))+1;
        
        %Penalized
    case 12
        a=10;k=100;m=4;
        Dim=length(X);
        Fit=(pi/Dim)*(10*((sin(pi*(1+(X(1)+1)/4)))^2)+sum((((X(1:Dim-1)+1)./4).^2).*...
            (1+10.*((sin(pi.*(1+(X(2:Dim)+1)./4)))).^2))+((X(Dim)+1)/4)^2)+sum(k.*...
            ((X-a).^m).*(X>a)+k.*((-X-a).^m).*(X<(-a)));
        
        %Penalized2
    case 13
        a=10;k=100;m=4;
        Dim=length(X);
        Fit=.1*((sin(3*pi*X(1)))^2+sum((X(1:Dim-1)-1).^2.*(1+(sin(3.*pi.*X(2:Dim))).^2))+...
            ((X(Dim)-1)^2)*(1+(sin(2*pi*X(Dim)))^2))+sum(k.*...
            ((X-a).^m).*(X>a)+k.*((-X-a).^m).*(X<(-a)));
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%fixed-dimensionalmultimodalfunction%%%%%%%%%%%%%%
        
        %Foxholes
    case 14
        a=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
            -32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];
        for j=1:25
            b(j)=sum((X'-a(:,j)).^6);
        end
        Fit=(1/500+sum(1./([1:25]+b))).^(-1);
        
        %Kowalik
    case 15
        a=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
        b=[.25 .5 1 2 4 6 8 10 12 14 16];b=1./b;
        Fit=sum((a-((X(1).*(b.^2+X(2).*b))./(b.^2+X(3).*b+X(4)))).^2);
        
        %Six Hump Camel
    case 16
        Fit=4*(X(1)^2)-2.1*(X(1)^4)+(X(1)^6)/3+X(1)*X(2)-4*(X(2)^2)+4*(X(2)^4);
        
        %Branin
    case 17
        Fit=(X(2)-(X(1)^2)*5.1/(4*(pi^2))+5/pi*X(1)-6)^2+10*(1-1/(8*pi))*cos(X(1))+10;
        
        %GoldStein-Price
    case 18
        Fit=(1+(X(1)+X(2)+1)^2*(19-14*X(1)+3*(X(1)^2)-14*X(2)+6*X(1)*X(2)+3*X(2)^2))*...
            (30+(2*X(1)-3*X(2))^2*(18-32*X(1)+12*(X(1)^2)+48*X(2)-36*X(1)*X(2)+27*(X(2)^2)));
        
        %Hartman 3
    case 19
        a=[3 10 30;.1 10 35;3 10 30;.1 10 35];c=[1 1.2 3 3.2];
        p=[.3689 .117 .2673;.4699 .4387 .747;.1091 .8732 .5547;.03815 .5743 .8828];
        Fit=0;
        for i=1:4
            Fit=Fit-c(i)*exp(-(sum(a(i,:).*((X-p(i,:)).^2))));
        end
        
        %Hartman 6
    case 20
        af=[10 3 17 3.5 1.7 8;.05 10 17 .1 8 14;3 3.5 1.7 10 17 8;17 8 .05 10 .1 14];
        cf=[1 1.2 3 3.2];
        pf=[.1312 .1696 .5569 .0124 .8283 .5886;.2329 .4135 .8307 .3736 .1004 .9991;...
            .2348 .1415 .3522 .2883 .3047 .6650;.4047 .8828 .8732 .5743 .1091 .0381];
        Fit=0;
        for i=1:4
            Fit=Fit-cf(i)*exp(-(sum(af(i,:).*((X-pf(i,:)).^2))));
        end
        
        %Shekel 5
    case 21
        a=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
        c=[0.1 0.2 0.2 0.4 0.4 0.6 0.3 0.7 0.5 0.5];
        Fit=0;
        for i=1:5
            Fit=Fit-1/((X-a(i,:))*(X-a(i,:))'+c(i));
        end
        
        %Shekel 7
    case 22
        a=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
        c=[0.1 0.2 0.2 0.4 0.4 0.6 0.3 0.7 0.5 0.5];
        Fit=0;
        for i=1:7
            Fit=Fit-1/((X-a(i,:))*(X-a(i,:))'+c(i));
        end
        
        %Shekel 10
    otherwise
        a=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
        c=[0.1 0.2 0.2 0.4 0.4 0.6 0.3 0.7 0.5 0.5];
        Fit=0;
        for i=1:10
            Fit=Fit-1/((X-a(i,:))*(X-a(i,:))'+c(i));
        end
        
end

5.3 FunRange.m



function [Low,Up,Dim]=FunRange(FunIndex)

Dim=30;

switch FunIndex
    
    case 1
        Low=-100;Up=100;
        
        
    case 2
        Low=-10;Up=10;
        
        
    case 3
        Low=-100;Up=100;
        
        
    case 4
        Low=-100;Up=100;
        
        
    case 5
        Low=-30;Up=30;
        
        
    case 6
        Low=-100;Up=100;
        
        
    case 7
        Low=-1.28;Up=1.28;
        
        
    case 8
        Low=-500;Up=500;
        
        
    case 9
        Low=-5.12;Up=5.12;
        
        
    case 10
        Low=-32;Up=32;
        
        
    case 11
        Low=-600;Up=600;
        
        
    case 12
        Low=-50;Up=50;
        
        
    case 13
        Low=-50;Up=50;
        
        
    case 14
        Low=-65.536;Up=65.536;Dim=2;
        
        
    case 15
        Low=-5;Up=5;Dim=4;
        
        
    case 16
        Low=-5;Up=5;Dim=2;
        
        
    case 17
        Low=[-5 0];Up=[10 15];Dim=2;
        
        
    case 18
        Low=-2;Up=2;Dim=2;
        
        
    case 19
        Low=0;Up=1;Dim=3;
        
        
    case 20
        Low=0;Up=1;Dim=6;
        
        
    case 21
        Low=0;Up=10;Dim=4;
        
        
    case 22
        Low=0;Up=10;Dim=4;
        
        
    otherwise
        Low=0;Up=10;Dim=4;
        
end

5.4 main.m

clc;
clear;
MaxIteration=1000;
PopSize=50;
FunIndex=1;
[BestX,BestF,HisBestF]=AHA(FunIndex,MaxIteration,PopSize);

display(['FunIndex=', num2str(FunIndex)]);
display(['The best fitness is: ', num2str(BestF)]);
%display(['The best solution is: ', num2str(BestX)]);
if BestF>0
    semilogy(HisBestF,'r','LineWidth',2);
else
    plot(HisBestF,'r','LineWidth',2);
end
xlabel('Iterations');
ylabel('Fitness');
title(['F',num2str(FunIndex)]);

5.5 SpaceBound.m

function  X=SpaceBound(X,Up,Low)
Dim=length(X);
S=(X>Up)+(X<Low);
X=(rand(1,Dim).*(Up-Low)+Low).*S+X.*(~S);

6.运行结果

【Matlab】智能优化算法_人工蜂鸟算法AHA,# matlab与智能优化算法,matlab,算法

7.参考文献

[1]Weiguo Z,Liying W,Seyedali M. Artificial hummingbird algorithm: A new bio-inspired optimizer with its engineering applications[J]. Computer Methods in Applied Mechanics and Engineering,2022,388.文章来源地址https://www.toymoban.com/news/detail-572919.html

到了这里,关于【Matlab】智能优化算法_人工蜂鸟算法AHA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能优化算法——哈里鹰算法(Matlab实现)

    目录 1 算法简介 2 算法数学模型 2.1.全局探索阶段 2.2 过渡阶段 2.3.局部开采阶段 3 求解步骤与程序框图 3.1 步骤 3.2 程序框图  4 matlab代码及结果 4.1 代码 4.2 结果  哈里斯鹰算法(Harris Hawks Optimization,HHO),是由Ali Asghar Heidari和Seyedali Mrjaili于2019年提出的一种新型仿生智能优化算

    2024年02月13日
    浏览(45)
  • 【Matlab】智能优化算法_遗传算法GA

    遗传算法(Genetic Algorithm,简称GA)是一种基于生物进化理论的优化算法,由John Holland于20世纪70年代初提出。它通过模拟自然选择和遗传机制,利用群体中个体之间的遗传信息交流和变异来搜索问题的解空间。 遗传算法的设计灵感来源于达尔文的进化论。达尔文提出,自然界

    2024年02月16日
    浏览(54)
  • Matlab之智能优化算法函数调用

    目录 1.句柄函数 2.遗传算法 3.粒子群算法 4.模拟退火 1.句柄函数         句柄函数即我们要求的目标函数,以下三种算法的调用仅是求解最小值,若要求目标函数的最大值,可在返回结果中加负号。 句柄函数图像:                          画图代码: 2.遗传算

    2024年02月10日
    浏览(41)
  • 【Matlab】智能优化算法_麻雀搜索算法SSA

    麻雀通常是群居的鸟类,有很多种类。它们分布在世界的大部分地区,喜欢生活在人类生活的地方。此外,它们是杂食性鸟类,主要以谷物或杂草的种子为食。众所周知,麻雀是常见的留鸟。与其他许多小鸟相比,麻雀有很强的智慧,有很强的记忆力。请注意,有两种不同类

    2024年02月15日
    浏览(65)
  • 【Matlab】智能优化算法_北方苍鹰算法NGO

    北方苍鹰是一种猛禽,其狩猎策略代表了一个优化过程。在这种策略中,北方苍鹰首先选择猎物并攻击它,然后在追逐过程中猎杀选定的猎物。 本文的创新之处在于设计了一种新的基于苍鹰的优化算法,称为北方苍鹰优化(NGO),模仿北方猎鹰的行为。拟议的NGO算法的各个步

    2024年02月03日
    浏览(35)
  • 【Matlab】智能优化算法_樽海鞘群算法SSA

    樽海鞘,身体呈透明的桶状。它们的组织与水母非常相似。它们的运动也非常类似于水母,在水母中,水被泵送通过身体作为推进向前运动。输卵管的形状如图1(a)所示。 关于这种生物的生物学研究处于早期阶段,主要是因为它们的生活环境极难进入,而且很难将它们保存

    2024年02月12日
    浏览(39)
  • 【Matlab】智能优化算法_海洋捕食者算法MPA

    在介绍所提出的算法的步骤之前,需要知道(i)布朗运动和(ii)莱维运动的两个主要随机游动的数学模型。 标准布朗运动是一个随机过程,其中它们的步长是从由零均值(μ=0)和单位方差(σ2=1)的正态(高斯)分布定义的概率函数中得出的。该运动在x点的支配可能密度

    2024年02月13日
    浏览(36)
  • MATLAB算法实战应用案例精讲-【智能优化算法】哈里斯鹰(HHO)(附matlab代码实现)

    目录 前言 算法原理 算法思想 1. 探索阶段 2.探索到开发的转换 3

    2024年02月16日
    浏览(45)
  • 【经济调度】基于多目标宇宙优化算法优化人工神经网络环境经济调度研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及数据 基于

    2024年02月16日
    浏览(49)
  • MATLAB算法实战应用案例精讲-【人工智能】机器视觉(概念篇)(最终篇)

    目录 前言 几个高频面试题目 如何评价一个光源的好坏?

    2024年02月02日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包