基于S函数的RBF神经网络PID控制器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于径向基函数的神经网络的PID控制器
摘要
RBF神经网络在分类问题中得到了广泛的应用,尤其是模式识别的问题。

许多模式识别实验证明,RBF具有更有效的非线性逼近能力,并且RBF神经网络的学习速度较其他网络快。

本文在具有复杂控制规律的S函数构造方法的基础上,给出了基于MATLAB语言的RBF神经网络PID控制器,及该模型的一非线性对象的仿真结果。

关键词:S函数;RBF神经网络PID控制器;Simulink仿真模型径向基函数(RBF-Radial Basis Function)神经网络是由J.Moody和C.Darken 在20世纪80年代末提出的一种神经网络,它具有单隐层的三层前馈网络。

由于它模拟了人脑中局部调整、相互覆盖接受域(或称野-Receptive Field)的神经网络结构,因此,RBF神经网络是一种局部逼近网络,已证明它能以任意精度逼近任意连续函数。

1.S函数的编写方法
S函数是Simulink中的高级功能模块,Simulink是运行在MATLAB环境下用于建模、仿真和分析动态系统的软件包。

只要所研究的系统模型能够由MATLAB语言加以描述,就可构造出相应的S函数,从而借助Simulink中的S 函数功能模块实现MATLAB与Simulink之间的沟通与联系,这样处理可以充分发挥MATLAB编程灵活与Simulink简单直观的各自优势。

当系统采用较复杂的控制规律时,Simulink中没有现成功能模块可用,通常都要采用MATLAB编程语言,编写大量复杂而繁琐的源程序代码进行仿真,一是编程复杂、工作量较大,二来也很不直观。

如果能利用Simulink提供的S函数来实现这种控制规律,就可以避免原来直接采取编程的方法,不需要编写大量复杂而繁琐的源程序,编程快速、简捷,调试方便,则所要完成的系统仿真工作量会大大减少。

