机器学习周报-文献阅读

发布于:2025-03-24 ⋅ 阅读:(32) ⋅ 点赞:(0)

摘要

本周阅读了题目为Short-term prediction of dissolved oxygen and water temperature using deep learning with dual proportional-integral-derivative error corrector in pond culture的文章,文章提出了一种深度学习与PID误差校正相结合的方法,用于DO和WT的准确快速预测。本方法由两个部分组成:基准深度网络预测模型和PID误差校正器.基准模型用于DO和WT的多步前向预测,为PID误差校正器提供反馈输入,PID误差校正器通过将反馈输入与两个预测变量的实际值进行比较,得到预测误差,然后根据预测误差计算基准模型当前预测值的误差校正量。利用3个混沌时间序列数据集和实际池塘养殖水环境数据集对所提方法进行了验证。仿真结果表明,所提出的PID误差校正器结构简单(仅需3个可调参数),但能显着提高基准模型的预测精度。

Abstract

This week, I read an article titled “Short-term prediction of dissolved oxygen and water temperature using deep learning with dual proportional-integral-derivative error corrector in pond culture.” The article proposes a method that combines deep learning with a proportional-integral-derivative (PID) error corrector for the accurate and rapid prediction of dissolved oxygen (DO) and water temperature (WT). The method consists of two parts: a benchmark deep network prediction model and a PID error corrector. The benchmark model is used for multi-step forward prediction of DO and WT, providing feedback input to the PID error corrector. The PID error corrector compares the feedback input with the actual values of the two predicted variables to obtain the prediction error, and then calculates the error correction amount for the current prediction value of the benchmark model based on the prediction error. The proposed method was validated using three chaotic time series datasets and a real pond aquaculture water environment dataset. The simulation results show that the proposed PID error corrector structure is simple (with only three adjustable parameters), but it can significantly improve the prediction accuracy of the benchmark model.

1 文章内容

  1. 提出了一种双PID误差校正器,在不增加基线模型计算复杂度的情况下,显着提高了DO和WT的预测精度,非常适合边缘设备部署应用
  2. 采用梯形误差积分法代替传统位置积分项–提出了一种新的PID控制器,提高了PID误差校正器的稳定性和鲁棒性.

1.1 方法及模型

在这里插入图片描述

1.1.1 所提方法

受PID控制原理的启发,论文中对PID控制器进行了适当的修改和变形,提出了一种双PID误差校正器,该校正器减小了基准模型的预测误差,提高了池塘养殖中DO和WT的预测精度。该方法的总体原理如下图所示。
在这里插入图片描述

该方法主要由两部分组成:基准预测网络模型和两个具有以下功能的PID误差校正器:

  1. 基准网络模型:基准模型具有多输入双输出CNN-LSTM架构,可以基于历史池塘水环境输入数据预测未来的DO和WT,从而为PID误差校正器提供反馈输入。基准模型的预测结果是该方法误差修正的起点。
  2. PID误差校正器:该校正器将基准网络模型的预测结果作为自己的反馈输入,然后将它们与预测变量的地面真值进行比较,以获得历史偏差。基于这些历史偏差,可以计算误差校正并将其应用于基准模型的预测结果,以减轻甚至消除预测误差。

