基于BP神经网络的自整定PID控制仿真一、目的1.熟悉神经网络的特征、结构以及学习算法2.掌握神经网络自整定PID的工作原理3.了解神经网络的结构对控制效果的影响4.掌握用MATLAB实现神经网络控制系统仿真的方法。二、设备及条件计算机系统Matlab仿真软件三、问题背景在工业控制中,PID控制是工业控制中最常用的方法。这是因为PID控制器结构简单、实现简单,控制效果良好,已得到广泛应用。但是,PID具有一定的局限性:被控制对象参数随时间变化时,控制器的参数难以自动调整以适应外界环境的变化。为了使控制器具有较好的自适应性,实现控制器参数的自动调整,可以采用神经网络控制的方法。利用人工神经网络的自学习这一特性,并结合传统的PID控制理论,构造神经网络PID控制器,实现控制器参数的自动调整。基于BP神经网络的PID控制器结构如图1所示。控制器由两部分组成:一是常规PID控制器,用以直接对对象进行闭环控制,且三个参数在线整定;二是神经网络NN,根据系统的运行状态,学习调整权系数,从而调整PID参数,达到某种性能指标的最优化。图1基于神经网络的PID控制器结构四、基于BP神经网络的PID设计1设计原理神经网络采用结构为4-5-3型的BP网络,如图2。图2BP网络结构其中,输出层激励函数取非负的Sigmoid函数,隐层取正负对称的Sigmoid函数。被控对象为一时变非线性对象,数学模型可表示为:2()(1)()(1)1(1)akykykukyk式中,系数a(k)是慢时变的,。为保证控制器有一定的动态跟踪能力,选定神经网络的输入层输入为[(),(1),(2),1]TinXekekek网络的学习过程由正向和反向传播两部分组成。如果输出层不能得到期望输出,那么转入反向传播过程,通过修改各层神经元的权值,使得输出误差信号最小。输出层节点分别对应三个可调参数(3)1(3)2(3)3pIDOKOKOK取性能指标函数为:21()(()())2Ekrkyk设其中()()()rkykek若PID控制器采用采用增量式数字PID控制算法,则有(3)1(3)2(3)3()()(1)()()()()2(1)(2)ukekekOukekOukekekekO2.网络权系数调整网络权系数的修正采用梯度下降法。根据相关数学知识,针对指定因变量的梯度代表了使因变量增速最大的自变量变化方向,故而其反方向代表了因变量下降最快的自变量变化方向,如果我们选取性能指标()Ek为因变量,网络各层权系数为自变量,则对应梯度的负方向就是权系数调整的最佳方向,因此,实际上构成了一个有目标的搜索算法,对最终结果的收敛性提供了有力的保证。对应于本题采用的4-5-3型的BP网络,梯度负方向的计算:(1)隐含层-输出层:(3)(3)(3)(3)(3)(3)()()(1)()****(1)()lljllljlOnetEkEkykukykukOnet其中:()Ek为指标函数(3)jl为隐含层-输出层权系数矩阵元素(1)yk为被控对象输出()uk为PID控制器输出(3)lO为输出层输出(3)lnet为输出层输入根据所选用神经网络的数学模型,易知:(3)1(3)2(3)3(3)(3)(3)(3)(2)(3)()((1)(1))(1)(1)()()(1)()()()()2(1)(2)[]()lllljjlEkrkykekykukekekOukekOukekekekOOgnetnetnetOk其中:1,2,3,4j1,2,3l(2)()jOk为隐含层输出,1[][1tanh()]2gxx,为输出层激励函数,'()()*[1()]gxgxgx为其偏导数。另外,(1)()ykuk直接的数学表达不容易获得,但我们可以使用它的符号函数来近似,仍可以保证参数修正方向的正确性,而由此造成其模的误差只影响参数调整的速度,它可以通过调整学习速率来得以补偿。故而最终有:(3)(2)(3)()(1)(1)*sgn[]*[()(1)]*[]*()()ljjlEkykekekekgnetOkuk(2)输入层-隐含层:(2)(2)(2)(2)(2)(2)333312(2)3(2)3(2)3(2)123()()**()()()()()()()()()()***()()()jjijjjijjjjjOnetEkEkkOnetkknetknetknetkEkEkEkEkOnetkOnetkOnetkO其中:1,2,3,4i1,2,3,4,5j1,2,3l(3)3(3)(3)()()(1)()***(1)()llllOEkEkykuknetykukOnet(2)'(2)(2)[()]()jjjOfnetknetk3(3)1(2)()()jljnetkkO(2)(1)(2)()()jiijnetOkk()tanh()fxx,为输出层激励函数,'2()[1()]/2fxfx为其偏导数。故而最终有:3(3)'(2)(1)(2)31()()[*()]*[()]*()()()jljilijlEkEkkfnetkOkknetk(3)网络权值修正量梯度的负方向给出了网络权值修正的方向,乘以系数,即为权值修正量。其中代表了算法每次在梯度负方向搜索的步长,称为网络的学习速率,另外,如果考虑上次权值对本次权值变化的影响,需要加入动量(平滑)因子,此时新的权值为:(2)(2)(2)(2)(2)(3)(3)(3)(3)(3)()(1)()*[()(1)]()()(1)()*[()(1)]()ijijijijijjljljljljlEkkkkkkEkkkkkk3.程序流程步骤1:设定初始状态和参数初始值,包括随机产生初始BP神经网络权值系数,设定初始输入输出值为零,设定学习速率和惯性系数,计数器设为k=1,并设定计数上限等。步骤2:计算产生BP神经网络隐含层输入。本程序为采样获得e(k),并结合储存的e(k-1),e(k-2),及常数1作为隐含层输入。前两次的e(k-1),e(k-2)并未真实产生直接取0.步骤3:前向传播计算。包括:(1)BP神经网络前向传播计算,得到输出层输出pK,IK,DK.;(2)增量式PID控制器计算控制器输出()uk;(3)被控对象模型计算输出值()yk步骤4:反向传播计算。包括:(1)修正输出层的权系数(3)()jlk;(2)修正隐含层的权系数(2)()ijk;步骤5:参数更新步骤6:如果k达到设定的次数上限,则结束;否则,k=k+1,并返回步骤2.总的程序流程图如下:开始BP网络参数及初始值设定是否达到最大步数?前向传播反向传播结束是否参数更新图3程序流程图五、运行结果及分析1.运行结果取学习速率0.25,惯性系数0.05,隐层节点数位5,各层加权系数的初值取区间[-0.5,0.5]上的随机数进行仿真实验,由于初始值随机,各次仿真结果不完全相同,但基本都能够快速收敛至理想结果,取其中具有普遍代表性的两幅图:图4随机结果1图5随机结果2图中红线表示输入阶跃信号,蓝线表示被控对象输出2.改变参数对运行结果的影响及分析为了便于结果的对比,使每次的初始网络权系数都相同,每次只改变所要考察的参数。此处取网络权系数矩阵的各元素初始值为-0.5.(1)隐层节点数对仿真结果的影响分别取具有代表性的隐层节点数为3,5,7,8的情况进行仿真,仿真过程分为两个阶段:刚开始,输入信号幅值为1,对于收敛的系统,一般会在50到100次之间稳定,我们可以通过系统在前200次迭代情况,考察系统的收敛性及收敛速度;从第201次开始,我们改变输入信号的幅值为1.2,考察稳定系统在情况发生改变的情况下,跟踪并稳定至新状态的能力。同时为了使各系统间性能对比更明显,对系统的时变程度也进行了适当的放大。图6隐层节点数为4图7隐层节点数为5图8隐层节点数为7图9隐层节点数为8由以上图可知,对于前200次的迭代,在隐层节点数较小时,随着节点数增多,系统对误差的敏感性增强,隐层节点数从4变成5,收敛变短,但随着节点数进一步增加,系统振荡程度变大,反而又不容易收敛。另一方面,这个变化规律在后200次的新状态跟踪中也是成立的。这一点并不难以理解,因为后200次改变输入幅值,本质上其实就是人为产生一个误差,然后重新训练并跟踪的过程,所不同的是,它的初始网络权值本身就是网络在前一稳定状态的训练结果,在此基础上的新状态跟踪能力本身就是系统性能的体现,相对与完全的随机初始值或者某一指定值,在低重复次数的试验中,其结果更具代表性和可靠性。以上各图结果中,前后两阶段变化规律的相似性也印证了这一点。总的来讲,增大隐层节点数,在一定范围内会减少收敛时间,但同时也会造成系统稳定性变差,超调振荡变得严重,而在系统收敛的范围内,隐层节点数太小,系统相对迟钝,收敛速度变慢,输入变化时,抗干扰能力较差,跟踪新状态所花的时间也变长。另外,从图中明显可以看出,隐层节点数过大,系统陷入局部最优的风险也在不断增大,表现为跟踪曲线中有明显变长的水平线,实际上,在所给的情况下,当隐层节点数增为13时,系统明显陷入局部最优。图10隐层节点数13时,系统陷入局部最优综上,系统隐层节点数并不是越多越好,也不是越少越好,而应该根据实际情况和实验结果选定合适值。针对本实验问题,合适的隐层节点数为5个,图7显示了各方面都较好的跟踪能力。(2)学习速率及惯性系数对仿真结果的影响0.25,0.05时,有如下结果图110.25,0.05时的跟踪曲线保持0.05时,改变分别为1.25,0.02有如下结果图121.25,0.05图130.02,0.05保持0.25,改变分别为0.1,0.001结果如下图140.25,0.1图150.25,0.01从以上图可知,学习速率对结果的影响与隐层节点数有些类似,太小系统跟踪能力较差或跟踪不上,太大容易振荡并且陷入局部最优的风险也增大。惯性系数对结果的影响不是很突出,可能与有相反的效果的趋势,但是并不明显,不过可以确定的是,的取值应当较小,而不能大,否则系统性能明显恶化。