RBF神经网络PID控制器的核心部分的S函数为:
function [sys,x0,str,ts]=nnrbf_pid(t,x,u,flag,T,nn,K_pid,eta_pid,xite,alfa,beta0,w0) switch flag,
case 0, [sys,x0,str,ts] = mdlInitializeSizes(T,nn);
case 2, sys = mdlUpdates(u);
case 3, sys = mdlOutputs(t,x,u,T,nn,K_pid,eta_pid,xite,alfa,beta0,w0);
case {1, 4, 9}, sys = [];
otherwise, error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts] = mdlInitializeSizes(T,nn)
sizes = simsizes;
sizes.NumContStates = 0; sizes.NumDiscStates = 3;
sizes.NumOutputs = 4+5*nn; sizes.NumInputs = 9+15*nn;
sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;
sys=simsizes(sizes); x0=zeros(3,1); str=[]; ts=[T 0];
function sys = mdlUpdates(u)
sys=[u(1)-u(2); u(1); u(1)+u(3)-2*u(2)];
function sys = mdlOutputs(t,x,u,T,nn,K_pid,eta_pid,xite,alfa,beta0,w0)
ci_3=reshape(u(7: 6+3*nn),3,nn); ci_2=reshape(u(7+5*nn: 6+8*nn),3,nn);
ci_1=reshape(u(7+10*nn: 6+13*nn),3,nn);
bi_3=u(7+3*nn: 6+4*nn); bi_2=u(7+8*nn: 6+9*nn);
bi_1=u(7+13*nn: 6+14*nn); w_3= u(7+4*nn: 6+5*nn);
w_2= u(7+9*nn: 6+10*nn); w_1= u(7+14*nn: 6+15*nn); xx=u([6;4;5]);
if t==0
ci_1=w0(1)*ones(3,nn); bi_1=w0(2)*ones(nn,1);
w_1=w0(3)*ones(nn,1); K_pid0=K_pid;
else, K_pid0=u(end-2:end); end
for j=1: nn % Gaussian basis h
h(j,1)=exp(-norm(xx-ci_1(:,j))^2/(2*bi_1(j)*bi_1(j)));
end
dym=u(4)-w_1'*h; w=w_1+xite*dym*h+alfa*(w_1-w_2)+beta0*(w_2-w_3); for j=1:nn
d_bi(j,1)=xite*dym*w_1(j)*h(j)*(bi_1(j)^(-3))*norm(xx-ci_1(:,j))^2;
d_ci(:,j)=xite*dym*w_1(j)*h(j)*(xx-ci_1(:,j))*(bi_1(j)^(-2));
end
bi=bi_1+d_bi+alfa*(bi_1-bi_2)+beta0*(bi_2-bi_3);
ci=ci_1+d_ci+alfa*(ci_1-ci_2)+beta0*(ci_2-ci_3);
dJac=sum(w.*h.*(-xx(1)+ci(1,:)')./bi.^2); % Jacobian
KK=K_pid0+u(1)*dJac*eta_pid.*x; sys=[u(6)+KK'*x; KK; ci(:); bi(:); w(:)];
该控制器中的外部参数均在封装后的控制器参数对话框中给出。

2.RBF神经网络PID控制器Simulink仿真模型
编写好S函数之后,就可以建立其Simulink模型,其步骤是:
(1)输入函数变量名及参数变量名。

单击Simulink模型库中非线性环节的S 函数模块,并拖动到所打开的模型窗口上,双击S函数模块,按照相关的提示输入函数变量名nnrbf-pid和参数名T,nn,xite,alfa。

(2)创建子系统(create subsystem)
(3)屏蔽子系统(mask subsystem)
在屏蔽子系统的对话框中按照提示输入参数变量。

双击该模块也可以对参数进行修改。

RBF神经网络控制器的Simulink模块如图1所示。

其中输入1为给定信号与对象输出信号的误差e(k),输入2为对象输出信号y(k)。

输出1为控制器的输出u(k),输出2为kp,ki,kd三个权值的变化量。

图1 RBF神经网络PID控制器Simulink模型
3. 系统仿真
系统仿真框图如图2所示。

被控对象为一非线性环节,其Simulink 仿真框
图如图3所示,其模型描述为)()1(1)
1()8.01(2.1)(2/1.0t u t y t y e t y T t +-+--=-,其中采样周
期T 为0.001.控制器的参数nn 取6,xite 取0.25,alfa 取0.05.输入为多阶梯波信号,具体参数如图4所示。

图2 系统仿真框图
图3 非线性受控对象
图4 RBF网络PID参数对话框仿真结果分别如图5和图6所示:
00.20.40.60.81 1.2 1.4 1.6
-1
-0.5
0.5
1
1.5
2
图5 多阶梯波信号跟踪曲线
00.20.40.60.81 1.2 1.4 1.6
-0.15
-0.1
-0.05
0.05
0.1
0.15
0.2
图6 kp ,ki ,kd 参数的变化曲线
4.结论
RBF神经网络PID控制器由于采用RBF神经网络在线实时调整PID控制器的三个参数,可以对任意非线性对象实现很好的跟随控制。

由上图5课件,用S 函数实现RBF神经网络PID控制规律的复杂系统仿真模型,仿真结果显示其多阶梯波非线性信号跟踪效果比较理想,同时实现了PID参数的在线调整。

PID参数的变化如图6所示。

仿真程序编写简捷、快速,调试方便。

参考文献
[1]刘金琨.先进PID控制MATLAB(第3版)[M].北京:电子工业出版社,2011.3
[2]薛定宇.控制系统计算机辅助设计——MATALAB语言与应用[M].北京:清华大学出版社,2006
[3]李绍铭,赵伟.基于S函数的RBF神经网络PID控制器Simulink仿真[J].安徽冶金科技职业学院学报,2008。

相关文档
最新文档