发明内容
本发明针对现有技术的不足,提供一种基于神经网络的城市污水泵站水位的预测方法。该方法的具体步骤是:
步骤(1)选择预测模型变量。
采用神经网络技术建立污水泵站水位预测模型,为保证基于数据的神经网络建模有效性,避免纯黑箱建模的盲目性,首先利用机理分析和先验信息,合理选择预测模型的输入输出变量。
基于机理分析选择泵站前池水位为神经网络模型的输出变量,选择影响泵站前池水位主要因素为神经网络模型输入变量:①上游泵站提升量;②前池液位变化量;③本泵站排出量;④开关泵液位控制设定量。
对于SCADA系统采样的时间序列数据,计算输入序列和输出序列的自相关系数和互相关系数,确定互相关系数大的输入序列和输出序列作为训练样本。
步骤(2)数据归一化处理。
训练样本中的输入数据包含四项,数量级相差较大,为保证各因素同等地位,加快收敛速度,对数据进行归一化处理,转化为[0,1]区间范围的值
其中x
max为输入数据中的最大值,x
min为输入数据中的最小值。x为输入数据,
为输入数据归一化处理后的值。
步骤(3)搭建BP神经网络框架。
调用Matlab7.1神经网络工具箱中的newff函数建立BP神经网络,Net=newff(PR,[s1,s2,…,si],{TF1,TF2,…,TFi},BTF,BLF,PF);Net为BP神经网络框架,PR为输入矩阵中由最大元素和最小元素决定的一个取值范围,si为第i层神经元的个数,TFi为第i层的传递函数,1≤i≤N1,N1为神经网络总层数,BTF为BP神经网络的训练函数,BLF为权值和偏置值,PF为网络性能函数。
步骤(4)训练BP神经网络。具体方法是:
a、初始化BP神经网络,利用随机函数产生的值赋值给权值和偏置值,然后调用init函数来初始化BP神经网络。
b、设置网络训练次数、训练目标误差及用来显示的步数。
c、设置训练数据为输入矩阵P,设置目标值为矩阵T,调用Matlab7.1神经网络工具箱中的train函数对BP神经网络Net进行数据训练直至收敛,Net=train(Net,P,T)。
步骤(5)测试BP神经网络。
对训练完成的BP神经网络进行测试,将历史数据组成泵站前池水位预测网络测试矩阵P_test进行归一化处理,归一化后的测试矩阵为p’_test,直接调用Matlab7.1神经网络工具箱中的sim函数,D=sim(Net,P’_test),对测试矩阵进行仿真,其中D为目标函数,对应为污水泵站前池水位预测值。
步骤(6)数据反归一化处理。
对测试所得的污水泵站前池水位数据按照公式
进行反归一化处理,其中x′为反归一化处理后的泵站前池水位数据,
为仿真测试得到的泵站前池水位数据,x′
max为泵站前池水位数据中的最大值,x′
min为泵站前池水位数据中的最小值。
本发明将利用计算机的仿真计算能力,搭建一个误差反向传播(BP)神经网络,从泵站运行历史数据中自动获取知识,逐步地把新知识结合到其映射函数中,从而实现非线性函数的逼近,能够对污水泵站流量和水位进行准确的预报。
本发明方法的有益效果:
1.BP神经网络具有逼近非线性映射函数的能力,因此利用泵站运行历史数据来预测泵站前池水位,比传统恒定流计算方法得到的预测精度高。
2.基于BP神经网络的污水泵站前池水位预测避免了求解传统基于圣维南方程组的水力学模型,同时也避免计算机求解对模型边界条件等基础数据精度的要求,只需利用大量的泵站历史运行数据,实用更强。
3.增加BP神经网络训练数据的长度、输入矩阵的维数,提高计算机的计算速度,能提高预测精度。
具体实施方式
以杭州排水一污线磁带厂泵站为例,开展基于BP神经网络的污水泵站水位预测建模具体实施方式。
步骤(1)预测模型变量选择
(a)机理分析。模型的输出为泵站前池液位,给定前池截面积,前池截面积乘以泵站前池水位可求得前池储水量的变化。根据流量平衡定律,泵站前池储水量=泵站前池的进水量-泵站污水排出量,其中进水量主要为上游泵站的排出量和本地污水入流之和。由排水系统的SCADA系统可知各泵站的污水排出量,若已知上游泵站排出污水流入到该泵站的流经时间(滞后时间)及本地污水入流量则可确定本泵站前池储水量,其中滞后时间和本地污水入流量具有不确定性。现有污水泵站控制方式为液位控制,泵站的进水量和开关泵的设定液位值有关。基于上述机理分析可确定神经网络模型的输入为4项:上游泵站提升量、前池液位变化量、本泵站污水排出量和开关泵控制液位设定量。
(b)相关性分析。对于SCADA系统采样的时间序列数据,基于变量的自相关性和互相关性分析确定模型的输入序列,选择与输出序列的互相关系数大的序列组成训练样本。
以杭州市磁带厂泵站为例,泵站的前池液位自相关和前池液位与上游泵站提升量的互相关性分析曲线如图1和图2所示。由互相关曲线分析,前池液位与上游泵站提升量的互相关性在[20 30]增加。考虑模型精度,采用N=10的延迟单元,即将连续10个时段的前池液位量和上游泵站提升量,前20到30时刻的上游泵站提升量及液位控制设定量为输入,数据时间间隔为1分钟。
令A矩阵为上游泵站提升量,B矩阵为前池液位值,C矩阵为本泵站的排出量,D矩阵为开关泵液位设定量。则输入矩阵P=[A B C D],具体的排列方式为:
其中a1到aN-20为第1时刻到N-20时刻的上游泵站提升量,
b11到bN-10为第11个时刻到第N-10个时刻的污水泵站前池水位值,
c11到cN-10为第11个时刻到第N-10个时刻的本泵站排水量值,
d11和dN-10为第11个时刻到第N-10个时刻的泵站开泵设定水位。
相应的前池液位目标输出矩阵:T=[b31 b32…bN]T
步骤(2)数据归一化处理
对于输入矩阵P,具体做法是分别对A,B,C,D四个矩阵进行归一化处理。以A矩阵为例:
对A矩阵中的每一列按照归一化公式进行归一化处理,共处理10列。再依次对B,C,D矩阵进行类似的处理,归一化处理后的输入矩阵为:P′=[A′B′C′D′]。
对于输出矩阵T=[b
31 b
32…b
N]
T,x
i为待处理的前池水位数据,x
min为前池水位数据中的最小值,x
max为前池水位数据中的最大值,
为归一化处理之后的前池水位值。归一化后的输入矩阵为T′。
步骤(3)构建BP神经网络
搭建BP神经网络框架,调用Matlab7.1神经网络工具箱中的newff函数,
Net=newff(threshold,[20,1],’tansig’,’purelin’,trainlm)
其中Threshold是一个40*1的矩阵定义40个输入输出向量的最小值和最大值;[20,1]表示第一层有20个神经元,第二层有1个神经元;tansig为输入层传递函数;purelin为输出层传递函数;trainlm为基于l-m算法的训练函数。
步骤(4)训练BP神经网络
a.初始化网络
net.initFcn用来决定整个网络的初始化函数。参数net.layer{i}.initFcn用来决定每一层的初始化函数。initwb函数根据每一层自己的初始化参数(net.inputWeights{i,j}.initFcn)初始化权重矩阵和偏置,初始化权重通常设为rands,具体方法如下:
net.layers {1}.initFcn=’initwb’;
net.inputWeights{1,1}.initFcn=’rands’;
net.layerWeights{2,1}.initFcn=’rands’;
net.biases{1,1}.initFcn=’rands’;
net.biases{2,1}.initFcn=’rands’;
net=init(net);
net.IW{1,1}为输入层到隐含层的权重矩阵
net.LW{2,1}为隐含层和输出层间的权重矩阵;
net.b{1,1}为隐含层的阀值向量,
net.b{2,1}为输出接点的阀值;
b.设置网络训练次数、训练目标误差及用来显示的步数
net.trainParam.epochs=2000;
net.trainParam.goal=0.0008;
net.trainParam.show=100;
设置网络训练次数为2000步,训练目标误差为0.0008,显示训练步数为100步。
c.利用输入矩阵P′和目标矩阵设为T′,通过调用train函数,net=train(net,P′,T′)进行污水泵站前池水位预测网络训练直至收敛。
步骤(5)网络测试
将用于测试的历史数据按照步骤(1)中的输入矩阵格式组成用于污水泵站前池水位网络测试的矩阵p_test,再按照步骤(2)进行归一化处理,归一化后的测试矩阵为p′_test。调用Matlab7.1神经网络工具箱中的sim()函数,对训练好的网络进行仿真。调用程序代码为:D=sim(net,p′_test);D矩阵即为污水泵站前池水位预测值。
步骤(6)反归一化处理
对测试所得的泵站前池水位数据按照公式
进行反归一化处理,其中x′为反归一化处理后最终的前池液位数据,
为仿真测试得到的前池液位数据,x
max为前池液位数据中的最大值,x
min为前池液位数据中的最小值。反归一化后的污水泵站前池水位为T′_test,即测试所得到的污水泵站前池水位为T′_test。