最新算法:​河马优化(HO),帮你试过了,效果还不错!原理公式详解,附matlab代码...

河马优化算法(Hippopotamus Optimization AlgorithmHO)是一种群智能优化算法,HO算法是从河马观察到的固有行为中汲取灵感而构思的,例如它们在河流或池塘中的位置更新,对捕食者的防御策略以及逃避捕食者的方法。该算法通过自适应地调整搜索空间的分辨率和搜索速度,以快速而准确地找到最优解,具有收敛速度快、求解精度高等特点,是一种不错的优化算法。该成果于2023年发表在知名SCI期刊、JCRQ1:Mathematics上。

0a758e347ffa858fd7821c518e8700ba.png

HOA从河马生活中观察到的三种突出的行为模式中获得灵感,该模型结合了它们在河流或池塘中的位置更新、对捕食者的防御策略和逃避方法。

第一种行为模式:河马群由几只雌性河马、河马幼崽、多只成年雄性河马和一只占统治地位的雄性河马组成,由于它们天生的好奇心,幼河马和幼河马经常表现出离开群体的倾向。因此,它们可能会被孤立,成为捕食者的目标。

第二种行为模式是防御性的,当它们受到捕食者的攻击或其他生物侵入它们的领地时就会触发。狮子和斑点鬣狗等捕食者对这种现象有意识,并积极寻求避免直接暴露于河马可怕的下颚,作为预防潜在伤害的预防措施。

最后一种行为模式包含了河马逃离捕食者的本能反应,并积极寻求远离潜在危险的区域。在这种情况下,河马会努力向最近的水体航行,比如河流或池塘,因为狮子和斑点鬣狗经常表现出对进入水生环境的厌恶。

aa0f2e34fee80eea408621c0f89d6f6c.png

1、算法原理

(1)初始化

HO是一种基于种群的优化算法,其中搜索代理是随机的。在HO算法中,河马是优化问题的候选解,这意味着每个河马在搜索空间中的位置更新表示决策变量的值。类似于传统的优化算法,HO的初始化阶段涉及随机初始解的生成。在此步骤中,使用以下公式生成决策变量的向量:

其中,表示第个候选解的位置,是0到1范围内的随机数,并且和分别表示第个决策变量的下限和上限。其中表示兽群中河马的种群大小,表示问题中决策变量的个数,种群矩阵由式(2)表示。

(2)河马在河流或池塘中的位置更新

河马群由几只成年雌性河马、小河马、多只成年雄性河马和占统治地位的雄性河马组成。根据目标函数值迭代确定优势河马(最小化问题最低,最大化问题最高)。通常,河马倾向于彼此靠近地聚集在一起。占统治地位的雄性河马保护兽群和领地免受潜在威胁。多只雌性河马被安置在雄性河马周围。成年后,雄性河马会被占统治地位的雄性赶出兽群。这些被驱逐的雄性个体被要求吸引雌性或与其他已建立的雄性成员进行统治竞争,以建立自己的统治地位。下式表示了群体中雄性河马成员在湖泊或池塘中的位置的数学表示。

在式中,表示雄性河马的位置,表示优势河马的位置(即当前迭代中成本最优的河马)。

如果t大于0.6,则表明未成熟的河马已经远离母河马,下式描述了雄性和雌性或未成熟河马在群体中的位置更新。F为目标函数值。

МКірроВпірроВћіррое

在第二种行为中,通过使用h向量、I1和l2场景增强了HO算法的全局搜索,提高了算法的探索能力。该算法具有较好的全局搜索性能,提高了算法的搜索速度。

(3)河马防御捕食者(探索阶段)

河马采用的主要防御策略是迅速转向捕食者,并发出响亮的叫声,以阻止捕食者靠近它们。在这个阶段,河马可能会表现出接近捕食者的行为,以诱导其撤退,从而有效地抵御潜在的威胁。下式表示捕食者在搜索空间中的位置。

其中表示一个从0到1的随机向量。

该式表示第i只河马到捕食者的距离。在此期间,河马采取了一种基于捕食者因素的防御行为,以保护自己免受捕食者的侵害。如果predator小于F,表明捕食者离河马非常近,在这种情况下,河马迅速转向捕食者,并向它移动,使它撤退。predator越大,表示捕食者或入侵实体处于较大状态。

由以下公式可知,如果某只河马已被猎取,则说明该河马已被猎取,将会有另一只河马在群中取代它,否则猎取者逃跑,该河马将返回群中。在第二阶段,在全局搜索过程中观察到显著的增强。第一阶段和第二阶段相辅相成,有效地降低了陷入局部最小值的风险。

