频道介绍

  1. 博主简介:科研dog
  2. 编程语言:MATLAB为主、Python为辅
  3. 研究领域:启发式算法设计与应用
  4. 专业细分领域:物流工程系统优化、工业工程、供应链网络等
  5. 频道主要功能:科研领域知识分享、交流,算法、代码分享。

1. 文献来源

作者: 吴学梅, 牟莉
标题: 基于改进RBF-BP神经网络的预测方法研究
单位: 西安工程大学计算机科学学院,西安 710600

2. 摘要

针对钢铁企业在库存管理方面存在着不能合理控制库存量,从而不能及时正常供应企业生产需求,容易造成企业生产不能正常进行。提出了一种基于改进的麻雀算法优化 RBF-BP 神经网络 (LISSA-RBF-BP) 的模型,以定制覆盖厂物料金钩粉为研究对象,采用此模型对其库存量进行预测,以降低库存成本,减少企业损失。此模型采用马群算法优化传统麻雀搜索算法 (SSA),提高算法的全局搜索能力,解决了麻雀算法易得到局部最优解问题。采用 Logistic 混沌映射优化 SSA 初始种群,保持种群多样性并能提高算法搜索通用的均匀性。通过仿真实验结果分析,LISSA-RBF-BP 模型比 RBF-BP 模型和 SSA-RBF-BP 模型更加准确的对金钩粉库存量进行预测。

3. 研究内容

RBF-BP 网络由 RBF 网络和 BP 网络串联构成,输入为特征值 x i x_i xi​ ,输出为库存量 Y i Y_i Yi​。算法步骤如下:
1.初始化:权值 β \beta β和阈值 θ \theta θ初始化为(0,1)区间随机值,设置最大训练次数、目标误差、学习率 a a a等参
数。
2.RBF 隐藏层:使用高斯核函数:

u ( j ) = exp ⁡ [ ∑ i = 1 N 1 ∣ x i − β i , j ( j ) ∣ 2 R j 2 ] u(j)=\exp\left[\frac{\sum_{i=1}^{N_1}|x_i-\beta_{i,j}(j)|}{2R_j^2}\right] u(j)=exp[2Rj2​∑i=1N1​​∣xi​−βi,j​(j)∣​]

其中 N 1 N_1 N1​为 RBF 隐藏层节点数。
3.BP 隐藏层:使用 Sigmoid 函数:

F ( y ) = 1 1 + e − y F(y)=\frac1{1+e^{-y}} F(y)=1+e−y1​

输出为:

v ( t ) = F [ ∑ N 2 β i , j ( j ) u ( j ) ] v(t)=F\left[\sum^{N_2}\beta_{i,j}(j)u(j)\right] v(t)=F[∑N2​​βi,j​(j)u(j)]

其中 N 2 N_2 N2​为 BP 隐藏层节点数。
4.输出层:

Y ( o ) = F [ ∑ t = 1 N 2 β i , j ( t ) v ( t ) ] Y(o)=F\left[\sum_{t=1}^{N_2}\beta_{i,j}(t)v(t)\right] Y(o)=F[t=1∑N2​​βi,j​(t)v(t)]

误差平方和:

S S E = ∑ o = 1 N 3 [ T o − Y ( o ) ] 2 SSE=\sum_{o=1}^{N_3}[T_o-Y(o)]^2 SSE=o=1∑N3​​[To​−Y(o)]2

其中 N 3 N_{3} N3​为输出节点数。
5.权值更新:

β i , j = β i , j + a ⋅ Y ( o ) [ 1 − Y ( o ) ] [ T o − Y ( o ) ] ⋅ Y ( o ) \beta_{i,j}=\beta_{i,j}+a\cdot Y(o)[1-Y(o)][T_o-Y(o)]\cdot Y(o) βi,j​=βi,j​+a⋅Y(o)[1−Y(o)][To​−Y(o)]⋅Y(o)
θ o = θ o + a ⋅ Y ( o ) [ 1 − Y ( o ) ] [ T o − Y ( o ) ] \theta_o=\theta_o+a\cdot Y(o)[1-Y(o)][T_o-Y(o)] θo​=θo​+a⋅Y(o)[1−Y(o)][To​−Y(o)]

3.2 麻雀搜索算法 (SSA)

