【智能算法】北方苍鹰优化算法(NGO)原理及实现

本文介绍了受北方苍鹰捕食行为启发的NGO算法,包括其识别与攻击和追逐逃避的策略,以及如何通过代码实现。算法通过模拟苍鹰搜索空间并调整位置来优化问题。以CEC2005测试函数为例展示了其在求解优化问题的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


1.背景

2022年,Mohammad等人受到北方苍鹰捕食自然行为影响,提出了北方苍鹰优化算法(Northern Goshawk Optimization,NGO)。

2.算法原理

2.1算法思想

北方苍鹰在捕猎过程中两个主要行为:识别和攻击以及追逐和逃避

2.2算法过程

群体位置初始化:
x = l b + r a n d ∗ ( u b − l b ) x=lb+rand*(ub-lb) x=lb+rand(ublb)
其中, u b , l b ub,lb ub,lb分别代表北方苍鹰上下位置边界。
识别与攻击
识别与攻击阶段通过在搜索空间中随机选择猎物以增强算法的探索能力,旨在全局搜索搜索空间,以确定最佳区域。
在这里插入图片描述

x i , j n e w , P 1 = { x i , j + r ( p i , j − I x i , j ) , F P i < F i x i , j + r ( x i , j − p i , j ) , F P i ≥ F i x_{i,j}^{new,P1}=\begin{cases}x_{i,j}+r\left(p_{i,j}-Ix_{i,j}\right),&F_{P_i}<F_i\\x_{i,j}+r\left(x_{i,j}-p_{i,j}\right),&F_{P_i} \geq F_i\end{cases} xi,jnew,P1={xi,j+r(pi,jIxi,j),xi,j+r(xi,jpi,j),FPi<FiFPiFi
其中, r , I r,I r,I是识别与攻击阶段随机数。接下来,根据适应度是否减少判断更新位置:
X i = { X i n e w , P 1 , F i n e w , P 1 < F i X i , F i n e w , P 1 ≥ F i X_i=\begin{cases}X_i^{new,P1},&F_i^{new,P1}<F_i\\X_i,&F_i^{new,P1}\geq F_i\end{cases} Xi={Xinew,P1,Xi,Finew,P1<FiFinew,P1Fi
追逐和逃避
北方苍鹰对猎物发起攻击后,猎物试图逃脱。因此,在一系列追逐和逃避的过程中,北方苍鹰持续追逐猎物。由于北方苍鹰的高速机动性,它们几乎可以在任何情况下追捕猎物,并最终捕获。这种行为模拟增强了算法对搜索空间中局部搜索的利用能力,这种捕猎行为与半径 R R R内的攻击位置密切相关。
在这里插入图片描述

x i , j n e w , P 2 = x i , j + R ( 2 r − 1 ) x i , j R = 0.02 ( 1 − t T ) X i = { X i n e w , P 2 , F i n e w , P 2 < F i X i , F i n e w , P 2 ≥ F i x_{i,j}^{new,P2}=x_{i,j}+R(2r-1)x_{i,j} \\ R=0.02\left(1-\frac tT\right) \\ X_i=\begin{cases}X_i^{new,P2},&F_i^{new,P2}<F_i\\X_i,&F_i^{new,P2}\geq F_i\end{cases} xi,jnew,P2=xi,j+R(2r1)xi,jR=0.02(1Tt)Xi={Xinew,P2,Xi,Finew,P2<FiFinew,P2Fi
这里,半径 R R R随着迭代次数 t t t增加从而逐渐减小,使得算法不断迭代直到收敛。
伪代码
在这里插入图片描述

3.代码实现

% 北方苍鹰优化算法
function [Best_pos, Best_fitness, Iter_curve, History_pos, History_best] = NGO(pop, maxIter, lb, ub, dim,fobj)
%input
%pop 种群数量
%dim 问题维数
%ub 变量上边界
%lb 变量下边界
%fobj 适应度函数
%maxIter 最大迭代次数
%output
%Best_pos 最优位置
%Best_fitness 最优适应度值
%Iter_curve 每代最优适应度值
%History_pos 每代种群位置
%History_best 每代最优个体位置
%% 记录
X_new=[];
fit=[];
fit_new=[];
Iter_curve=zeros(1,maxIter);
%% 初始化种群
X = zeros(pop, dim);
for i = 1:pop
    for j = 1:dim
        X(i,j) = (ub(j) - lb(j)) * rand() + lb(j);
    end
end
%% 计算适应度
for i =1:pop
    L=X(i,:);
    fit(i)=fobj(L);                  
end
%% 迭代
for t=1:maxIter
    [best , blocation]=min(fit);
    
    if t==1
        xbest=X(blocation,:);                                          
        fbest=best;                                          
    elseif best<fbest
        fbest=best;
        xbest=X(blocation,:);
    end
        
    for i=1:pop
        %% 识别与攻击
        I=round(1+rand);
        k=randperm(pop,1);
        P=X(k,:); % Eq. (3)
        F_P=fit(k);
        
        if fit(i)> F_P
            X_new(i,:)=X(i,:)+rand(1,dim) .* (P-I.*X(i,:)); % Eq. (4)
        else
            X_new(i,:)=X(i,:)+rand(1,dim) .* (X(i,:)-P); % Eq. (4)
        end
        % 边界约束
        X_new(i,:) = max(X_new(i,:),lb);
        X_new(i,:) = min(X_new(i,:),ub);
        
        % Eq (5)
        L=X_new(i,:);
        fit_new(i)=fobj(L);
        if(fit_new(i)<fit(i))
            X(i,:) = X_new(i,:);
            fit(i) = fit_new(i);
        end
        
        % 追逐和逃避
        R=0.02*(1-t/maxIter);% Eq.(6)
        X_new(i,:)= X(i,:)+ (-R+2*R*rand(1,dim)).*X(i,:);% Eq.(7)
        
        X_new(i,:) = max(X_new(i,:),lb);X_new(i,:) = min(X_new(i,:),ub);
        
        % update position based on Eq (8)
        L=X_new(i,:);
        fit_new(i)=fobj(L);
        if(fit_new(i)<fit(i))
            X(i,:) = X_new(i,:);
            fit(i) = fit_new(i);
        end
    end

    best_so_far(t)=fbest;
    average(t) = mean (fit);
    Best_fitness=fbest;
    Best_pos=xbest;
    Iter_curve(t)=Best_fitness;
    History_pos{t} = X;
    History_best{t} = Best_pos;
end

end

优化问题
以CEC2005测试函数为例
在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Dehghani M, Hubálovský Š, Trojovský P. Northern goshawk optimization: a new swarm-based algorithm for solving optimization problems[J]. Ieee Access, 2021, 9: 162059-162080.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小O的算法实验室

谢谢大佬的肯定!

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

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

打赏作者

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

抵扣说明:

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

余额充值