(4)河马逃离捕食者(剥削阶段)

未成熟的河马,甚至是成年的河马,如果与兽群分离,面对一群狮子或斑点鬣狗,都很容易受到捕食者的攻击。在这种情况下,河马试图离开该区域。通常,河马试图跑到最近的湖泊或池塘,以避免捕食者的伤害,因为斑点狮子和鬣狗避免进入湖泊或池塘。这种策略导致河马在当前位置附近找到一个安全的位置,并在HO的第三阶段模拟这种行为,从而增强了在局部搜索中的开发能力。这种策略导致河马找到一个靠近当前位置的安全位置,并在HO的第三阶段模拟这种行为,从而增强了利用局部搜索的能力。为了模拟这种行为,在河马当前位置附近生成一个随机位置。

根据下式对河马的这种行为进行建模。当新创建的位置提高了成本函数值时,表明河马在当前位置附近找到了一个更安全的位置,并相应地改变了自己的位置。t表示当前迭代。

在式中,是为寻找最近的安全地点而搜索河马的位置.

在该式中,表示0到1之间的随机向量,表示生成的随机数,取值范围为0~1,另外,是正态分布的随机数。

2、结果展示

47e1cc18f6e3fce7f49a7951e4942cf6.png

ee0012eed289c8bcd8804c8f4ae6590f.png

bb1da93d7f023f42a6805086cbd22b73.png

5ce1614ec0f74d09a71bc421d0a1c46d.png

2a2ae13764c8bb17f7e7e8dbe43c498b.png

可以看到,该算法基本不会陷入局部最优解。搜索效率也还不错!

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 河马优化算法(HOA)
%% Designed and Developed by Mohammad Hussien Amiri and Nastaran Mehrabi Hashjin
function[Best_score,Best_pos,HO_curve]=HO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness)

lowerbound=ones(1,dimension).*(lowerbound);                              % Lower limit for variables
upperbound=ones(1,dimension).*(upperbound);                              % Upper limit for variables

%% Initialization
for i=1:dimension
    X(:,i) = lowerbound(i)+rand(SearchAgents,1).*(upperbound(i) - lowerbound(i));                          % Initial population
end

for i =1:SearchAgents
    L=X(i,:);
    fit(i)=fitness(L);
end