SSA 模拟麻雀觅食行为,包括发现者、加入者和侦察者:
·发现者位置更新(公式有误,原文不完整,参考标准 SSA):
x i , d t + 1 = { x i , d t ⋅ exp ⁡ ( − i α ⋅ t max ⁡ ) , if R 2 < S T x i , d t + Q ⋅ L , otherwise x_{i,d}^{t+1}=\begin{cases}x_{i,d}^t\cdot\exp\left(-\frac{i}{\alpha\cdot t_{\max}}\right),&\text{if}R_2<ST\\x_{i,d}^t+Q\cdot L,&\text{otherwise}\end{cases} xi,dt+1​={xi,dt​⋅exp(−α⋅tmax​i​),xi,dt​+Q⋅L,​ifR2​<STotherwise​

加入者位置更新:

x i , d t + 1 = { Q ⋅ exp ⁡ ( x w o r s t t − x i , d t i 2 ) , if   i > n / 2 x b e s t t + ∣ x i , d t − x b e s t t ∣ ⋅ A + ⋅ L , otherwise x_{i,d}^{t+1}=\begin{cases}Q\cdot\exp\left(\frac{x_{\mathrm{worst}}^t-x_{i,d}^t}{i^2}\right),&\text{if}\:i>n/2\\x_{\mathrm{best}}^t+|x_{i,d}^t-x_{\mathrm{best}}^t|\cdot A^+\cdot L,&\text{otherwise}\end{cases} xi,dt+1​={Q⋅exp(i2xworstt​−xi,dt​​),xbestt​+∣xi,dt​−xbestt​∣⋅A+⋅L,​ifi>n/2otherwise​

侦察者位置更新:

x i , d t + 1 = { x b e s t t + β ⋅ ∣ x i , d t − x b e s t t ∣ , i f   f i > f g x i , d t + K ⋅ ( ∣ x i , d t − x w o r s t t ∣ ( f i − f g ) + ϵ ) , i f   f i = f g x_{i,d}^{t+1}=\begin{cases}x_{\mathrm{best}}^t+\beta\cdot|x_{i,d}^t-x_{\mathrm{best}}^t|,&\mathrm{if}\:f_i>f_g\\x_{i,d}^t+K\cdot\left(\frac{|x_{i,d}^t-x_{\mathrm{worst}}^t|}{(f_i-f_g)+\epsilon}\right),&\mathrm{if}\:f_i=f_g\end{cases} xi,dt+1​={xbestt​+β⋅∣xi,dt​−xbestt​∣,xi,dt​+K⋅((fi​−fg​)+ϵ∣xi,dt​−xworstt​∣​),​iffi​>fg​iffi​=fg​​

改进型麻雀搜索算法 (LISSA)

· Logistic 混沌映射初始化:

Z t + 1 = θ Z t ( 1 − Z t ) , θ = 4 , Z t ∈ [ 0 , 1 ] Z_{t+1}=\theta Z_t(1-Z_t),\quad\theta=4,Z_t\in[0,1] Zt+1​=θZt​(1−Zt​),θ=4,Zt​∈[0,1]

。 鸟群算法优化发现者和加入者:

x i , d t + 1 = x i , d t + x best , d t ⋅ randn ( 0 , 1 ) x_{i,d}^{t+1}=x_{i,d}^t+x_{\text{best},d}^t\cdot\text{randn}(0,1) xi,dt+1​=xi,dt​+xbest,dt​⋅randn(0,1)
x i , d t + 1 = x best , d t + ( x i , d t − x best , d t ) ⋅ G Y ⋅ randn ( 0 , 1 ) x_{i,d}^{t+1}=x_{\text{best},d}^t+(x_{i,d}^t-x_{\text{best},d}^t)\cdot GY\cdot\text{randn}(0,1) xi,dt+1​=xbest,dt​+(xi,dt​−xbest,dt​)⋅GY⋅randn(0,1)

LISSA-RBF-BP 模型构建步骤

确定网络结构(输入5节点,隐藏8节点,输出1节点)。

数据标准化。

使用 Logistic 混沌映射初始化麻雀种群。

计算适应度(均方误差)。

更新麻雀位置(结合鸟群算法)。

优化 RBF-BP 权值和阈值。

训练网络并预测。

内容复现

在这里插入图片描述

4.代码

% 假设有训练数据 X_train, Y_train
input_nodes = 5;
hidden_nodes = 8;
output_nodes = 1;

% 初始化 RBF-BP 参数
beta = rand(input_nodes, hidden_nodes);
R = rand(1, hidden_nodes);
theta = rand(hidden_nodes, output_nodes);

% 定义适应度函数(均方误差)
fitness_fun = @(params) mean((Y_train - RBF_BP_forward(X_train, params.beta, params.R, params.theta)).^2);

% 使用 LISSA 优化参数
pop_size = 30;
dim = numel(beta) + numel(R) + numel(theta);
lb = 0; ub = 1;
[best_params, best_fitness] = LISSA(pop_size, dim, 100, lb, ub, fitness_fun);

% 解析最优参数并训练网络
% ...(具体解析和训练步骤略)
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