本文提出的PID误差校正器包括三个参数,即比例系数、积分系数和微分系数。这三个参数可以被认为是超参数,需要通过对验证集的重复测试来优化。该PID误差校正器可以被看作是一个可分离的模块,可以与任何其他预测模型相结合。因此,该方法的收敛性主要涉及基准网络模型在训练数据集上的收敛性。所提出的用于时间序列预测任务的基准网络联合PID误差校正器的详细步骤如下(从训练到验证再到测试):

  1. 在训练集上训练基准预测模型,并在验证集上优化网络参数。
  2. 获取验证集中目标变量的实测值 R V t RV_t RVt和基准网络预测值 Y p t Y_{pt} Ypt
  3. 将训练好的基准网络与PID误差校正器相结合,并初始化一组PID参数,例如 K p 、 K i 、 K d 和 K K_p、K_i、K_d和K KpKiKdK
  4. 使用验证集中的目标变量的实际测量值 R V t RV_t RVt和基准网络预测值 Y P t Y_{Pt} YPt来优化PID误差校正器的参数。
  5. 使用测试数据集来测试所获得的最优模型(基准模型结合PID误差校正器)。
  6. 根据公式 e ( t ) = Y P t − R V t e(t)=Y_{Pt}-RV_t e(t)=YPtRVt 获得测试数据集中目标变量的基准网络预测值 Y P t Y_{Pt} YPt,并计算预测误差 e ( t ) e(t) e(t)
  7. 根据预测的时间步长 τ \tau τ进行反向回溯,得到两个历史误差 e ( t − τ ) e(t-\tau) e(tτ) e ( t − τ − 1 ) e(t-\tau-1) e(tτ1)
  8. 将两个时间点的误差代入公式 u ( t ) = K p e ( t − τ ) + K i ( e ( t − τ ) + e ( t − τ − 1 ) 2 ) + K d ( e ( t − τ ) − e ( t − τ − 1 ) ) u(t)=K_pe(t-\tau)+K_i(\frac{e(t-\tau)+e(t-\tau-1)}{2})+K_d(e(t-\tau)-e(t-\tau-1)) u(t)=Kpe(tτ)+Ki(2e(tτ)+e(tτ1))+Kd(e(tτ)e(tτ1)),计算当前时间点的初始误差修正量 u ( t ) u(t) u(t)
  9. 根据等式 γ ( t ) = { K , u ( t ) ≥ K u ( t ) , − K < u ( t ) < K − K , u ( t ) ≤ − K \gamma(t)=\begin{cases} K,u(t)\geq K\\u(t),-K<u(t)<K \\ -K,u(t)\leq -K\end{cases} γ(t)= Ku(t)Ku(t)K<u(t)<KKu(t)K,将饱和极限应用于初始误差校正 u ( t ) u(t) u(t),以获得最终误差校正量 γ ( t ) \gamma(t) γ(t)
  10. 基于等式获得最终预测值 F P t FP_t FPt

1.1.2 PID误差校正原理

在这里插入图片描述

修改原有PID并提出一种PID误差修正器

为了解决传统PID控制器中积分项误差累积的问题,本文提出了一种改进的PID误差校正器,使用梯形误差积分方法替代传统的积分项。具体来说,改进后的PID误差校正器仅考虑当前时刻和前一时刻的误差平均值作为积分项,从而避免了误差的过度积累,提高了算法的稳定性和效率。
改进后的PID误差校正器的离散形式如下:
u ( k ) = K p e ( k ) + K i ( e ( k ) + e ( k − 1 ) 2 ) + K d ( e ( k ) − e ( k − 1 ) ) u(k)=K_pe(k)+K_i(\frac{e(k)+e(k-1)}{2})+K_d(e(k )-e(k-1)) u(k)=Kpe(k)+Ki(2e(k)+e(k1))+Kd(e(k)e(k1))

在时间序列预测任务中,PID误差校正器的应用步骤如下:

  1. 计算预测误差:
    通过比较预测值 Y P t Y_{Pt} YPt和实际值 R V t RV_t RVt,计算出预测误差 e ( t ) = Y P t − R V t e(t)=Y_{Pt}-RV_t e(t)=YPtRVt
  2. 计算误差校正量:
    根据预测误差,结合比例、积分和微分分量,计算出误差校正量u(t): u ( t ) = K p e ( t ) + K i ( e ( t ) + e ( t − 1 ) 2 ) + K d ( e ( t ) − e ( t − 1 ) ) u(t)=K_pe(t)+K_i(\frac{e(t)+e(t-1)}{2})+K_d(e(t)-e(t-1)) u(t)=Kpe(t)+Ki(2e(t)+e(t1))+Kd(e(t)e(t1))
  3. 应用饱和限制:
    为了防止误差校正量过大,对误差校正量u(t) 应用饱和限制:
    γ ( t ) = { K , u ( t ) ≥ K u ( t ) , − K < u ( t ) < K − K , u ( t ) ≤ − K \gamma(t)=\begin{cases} K,u(t)\geq K\\u(t),-K<u(t)<K \\ -K,u(t)\leq -K\end{cases} γ(t)= Ku(t)Ku(t)K<u(t)<KKu(t)K,
    其中K是饱和阈值,通常根据实际情况手动设置。
  4. 校正预测值:
    通过将计算的误差校正数值 γ ( t ) \gamma(t) γ(t)地添加到基准模型的预测输出 T P t T_{Pt} TPt,最终预测输出FPt如下获得 F P t = T P t + γ ( t ) FP_t=T_{Pt}+\gamma(t) FPt=TPt+γ(t)

1.1.3 1D-CNN

一维卷积神经网络典型地用于处理序列或文本数据,该序列或文本数据由按顺序排列的多个卷积层、激活函数、汇集层和全连接层组成。CNN的核心部分是卷积层,它只是将过滤器应用于输入内容,从而产生以数字形式表示的激活。在卷积过程中,通过CNN特有的稀疏连接和权重分配机制,加快了模型的训练速度。卷积计算方法如下:

y ( i ) = f c ( y ( i − 1 ) ⨂ W i + b c ) y(i)=f_c(y(i-1)\bigotimes W_i+b_c) y(i)=fc(y(i1)Wi+bc)

f c f_c fc表示卷积层的激活函数; y ( i − 1 ) y(i-1) y(i1)表示第i个卷积层的输入; W i W_i Wi表示卷积核的权重; b c b_c bc是卷积层的偏置。卷积计算是一种线性运算,涉及许多相同形状和大小的权重数组,即滤波器。如果调整此过滤器以检测输入数组数据中的特定特征类型,则在整个输入数据处理过程中重用过滤器可以发现数据中任何位置的特征。

1.1.4 LSTM

为了验证PID误差校正器的有效性,选择CNN-LSTM作为基准模型。1D-CNN主要用于序列数据的特征提取
在这里插入图片描述
迄今为止,已有许多研究者将CNN与LSTM相结合,提出了一种CNN-LSTM体系结构,该结构能够充分利用CNN的特征提取能力和LSTM对时间序列的建模能力实现对时间序列的精确预测。该论文以CNN-LSTM为基准模型,对水质变量进行预测,并采用所提出的PID误差校正器来改善预测性能。

1.2 数据集、测试设置、结果和分析

1.2.1 实验数据集设置

本文使用了四个数据集来验证所提出的PID误差校正器的有效性,包括三个混沌时间序列数据集和一个实际池塘养殖水质数据集。

1.2.1.1 混沌时间序列数据集
  1. Mackey-Glass系统
    Mackey-Glass系统是一个典型的时滞混沌系统,常用于测试模型的预测性能。该系统由一个微分方程生成,公式如下:
    d x d t = a x ( t − τ ) 1 + x c ( t − τ ) − b x ( t ) \frac{dx}{dt}=\frac{ax(t-\tau)}{1+x^c(t-\tau)}-bx(t) dtdx=1+xc(tτ)ax(tτ)bx(t)
    其中,a=0.2,b=0.1,c=10, τ = 17 \tau=17 τ=17
    初始条件设置为x(0)=1.2,采样周期为0.1。使用MATLAB 2018a中的四阶Runge-Kutta方法生成了10000个连续样本点,其中前8000个样本用于训练模型,后2000个样本用于测试。训练集中的最后20%被用作验证集。该数据集是一个单输入单输出的预测模型,输入为历史x序列,输出为未来的x值
  2. Lorenz系统
    Lorenz系统由三个变量组成,不同的初始条件会导致这三个变量的轨迹不同,因此Lorenz系统表现出混沌动力学特性,常用于测试模型的预测性能。该系统的微分方程如下:
    { d x d t = a ( y − x ) d y d t = b x − y − x z d z d t = x y − c z \begin{cases}\frac{dx}{dt}=a(y-x) \\\frac{dy}{dt}=bx-y-xz \\\frac{dz}{dt}=xy-cz \end{cases} dtdx=a(yx)dtdy=bxyxzdtdz=xycz
    其中,a=10,b=28,c=8/3
    初始条件设置为 x(0)=10、y(0)=1、z(0)=0,采样周期为0.01。使用MATLAB 2018a中的四阶Runge-Kutta方法生成了10000个连续样本点,其中前8000个样本用于训练模型,后2000个样本用于测试。训练集中的最后20%被用作验证集。该数据集是一个三输入两输出的预测模型,输入为历史 x、y、z序列,输出为未来的y和z值。
  3. 太阳黑子数据集
    太阳黑子数据集是由比利时皇家天文台每月收集的真实混沌时间序列数据,常用于时间序列预测模型的性能验证。该数据集包含从1749年1月到2019年12月的3250个数据点。由于原始数据中存在大量噪声,本文使用MATLAB 2018a中的小波工具箱对数据进行了平滑处理,以减少噪声干扰。数据集按8:2的比例划分为训练集和测试集,其中前2600个样本用于训练模型,后650个样本用于测试。训练集中的最后20%被用作验证集。
1.2.1.2 实际池塘养殖水质数据集

为了验证PID误差校正器在实际应用中的有效性,本文还使用了一个实际池塘养殖水质数据集。该数据集从一个实际的池塘养殖环境中收集,包括水质数据和气象数据。
在池塘水体中安装了一个水质传感器,用于收集水质数据,同时在池塘岸边设置了一个小型气象站,用于收集气象数据。水质数据包括溶解氧(DO)和水温(WT),气象数据主要包括七个常见的气象因素,如大气温度、湿度等

所有数据以10分钟为间隔连续采集,选取了半个月的水文数据,共2160个样本点。在建模之前,使用皮尔逊相关系数分析计算了各个水环境因素与目标变量(DO和WT)之间的相关性,选择了与目标变量强相关的因素作为输入变量,以减少计算复杂度。

数据集按8:2的比例划分为训练集和测试集,其中前1728个样本用于训练模型,后432个样本用于测试。训练集中的最后20%被用作验证集

1.2.1.3 数据集设置的意义

混沌时间序列数据集:

  • 用于验证PID误差校正器在复杂非线性系统中的表现。
  • Mackey-Glass系统和Lorenz系统是典型的混沌系统,能够测试模型对非线性动态的捕捉能力。
  • 太阳黑子数据集是真实世界的混沌数据,能够验证模型在实际应用中的泛化能力。

实际池塘养殖水质数据集:

  • 用于验证PID误差校正器在实际应用中的有效性。
  • 该数据集包含真实的水质和气象数据,能够测试模型在实际环境中的预测性能。

1.2.2 模型性能评价指标

预测模型的性能使用四个指标进行评价:MSE、平均绝对误差(MAE)、均方根误差(RMSE)和平均绝对百分比误差(MAPE)。其计算公式如下:

M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 MSE=\frac{1}{N}\sum_{i=1}^N(y_i-\hat y_i)^2 MSE=N1i=1N(yiy^i)2

M A E = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ MAE=\frac{1}{N}\sum_{i=1}^N|y_i-\hat y_i| MAE=N1i=1Nyiy^i

R M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 RMSE=\sqrt{\frac{1}{N}\sum_{i=1}^N(y_i-\hat y_i)^2} RMSE=N1i=1N(yiy^i)2

M A P E = 100 % N ∑ i = 1 N ∣ y i − y ^ i y i ∣ MAPE=\frac{100\%}{N}\sum_{i=1}^N|\frac{y_i-\hat y_i}{y_i}| MAPE=N100%i=1Nyiyiy^i

其中, y i y_i yi是实际值, y ^ i \hat y_i y^i是预测值,N是测试集中的样本数;上述四个评价指标的值越小,模型的总体预测误差越小,模型的性能越好。

1.2.3 结果分析

混沌时间序列数据集的预测

  1. Mackey-Glass时间序列预测
    基准模型:LSTM。目标模型:LSTM-PID(结合PID误差校正器的LSTM模型)。
    LSTM-PID的预测曲线与原始曲线几乎重合,预测误差显着降低。在误差曲线中,LSTM-PID的误差明显小于LSTM。
  2. Lorenz时间序列预测
    基准模型:LSTM。目标模型:LSTM-PID(结合PID误差校正器的LSTM模型)。
    LSTM-PID在预测y和 z序列时,误差显着降低,特别是在极值点附近。
  3. 太阳黑子时间序列预测
    基准模型:LSTM。目标模型:LSTM-PID(结合PID误差校正器的LSTM模型)。
    PID误差校正器在真实混沌时间序列(太阳黑子数据集)上的表现同样出色,能够显着提高LSTM模型的预测精度。

溶解氧和水温预测

基准模型:TCN、LSTM、TCN-LSTM、CNN-LSTM。
目标模型:CNN-LSTM-PID(结合PID误差校正器的CNN-LSTM模型)。

在这里插入图片描述

使用皮尔逊相关系数分析,选择了与目标变量(DO和WT)强相关的因素作为输入变量。DO:与大气温度的相关性最强(相关系数为0.7),其次是大气湿度(相关系数为-0.54)。WT:与大气温度的相关性最强(相关系数为0.72),其次是太阳辐射(相关系数为-0.37)。最终选择了大气温度和大气湿度作为输入变量,并结合DO和WT的历史值构建模型。

  1. 三步前向预测
    输入变量:历史时间序列的四个强相关因素(大气温度、大气湿度、DO、WT)。
    输出变量:30分钟后的DO和WT值。

在这里插入图片描述
TCN:预测性能最差,预测值普遍高于实际值。
LSTM:预测值普遍低于实际值
TCN-LSTM和CNN-LSTM:组合模型的预测精度优于单一模型,但预测误差仍然较大。
CNN-LSTM-PID:预测曲线与实际曲线几乎一致,预测误差显着降低。

  1. 五步前向预测
    输入变量:历史时间序列的四个强相关因素(大气温度、大气湿度、DO、WT)。
    输出变量:50分钟后的DO和WT值。

在这里插入图片描述
TCN和LSTM:预测性能较差,预测曲线显着偏离实际曲线。
TCN-LSTM:预测性能未改善,甚至有所下降。
CNN-LSTM:预测精度有所提高,但预测误差仍然较大。
CNN-LSTM-PID:预测误差显着降低。

长期预测性能分析

在这里插入图片描述

目标变量:溶解氧(DO)和水温(WT)。
时间步长:10步、15步、20步前向预测。
基准模型(CNN-LSTM),目标模型(CNN-LSTM-PID)
在基准模型的基础上加入PID误差校正器后,预测误差有所降低,表明PID误差校正器能够在一定程度上提高预测精度。然而,随着预测步长的增加,CNN-LSTM-PID的预测误差也逐渐增大,表明PID误差校正器的误差校正能力随着时间步长的增加而减弱。

2 相关知识

2.1混沌时间序列数据集详解

混沌时间序列数据集是由混沌系统生成的时间序列数据,具有非线性、不可预测性和对初始条件敏感等特点。混沌系统广泛存在于自然界和工程领域中,例如天气系统、流体动力学、生态系统等。混沌时间序列数据集常用于测试时间序列预测模型的性能,尤其是对非线性动态的捕捉能力。

特点

  1. 非线性:混沌系统的动态行为由非线性微分方程描述,系统的输出不满足线性叠加原理。
  2. 不可预测性:混沌系统对初始条件极其敏感,即使初始条件有微小的变化,系统的长期行为也会发生显着变化(即“蝴蝶效应”)。因此,混沌时间序列在长期预测中具有不可预测性。
  3. 确定性:尽管混沌系统表现出随机性,但其动态行为是由确定性方程控制的,而不是随机过程。
  4. 复杂性和多样性:混沌系统可以生成复杂的、多样化的时间序列,适合用于测试模型的泛化能力。

2.2 PID误差校正

PID误差校正是一种基于比例-积分-微分(PID)控制原理的误差校正方法,主要用于减少预测模型的误差,提高预测精度。PID控制是工业控制领域中最常用的控制方法之一,其核心思想是通过反馈控制来消除系统输出与设定值之间的偏差。论文中将PID控制原理应用于时间序列预测任务中,提出了一种PID误差校正器,用于校正预测模型的输出,使其尽可能接近实际值。

PID控制的基本原理:

PID控制器通过计算系统输出与设定值之间的偏差(即误差),并结合比例(P)、积分(I)和微分(D)三个分量,计算出控制量,逐步消除系统偏差,使系统输出值尽可能接近理想设定值。PID控制器的输出公式如下

u ( t ) = K p e ( t ) + K i ∫ 0 t e ( t ) d t + K d d e ( t ) d t u(t)=K_pe(t)+K_i\int_{0}^{t}e(t)dt+K_d\frac{de(t)}{dt} u(t)=Kpe(t)+Ki0te(t)dt+Kddtde(t)

其中, u ( t ) u(t) u(t)是控制量; e ( t ) e(t) e(t)是系统偏差(即设定值与实际输出值之间的误差); K p K_ p Kp​是比例系数; K i K_i Ki是积分系数; K d K_d Kd是微分系数。

PID误差校正的核心思想:
在时间序列预测任务中,PID误差校正器的核心思想是将预测模型的输出值视为系统的实际输出值,将实际值视为设定值,通过计算预测值与实际值之间的偏差(即预测误差),并结合比例、积分和微分分量,计算出误差校正量,将其应用于预测模型的输出值中,从而减少预测误差。PID误差校正器的工作流程如下:

  1. 计算预测误差:通过比较预测值与实际值,计算出预测误差 e ( t ) e(t) e(t)
  2. 计算误差校正量:根据预测误差,结合比例、积分和微分分量,计算出误差校正量 u ( t ) u(t) u(t)
  3. 应用误差校正量:将误差校正量 u ( t ) u(t) u(t)应用于预测模型的输出值中,得到校正后的预测值。

在时间序列预测任务中,PID误差校正器的应用步骤如下:

1.训练基准模型:在训练集上训练基准预测模型(如LSTM、CNN-LSTM等),并在验证集上优化模型参数。
2.获取预测值和实际值:在验证集上获取基准模型的预测值 Y P t Y_{Pt} YPt和实际值 R V t RV_t RVt
3.初始化PID参数:初始化PID误差校正器的参数 K p 、 K i 、 K d K_p、K_i、K_d KpKiKd和饱和阈值K
4.优化PID参数:使用验证集中的预测值和实际值,通过试验和误差法优化PID误差校正器的参数。
5.计算预测误差:在测试集上计算基准模型的预测误差. e ( t ) = Y P t − R V t e(t)=Y_{Pt}-RV_t e(t)=YPtRVt
6.计算误差校正量:根据预测误差,结合比例、积分和微分分量,计算出误差校正量 u ( t ) u(t) u(t)
7.用误差校正量:将误差校正量 u ( t ) u(t) u(t)应用于基准模型的预测值中,得到校正后的预测值 F P t = T P t + γ ( t ) FP_t=T_{Pt}+\gamma(t) FPt=TPt+γ(t),其中 γ ( t ) \gamma(t) γ(t)是经过饱和限制后的最终误差校正量。

相关代码

import torch
import torch.nn as nn

class PIDErrorCorrector(nn.Module):
    def __init__(self, Kp, Ki, Kd, saturation_threshold):
        super(PIDErrorCorrector, self).__init__()
        self.Kp = Kp  # 比例系数
        self.Ki = Ki  # 积分系数
        self.Kd = Kd  # 微分系数
        self.saturation_threshold = saturation_threshold  # 饱和阈值
        self.previous_error = None  # 前一时刻的误差
        self.integral = 0  # 积分项累积

    def forward(self, predicted, actual):
        """
        计算误差校正量并应用于预测值
        :param predicted: 模型的预测值 (Tensor)
        :param actual: 实际值 (Tensor)
        :return: 校正后的预测值 (Tensor)
        """
        error = predicted - actual  # 计算当前误差
        if self.previous_error is None:
            self.previous_error = error  # 初始化前一时刻的误差

        # 计算比例项
        proportional = self.Kp * error

        # 计算积分项(梯形积分)
        self.integral += (error + self.previous_error) / 2
        integral = self.Ki * self.integral

        # 计算微分项
        derivative = self.Kd * (error - self.previous_error)

        # 更新前一时刻的误差
        self.previous_error = error

        # 计算误差校正量
        correction = proportional + integral + derivative

        # 应用饱和限制
        correction = torch.clamp(correction, -self.saturation_threshold, self.saturation_threshold)

        # 返回校正后的预测值
        corrected_prediction = predicted + correction
        return corrected_prediction

# 示例:结合LSTM模型和PID误差校正器
class LSTMPIDModel(nn.Module):
    def __init__(self, input_size, hidden_size, output_size, Kp, Ki, Kd, saturation_threshold):
        super(LSTMPIDModel, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)
        self.pid_corrector = PIDErrorCorrector(Kp, Ki, Kd, saturation_threshold)

    def forward(self, x, actual=None):
        # LSTM前向传播
        lstm_out, _ = self.lstm(x)
        predictions = self.fc(lstm_out[:, -1, :])  # 取最后一个时间步的输出

        # 如果有实际值,则应用PID误差校正
        if actual is not None:
            predictions = self.pid_corrector(predictions, actual)

        return predictions

# 测试代码
if __name__ == "__main__":
    # 模型参数
    input_size = 10  # 输入特征维度
    hidden_size = 32  # LSTM隐藏层维度
    output_size = 1  # 输出维度(单变量预测)
    Kp, Ki, Kd = 1.0, 0.01, 0.1  # PID参数
    saturation_threshold = 0.5  # 饱和阈值

    # 初始化模型
    model = LSTMPIDModel(input_size, hidden_size, output_size, Kp, Ki, Kd, saturation_threshold)

    # 示例输入
    batch_size = 16
    seq_length = 20
    x = torch.randn(batch_size, seq_length, input_size)  # 输入数据
    actual = torch.randn(batch_size, output_size)  # 实际值(用于PID校正)

    # 前向传播
    predictions = model(x, actual)
    print("Predictions:", predictions)
  • PIDErrorCorrector类:
    实现了PID误差校正的核心逻辑,包括比例、积分和微分项的计算。使用梯形积分方法计算积分项,避免误差过度积累。对误差校正量应用饱和限制,防止校正量过大。
  • LSTMPIDModel类:
    结合LSTM模型和PID误差校正器。在前向传播过程中,先通过LSTM生成预测值,然后使用PID误差校正器对预测值进行校正。

在这里插入图片描述

总结

该论文提出了一种新的双PID误差校正器,可以与基准CNN-LSTM相结合,以提高池塘养殖中DO和WT的预测精度。受过程控制中PID控制器的启发,将PID反馈控制原理应用于时间序列预测任务,用梯形误差积分代替原PID控制器中的积分项,提出了一种更适合处理时间序列预测的PID误差校正器,具有更强的稳定性和鲁棒性。