发明名称 一种基于BP神经网络的孵房湿度控制方法
摘要 本发明公开了一种基于BP神经网络的孵房湿度控制方法,首先通过BP神经网络对孵房湿度进行预测,然后通过模糊控制器控制加湿器的阀门开度,模糊控制器的输入为期望湿度与BP神经网络输出的下一秒的孵房的湿度预测值进行相减所得湿度的偏差和偏差变化率,输出为加湿器的电磁阀阀门开度,当孵房湿度偏低时,加大加湿器阀门开度,加大加湿器喷水量,从而增大孵房湿度,否则减少加湿器阀门开度,从而控制加湿器的喷水量,控制孵房湿度在期望湿度上下极小范围内波动,从而稳定控制湿度,极大的提高了出雏率和雏禽品质。
申请公布号 CN103309370A 申请公布日期 2013.09.18
申请号 CN201310214158.4 申请日期 2013.06.01
申请人 中南林业科技大学 发明人 周国雄
分类号 G05D22/02(2006.01)I;G06N3/02(2006.01)I 主分类号 G05D22/02(2006.01)I
代理机构 代理人
主权项 1.一种基于BP神经网络的孵房湿度控制方法,其特征在于,包括以下步骤:步骤1:采用BP神经网络预测孵房湿度,BP神经网络为三层双输入单输出模型,隐含层包含3个神经元,其中输入向量:x=(x<sub>1</sub>,x<sub>2</sub>),为通过温度数据采集模块和湿度数据采集模块采集的当前时刻的孵房温度和孵房湿度,隐含层输入向量:h<sub>i</sub>=(hi<sub>1</sub>,hi<sub>2</sub>,hi<sub>3</sub>),隐含层输出向量:h<sub>o</sub>=(ho<sub>1</sub>,ho<sub>2</sub>,ho<sub>3</sub>),输出层输入向量:y<sub>i</sub>,输出层输出向量:y<sub>o</sub>,为当前时刻的下一秒的孵房湿度预测值,期望输出向量:d<sub>o</sub>,期望湿度,为52.9,输入层到隐含层的连接权值:w<sub>ih</sub>,隐含层到输出层的连接权值:w<sub>ho</sub>,隐含层各神经元的阈值:b<sub>h</sub>,为0.02,输出层神经元的阈值:b<sub>o</sub>,为0.01,激活函数:<maths num="0001"><![CDATA[<math><mrow><mi>f</mi><mrow><mo>(</mo><msub><mi>n</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><mrow><mo>(</mo><msub><mi>n</mi><mi>j</mi></msub><mo>-</mo><mn>0.1</mn><mo>)</mo></mrow><mo>/</mo><mn>2</mn></mrow></msup></mrow></mfrac><mo>,</mo></mrow></math>]]></maths>误差函数:<maths num="0002"><![CDATA[<math><mrow><mi>e</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><msup><mrow><mo>(</mo><msub><mi>d</mi><mi>o</mi></msub><mo>-</mo><msub><mi>y</mi><mi>o</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>,</mo></mrow></math>]]></maths>预定精度:0.05,预测过程如下:(1)每隔1秒,通过温度数据采集模块采集孵房温度一次,通过湿度数据采集模块采集孵房湿度一次,将当前时刻采集的温度和湿度作为BP神经网络的输入x=(x<sub>1</sub>,x<sub>2</sub>);(2)取0~1的随机数给BP神经网络各层连接权值赋初始值,计算隐含层和输出层各神经元的输入和输出,输出层的输出即为当前时刻的下一秒的孵房的湿度预测值,<maths num="0003"><![CDATA[<math><mrow><msub><mi>hi</mi><mi>h</mi></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mn>2</mn></munderover><msub><mi>w</mi><mi>ih</mi></msub><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><msub><mi>b</mi><mi>h</mi></msub><mo>,</mo><mi>h</mi><mo>=</mo><mn>1,2,3</mn><mo>,</mo></mrow></math>]]></maths>ho<sub>h</sub>=f(hi<sub>h</sub>),h=1,2,3,<maths num="0004"><![CDATA[<math><mrow><msub><mi>y</mi><mi>i</mi></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>h</mi><mo>=</mo><mn>1</mn></mrow><mn>3</mn></munderover><msub><mi>w</mi><mi>ho</mi></msub><msub><mi>ho</mi><mi>h</mi></msub><mo>-</mo><msub><mi>b</mi><mi>o</mi></msub><mo>,</mo></mrow></math>]]></maths>y<sub>o</sub>=f(y<sub>i</sub>);(3)计算误差函数对各层神经元权值的偏导数<maths num="0005"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ho</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><mrow><mo>&PartialD;</mo><msub><mi>y</mi><mi>i</mi></msub></mrow></mfrac><mfrac><mrow><mo>&PartialD;</mo><msub><mi>y</mi><mi>i</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ho</mi></msub></mfrac><mo>,</mo></mrow></math>]]></maths>其中<maths num="0006"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><msub><mi>y</mi><mi>i</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ho</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><munderover><mi>&Sigma;</mi><mrow><mi>h</mi><mo>=</mo><mn>1</mn></mrow><mn>3</mn></munderover><msub><mi>w</mi><mi>ho</mi></msub><msub><mi>ho</mi><mi>h</mi></msub><mo>-</mo><msub><mi>b</mi><mi>o</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ho</mi></msub></mfrac><mo>=</mo><msub><mi>ho</mi><mi>h</mi></msub><mo>,</mo><mi>h</mi><mo>=</mo><mn>1,2,3</mn></mrow></math>]]></maths><maths num="0007"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>y</mi></mrow><mi>i</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mrow><mo>(</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><msup><mrow><mo>(</mo><msub><mi>d</mi><mi>o</mi></msub><mo>-</mo><msub><mi>y</mi><mi>o</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>)</mo></mrow></mrow><mrow><mo>&PartialD;</mo><msub><mi>y</mi><mi>i</mi></msub></mrow></mfrac><mo>=</mo><mo>-</mo><mrow><mo>(</mo><msub><mi>d</mi><mi>o</mi></msub><mo>-</mo><msub><mi>y</mi><mi>o</mi></msub><mo>)</mo></mrow><mi>yo</mi><mo>&prime;</mo><mo>=</mo><mo>-</mo><mrow><mo>(</mo><msub><mi>d</mi><mi>o</mi></msub><mo>-</mo><msub><mi>y</mi><mi>o</mi></msub><mo>)</mo></mrow><mi>f</mi><mo>&prime;</mo><mrow><mo>(</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0008"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><mrow><mo>&PartialD;</mo><msub><mi>hi</mi><mi>h</mi></msub></mrow></mfrac><mfrac><mrow><mo>&PartialD;</mo><msub><mi>hi</mi><mi>h</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac></mrow></math>]]></maths><maths num="0009"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><msub><mi>hi</mi><mi>h</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mrow><mo>(</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mn>2</mn></munderover><msub><mi>w</mi><mi>ih</mi></msub><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><msub><mi>b</mi><mi>h</mi></msub><mo>)</mo></mrow></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac><mo>=</mo><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2</mn></mrow></math>]]></maths><maths num="0010"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>hi</mi></mrow><mi>h</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mrow><mo>(</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><msup><mrow><mo>(</mo><msub><mi>d</mi><mi>o</mi></msub><mo>-</mo><msub><mi>y</mi><mi>o</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>)</mo></mrow></mrow><mrow><mo>&PartialD;</mo><msub><mi>ho</mi><mi>h</mi></msub></mrow></mfrac><mfrac><msub><mrow><mo>&PartialD;</mo><mi>ho</mi></mrow><mi>h</mi></msub><mrow><mo>&PartialD;</mo><msub><mi>hi</mi><mi>h</mi></msub></mrow></mfrac><mo>=</mo><mo>-</mo><msub><mi>&delta;w</mi><mi>ho</mi></msub><mi>f</mi><mo>&prime;</mo><mrow><mo>(</mo><msub><mi>hi</mi><mi>h</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths>用-δ表示<img file="FDA00003288741100029.GIF" wi="110" he="145" />误差函数对隐含层到输出层的连接权值w<sub>ho</sub>的偏导数为<maths num="0011"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ho</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><mrow><mo>&PartialD;</mo><mi>yi</mi></mrow></mfrac><mfrac><mrow><mo>&PartialD;</mo><msub><mi>y</mi><mi>i</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ho</mi></msub></mfrac><mo>=</mo><mo>-</mo><msub><mi>&delta;ho</mi><mi>h</mi></msub></mrow></math>]]></maths>用-δ<sub>h</sub>表示<img file="FDA000032887411000211.GIF" wi="138" he="146" />误差函数对输入层到隐含层的连接权值w<sub>ih</sub>的偏导数为<maths num="0012"><![CDATA[<math><mrow><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><mrow><mo>&PartialD;</mo><msub><mi>hi</mi><mi>h</mi></msub></mrow></mfrac><mfrac><mrow><mo>&PartialD;</mo><msub><mi>hi</mi><mi>h</mi></msub></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac><mo>=</mo><mo>-</mo><msub><mi>&delta;</mi><mi>h</mi></msub><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2</mn></mrow></math>]]></maths>(4)修正BP神经网络各层连接权值隐含层到输出层的连接权值w<sub>ho</sub>的增加量为<maths num="0013"><![CDATA[<math><mrow><msub><mi>&Delta;w</mi><mi>ho</mi></msub><mo>=</mo><mo>-</mo><mi>&mu;</mi><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><mrow><mo>&PartialD;</mo><msub><mi>w</mi><mi>ho</mi></msub></mrow></mfrac><mo>=</mo><msub><mi>&mu;&delta;ho</mi><mi>h</mi></msub></mrow></math>]]></maths>输入层到隐含层的连接权值w<sub>ih</sub>的增加量为<maths num="0014"><![CDATA[<math><mrow><mi>&Delta;</mi><msub><mi>w</mi><mi>ih</mi></msub><mo>=</mo><mo>-</mo><mi>&eta;</mi><mfrac><mrow><mo>&PartialD;</mo><mi>e</mi></mrow><msub><mrow><mo>&PartialD;</mo><mi>w</mi></mrow><mi>ih</mi></msub></mfrac><msub><mi>&eta;&delta;</mi><mi>h</mi></msub><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2</mn></mrow></math>]]></maths>其中μ=0.01,η=0.5(5)以下一秒采集的温度和湿度作为BP神经网络的输入,以修正的BP神经网络各层连接权值作为BP神经网络各层连接权值,再计算隐含层和输出层各神经元的输入和输出,再进行上述第(3)步和第(4)步操作,依此循环,共计算依次40秒采集的40组数据,修正各层连接权值40次,得到40个孵房预测湿度;(6)计算全局误差:<maths num="0015"><![CDATA[<math><mrow><mi>E</mi><mo>=</mo><mfrac><mn>1</mn><mrow><mn>2</mn><mo>&times;</mo><mn>40</mn></mrow></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mn>40</mn></munderover><msup><mrow><mo>(</mo><msub><mi>d</mi><mi>o</mi></msub><mo>-</mo><msub><mi>y</mi><mi>o</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup><mo>,</mo></mrow></math>]]></maths>其中k=1,2,3,…40,y<sub>o</sub>(k+1)为第k秒采集的温度和湿度作为BP神经网络的输入时,BP神经网络输出层输出向量,也即BP神经网络预测的第k+1秒时孵房湿度;(7)判断全局误差E是否满足要求,当全局误差E小于或等于预定精度0.05时,BP神经网络结束学习,BP神经网络各层连接权值固定,孵房湿度预测模型确定,否则选取下一个40秒采集的孵房温度和孵房湿度数据,返回到第(5)步,进入下一轮学习,直到全局误差E小于或等于预定精度0.05;步骤2:采用加湿器喷水来调整孵房的湿度,加湿器的喷水时间为2秒,加湿器的喷水量由加湿器的电磁阀阀门开度控制,加湿器的电磁阀阀门开度采用模糊控制器控制,模糊控制器的输入量为期望湿度与步骤1中BP神经网络输出的下一秒的孵房的湿度预测值进行相减所得湿度的偏差Ef和偏差变化率EfC,输出为加湿器的电磁阀阀门开度U,湿度的偏差Ef的实际值范围为[40,62],语言变量为{NB,NM,NS,ZO,PS,PM,PB},分别表示负大、负中、负小、零、正小、正中、正大,其论域为:{-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8},湿度的偏差变化率EfC的实际值范围为[-20,20],语言变量为{NB,NM,ZO,PM,PB},其论域为:{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6},电磁阀阀门开度U的实际值范围为[0,1],语言变量为{NB,NM,NS,ZO,PS,PM,PB},其论域为:{-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8},湿度的偏差Ef,湿度的偏差变化率EfC,电磁阀阀门开度U的隶属度函数均为三角形隶属函数,模糊控制规则为:<img file="FDA00003288741100041.GIF" wi="1484" he="784" />采用面积重心法解模糊。
地址 410004 湖南省长沙市天心区韶山南路498号