%% Main Loop
for t=1:Max_iterations
    %% Update the Best Condidate Solution
    [best , location]=min(fit);
    if t==1
        Xbest=X(location,:);                                  % Optimal location
        fbest=best;                                           % The optimization objective function
    elseif best<fbest
        fbest=best;
        Xbest=X(location,:);
    end

    for i=1:SearchAgents/2

        %% Phase1: The hippopotamuses position update in the river or pond (Exploration)
        Dominant_hippopotamus=Xbest;
        I1=randi([1,2],1,1);
        I2=randi([1,2],1,1);
        Ip1=randi([0,1],1,2);
        RandGroupNumber=randperm(SearchAgents,1);
        RandGroup=randperm(SearchAgents,RandGroupNumber);

        % Mean of Random Group
        MeanGroup=mean(X(RandGroup,:)).*(length(RandGroup)~=1)+X(RandGroup(1,1),:)*(length(RandGroup)==1);
        Alfa{1,:}=(I2*rand(1,dimension)+(~Ip1(1)));
        Alfa{2,:}= 2*rand(1,dimension)-1;
        Alfa{3,:}= rand(1,dimension);
        Alfa{4,:}= (I1*rand(1,dimension)+(~Ip1(2)));
        Alfa{5,:}=rand;
        A=Alfa{randi([1,5],1,1),:};
        B=Alfa{randi([1,5],1,1),:};
        X_P1(i,:)=X(i,:)+rand(1,1).*(Dominant_hippopotamus-I1.*X(i,:));
        T=exp(-t/Max_iterations);
        if T>0.6
            X_P2(i,:)=X(i,:)+A.*(Dominant_hippopotamus-I2.*MeanGroup);
        else
            if rand()>0.5
                X_P2(i,:)=X(i,:)+B.*(MeanGroup-Dominant_hippopotamus);
            else
                X_P2(i,:)=((upperbound-lowerbound)*rand+lowerbound);
            end

        end
        X_P2(i,:) = min(max(X_P2(i,:),lowerbound),upperbound);

        L=X_P1(i,:);
        F_P1(i)=fitness(L);
        if(F_P1(i)<fit(i))
            X(i,:) = X_P1(i,:);
            fit(i) = F_P1(i);
        end

        L2=X_P2(i,:);
        F_P2(i)=fitness(L2);
        if(F_P2(i)<fit(i))
            X(i,:) = X_P2(i,:);
            fit(i) = F_P2(i);
        end
    end
    %% Phase 2: Hippopotamus defense against predators (Exploration)
    for i=1+SearchAgents/2 :SearchAgents
        predator=lowerbound+rand(1,dimension).*(upperbound-lowerbound); 
        L=predator;
        F_HL=fitness(L);
        distance2Leader=abs(predator-X(i,:));
        b=unifrnd(2,4,[1 1]);
        c=unifrnd(1,1.5,[1 1]);
        d=unifrnd(2,3,[1 1]);
        l=unifrnd(-2*pi,2*pi,[1 1]);
        RL=0.05*levy(SearchAgents,dimension,1.5);

        if fit(i)> F_HL
            X_P3(i,:)=RL(i,:).*predator+(b./(c-d*cos(l))).*(1./distance2Leader);
        else
            X_P3(i,:)=RL(i,:).*predator+(b./(c-d*cos(l))).*(1./(2.*distance2Leader+rand(1,dimension)));
        end
        X_P3(i,:) = min(max(X_P3(i,:),lowerbound),upperbound);

        L=X_P3(i,:);
        F_P3(i)=fitness(L);

        if(F_P3(i)<fit(i))
            X(i,:) = X_P3(i,:);
            fit(i) = F_P3(i);
        end
    end

    %% Phase 3: Hippopotamus Escaping from the Predator (Exploitation)
    for i=1:SearchAgents
        LO_LOCAL=(lowerbound./t);
        HI_LOCAL=(upperbound./t);
        Alfa{1,:}= 2*rand(1,dimension)-1;
        Alfa{2,:}= rand(1,1);
        Alfa{3,:}=randn;
        D=Alfa{randi([1,3],1,1),:};
        X_P4(i,:)=X(i,:)+(rand(1,1)).*(LO_LOCAL+D.* (HI_LOCAL-LO_LOCAL));
        X_P4(i,:) = min(max(X_P4(i,:),lowerbound),upperbound);

        L=X_P4(i,:);
        F_P4(i)=fitness(L);
        if(F_P4(i)<fit(i))
            X(i,:) = X_P4(i,:);
            fit(i) = F_P4(i);
        end

    end
    best_so_far(t)=fbest;
    disp(['Iteration ' num2str(t) ': Best Cost = ' num2str(best_so_far(t))]);

    Best_score=fbest;
    Best_pos=Xbest;
    HO_curve=best_so_far;

end

end

参考文献

[1] Amiri M H, Hash** N M, Montazeri M, et al. Hippopotamus Optimization Algorithm: A Novel Nature-Inspired Optimization Algorithm[J]. 2023.

完整代码获取方式:后台回复关键字:

TGDM199

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
【【预测模型-elm预测】基于海鸥算法优化极限学习机预测matlab代码.zip】是一个可用于预测的Matlab代码压缩文件。其中使用了极限学习机(Extreme Learning Machine,ELM)作为预测模型,并通过海鸥算法(Seagull Algorithm)对其进行优化。 ELM是一种训练速度快、预测精度高的机器学习算法,它通过随机初始化输入层到隐藏层的权重和偏置,然后利用正则化方法求解输出层的权重,从而使得神经网络的训练变得非常高效。ELM在处理大数据集时具有较好的性能,因为它可以通过增加隐藏层的神经元数量来提高训练速度和预测精度。 海鸥算法是一种基于自适应寻优策略的优化算法,它模拟了海鸥觅食的过程,通过觅食行为的学习来对ELM模型的参数进行调整。通过海鸥算法优化,可以进一步提高ELM模型的预测能力和效果。 这个Matlab代码压缩文件中,包含了使用ELM模型和海鸥算法优化的预测模型的实现代码。使用者可以根据需要进行参数的调整和优化,并根据自己的数据进行训练和预测。该代码文件可以助用户更好地理解ELM和海鸥算法的实现方式,并在自己的预测任务中应用这些算法。 总之,【【预测模型-elm预测】基于海鸥算法优化极限学习机预测matlab代码.zip】是一个使用ELM模型和海鸥算法优化的预测模型的Matlab代码压缩文件,可以助用户更好地进行预测任务的实现和优化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值