用MATLAB玩控制-PID神经网络多变量控制及其问题
标签:
pid神经网络多变量非线性系统解耦准则函数不跟踪 |
PID神经网络结构如图1所示(参见《神经网络控制》徐丽娜),PID神经网络的输入是设定和系统输出,隐含层的三个节点P、I和D进行比例积分微分运算,输出就相当于PID调节器输出,PID神经网络多变量控制系统结构如图2所示,按照书上说法,PID神经网络有解耦作用,我们照原理用MATLAB实现PID神经网络多变量控制,其仿真效果如图3所示,从图中可以看出y1没有跟踪r1,y2也没有跟踪r2,或者说PID神经网络不具有解耦功能,一开始想,怎么回事,神经网络通常都有非常复杂的计算公式,是不是编程上那里有问题,但穷尽了洪荒之力也没查出问题,那看看别人怎么玩的,经过查找,发现《MATLAB神经网络30个案例分析》有PID神经网络多变量控制的源代码,找来一试,其仿真效果如图4所示,还是那副鸟样,系统输出无法跟踪设定,后来,又找到《神经网络控制》一书的源代码,但非常遗憾的是恰巧没有PID神经网络多变量控制的代码,然后,找到原始文献《PID神经元网络对强耦合带时延多变量系统的解耦控制》(后来发现其实这也不是最早原始文献),并用其中例子,发现输出比较接近设定,更换设定就无法跟踪,再后来,我就发了一个帖子(见http://www.ilovematlab.cn/thread-259050-1-1.html)问这事,也没有啥好的答复,不过发完帖子不久我想出一个可能原因,但没有马上验算,后来验算一下,合乎逻辑,下面就叙述可能不跟踪的原因,我们看准则函数J=[(r1-y1)^2+(r2-y2)^2+...+(rn-yn)^2]/2,这个J可以看成是个势能函数,其全微分ΔJ=-[(r1-y1)*Δy1+(r2-y2)*Δy2+...+(rn-yn)*Δyn],如果ΔJ=0,则神经网络无法再自学习,进一步简化,假设Δy1≈Δy2≈...≈Δyn,则当(r1-y1)+(r2-y2)+...+(rn-yn)=0,神经网络不再进化,PID神经网络不再进化,也就意味着其输出不再变化,以下验证实际情况,第一例,如图5所示,ΔJ/Δyi=6.6613e-016≈0,第二例,如图6所示,ΔJ/Δyi=0.0044≈0。当然,我仅仅是个MATLAB爱好者,而PID神经网络发明者是个professor,professor就隐含着专业、职业的意思,专业者vs爱好者,自然是专业赢,所以,我希望是我搞错了,而不是PID神经网络有错,另外,我推测,PID神经网络用于控制多变量线性系统应该是可以的,不过没验证过。

加载中…