北方苍鹰优化算法(NGO)----开源免费MATLAB代码

1.算法简介

引用自:
北方苍鹰算法(NGO)是一种受北方苍鹰捕食行为启发的优化算法,于2021年在论文《Northern Goshawk Optimization: A New Swarm-Based Algorithm for Solving Optimization Problems》中提出。它模拟了苍鹰在狩猎过程中的猎物识别和攻击、追逐及逃生行为。
在这里插入图片描述

2.算法核心思想

2.1 第一阶段:猎物识别(探索)

北方苍鹰在狩猎的第一阶段,随机选择猎物,然后迅速攻击它。由于在搜索空间中猎物的选择是随机的,这一阶段增加了NGO的探索能力。这一阶段将导致搜索空间的全局搜索,目的是确定最优区域。图1显示了北苍鹰在这一阶段的行为示意图,包括猎物选择和攻击。

在这里插入图片描述
在第一阶段中表达的概念使用如下公式进行数学建模:

P i = X k , i = 1 , 2 , … , N , k = 1 , 2 , … , i − 1 , i + 1 , … , N , P_i = X_k, i=1,2,\ldots,N, k=1,2,\ldots,i-1,i+1,\ldots,N, Pi=Xk,i=1,2,,N,k=1,2,,i1,i+1,,N,

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(p_{i,j}-Ix_{i,j}), & F_{P_i} < F_i, \\ x_{i,j} + r(x_{i,j}-p_{i,j}), & F_{P_i} \geq F_i, \end{cases} xi,jnew,P1={xi,j+r(pi,jIxi,j),xi,j+r(xi,jpi,j),FPi<Fi,FPiFi,

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<Fi,Finew,P1Fi,

这里的 P i P_i Pi 表示第 i i i 只北方築选定的猎物位置,而 F P i F_{P_i} FPi 则代表该猎物位置对应的目标函数值。在算法的探索阶段, k k k 作为一个随机选取的自然数,帮助算法在候选解之间进行随机跳跃,增强搜索的多样性和广度。 x n e w , P 1 , i x_{new , P_1 , i}^{} xnew,P1,i代表了基于第一阶段搜索策略更新后的第 i i i 个个体的新状态,而 x n e w , P 1 , i , j x_{new , P_1 , i , j}^{} xnew,P1,i,j则是这个新状态下在第 j j j 维上的具体表现。值得注意的是, F n e w , P 1 , i F_{new , P_1 , i}^{} Fnew,P1,i 是根据第一阶段的探索过程计算出的解的目标函数值,它反映了解的质量或适应度。

2.2 第二阶段:追逐逃跑操作(开发)

在北方鵟攻击猎物之后,猎物会试图逃脱。因此,在追击过程中,北方鵟持续追赶猎物。由于北方鵟极高的速度,它们几乎可以在任何情况下追逐并最终捕获猎物。模拟这一行为增强了算法对搜索空间局部搜索的开发能力。在提出的NGO算法中,假设这种捕猎是在一个以攻击位置为中心,半径为R的范围内进行的。北方苍鹰与猎物之间的追击过程如图3所示。第二阶段中的概念使用下式进行了数学建模:

x i , j n e w , P 2 = x i , j + R ( 2 r − 1 ) x i , j x_{i,j}^{new,P2}=x_{i,j}+R\left(2r-1\right)x_{i,j} xi,jnew,P2=xi,j+R(2r1)xi,j

R = 0.02 ( 1 − t T ) R=0.02\left(1-\frac{t}{T}\right) R=0.02(1Tt)

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=\begin{cases} x_{i}^{new,P2}, & F_{i}^{new,P2}<F_i,\\ X_i, & F_{i}^{new,P2}\geq F_i. \end{cases} Xi={xinew,P2,Xi,Finew,P2<Fi,Finew,P2Fi.

其中, t t t 是迭代次数的计数器, T T T是最大迭代次数, x n e w , P 2 , i x_{new},P_2,i xnew,P2,i 是第i个提议解的新状态, x n e w , P 2 , i , j x_{new},P_2,i,j xnew,P2,i,j 表示该状态下第 j j j 个维度,而 F n e w , P 2 , i F_{new},P_2,i Fnew,P2,i 是基于NGO算法第二阶段的目标函数值。

3.算法流程与伪代码

提示:这里可以添加技术名词解释
在这里插入图片描述
英文的看着费劲,我翻译为中文:

1.开始:首先,我们启动NGO算法。
2.输入信息:将需要优化的问题的详细信息输入到算法中,这通常包括目标函数、约束条件等。
3.设置参数:设定算法的迭代次数(T)和种群大小(N),即参与优化过程的“北方雀鹰”数量。
4.初始化种群:随机生成N个北方雀鹰的位置(即解空间中的点),并计算它们的目标函数值,评估每个个体的适应度。
5.主循环:对于每一轮迭代t(从1到T)执行以下操作:
    对于每一个个体i(从1到N)进行以下步骤:
        a.探索阶段:模拟北方雀鹰识别猎物的行为。随机选择一个“猎物”(即解空间中的点),这一步用于探索新的可能解。
            ·对于解空间的每一维j(从1到m),使用特定的公式(4)来计算新状态。这些公式通常涉及随机性和当前解的信息,以帮助探索解空间的不同部分。
            ·更新第i个个体的全部维度状态,形成一个新的潜在解。
        b.开发阶段:模仿北方雀鹰追捕猎物的行为。这一阶段更专注于现有解的改进。
            ·更新搜索范围R(公式6),这可能与当前最优解有关,有助于聚焦于有潜力的解区域。
            ·再次对于每一维j,使用不同的公式(7)来计算新状态,这通常会根据当前的最优解来调整搜索方向。
            ·更新第i个个体的全部维度状态,形成一个新的潜在解。
        c.结束对个体i的处理。
6.记录最佳解:在每次迭代结束时,保存目前为止找到的最佳解。
7.结束迭代:当所有迭代完成,输出由NGO算法得到的最优解或准最优解。
8.结束:算法终止,输出结果。

4.核心代码

北方苍鹰优化算法MATLAB函数

function [Score, Best_pos, NGO_curve] = NGO(Search_Agents, Max_iterations, Lowerbound, Upperbound, dimensions, objective)
% NGO: Northern Goshawk Optimization 算法
% 输入:
%   Search_Agents: 搜索代理数量
%   Max_iterations: 最大迭代次数
%   Lowerbound: 搜索空间下界
%   Upperbound: 搜索空间上界
%   dimensions: 问题维度
%   objective: 目标函数句柄

tic  % 开始计时

% 初始化搜索边界
Lowerbound = ones(1, dimensions) .* Lowerbound;
Upperbound = ones(1, dimensions) .* Upperbound;

% 初始化种群和适应度
X = zeros(Search_Agents, dimensions);
fit = zeros(Search_Agents, 1);
NGO_curve = zeros(1, Max_iterations);

% 初始化种群
for i = 1:dimensions
    X(:, i) = Lowerbound(i) + rand(Search_Agents, 1) .* (Upperbound(i) - Lowerbound(i));
end

% 计算初始适应度
for i = 1:Search_Agents
    fit(i) = objective(X(i, :));
end

% 主循环
for t = 1:Max_iterations
    % 更新最佳解
    [best, blocation] = min(fit);
    
    if t == 1
        xbest = X(blocation, :);
        fbest = best;
    elseif best < fbest
        fbest = best;
        xbest = X(blocation, :);
    end
    
    % 更新每个北方苍鹰的位置
    for i = 1:Search_Agents
        % 阶段1: 探索
        I = round(1 + rand);
        k = randperm(Search_Agents, 1);
        P = X(k, :);
        F_P = fit(k);
        
        if fit(i) > F_P
            X_new = X(i, :) + rand(1, dimensions) .* (P - I .* X(i, :));
        else
            X_new = X(i, :) + rand(1, dimensions) .* (X(i, :) - P);
        end
        
        % 边界检查
        X_new = max(X_new, Lowerbound);
        X_new = min(X_new, Upperbound);
        
        % 更新位置
        fit_new = objective(X_new);
        if fit_new < fit(i)
            X(i, :) = X_new;
            fit(i) = fit_new;
        end
        
        % 阶段2: 开发
        R = 0.02 * (1 - t / Max_iterations);
        X_new = X(i, :) + (-R + 2*R * rand(1, dimensions)) .* X(i, :);
        
        % 边界检查
        X_new = max(X_new, Lowerbound);
        X_new = min(X_new, Upperbound);
        
        % 更新位置
        fit_new = objective(X_new);
        if fit_new < fit(i)
            X(i, :) = X_new;
            fit(i) = fit_new;
        end
    end
    
    % 保存当前最佳解
    NGO_curve(t) = fbest;
end

% 输出结果
Score = fbest;
Best_pos = xbest;

end

5.结果测试

在23个基准函数上进行测试,其中五个测试结果为:
在这里插入图片描述

完整MATLAB代码

链接:https://pan.baidu.com/s/1CwhpxPgDNiEPf0tM_7HgPQ
提取码:9999
欢迎评论区留言~

本篇文章不靠卖代码赚取收益,麻烦给个点赞和关注,后续还会有开源的免费优化算法及其代码,栓Q!同时如果大家有想要的算法可以在评论区打出,如果有空的话我可以帮忙复现

北方苍鹰NGO-BP)算法是一种结合了自组织映射(Self-Organizing Map,SOM)技术和改进的误差反向传播(Back Propagation,BP)神经网络技术的故障识别方法。其优化过程主要有以下几个步骤: 1. **预处理和特征提取**:首先对始故障数据进行预处理,如归一化、降噪等,然后提取出关键特征,减少输入维度,提高算法效率。 2. **初始化NGO-BP网络**:SOM网络作为预训练层,用于发现数据集中的潜在结构。它通过竞争学习机制形成聚类,每个神经元代表一个数据空间中的模式。 3. **SOM训练**:利用始数据对SOM网络进行训练,使得相邻节点之间的数据相似度高。这个阶段有助于将复杂的数据分布映射到低维空间。 4. **NGO-BP网络构建**:将训练好的SOM映射作为输入层,连接到一个传统的BP神经网络,作为输出层用于分类决策。SOM负责降低噪音和保持局部一致性,BP负责全局调整权重以优化分类精度。 5. **联合训练**:将两者结合起来,先通过SOM确定初始权值,再用BP进行微调。SOM部分固定不变,只更新BP网络的隐藏层权重,以适应从SOM得到的简化的输入特征。 6. **故障识别**:新的输入数据通过预训练的SOM层,再通过BP网络进行分类,输出对应故障类别。 流程总结就是:预处理数据 -> SOM网络初步划分 -> NGO-BP网络结构整合 -> 合成训练与优化 -> 新数据输入进行故障识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值