声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2086|回复: 1

[控制系统类] ref神经PID控制器的参数调节问题

[复制链接]
发表于 2011-8-20 09:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我按照薛定宇那本<<控制系统计算机辅助设计-matlab语言与应用>>设计的REF神经PID控制器,直接把他的控制器用在我的模型上面,但控制效果很差,不知道调节那个参数,请高手指点一下,还有上面的参数nn表示什么意思,能不能把他的程序给详细说明一下?    哪位大侠能来指点一二,非常感谢,

这是他的s函数,请问其中nn代表什么,他的是几层的神经网络?输入,输出各是什么?
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(:)];

回复
分享到:

使用道具 举报

发表于 2011-8-21 08:46 | 显示全部楼层
3层网络  nn我记得是隐层的节点数 输出比较多了 有u pid 以及相关的权值阈值 输入就是各误差信息 权值阈值 这些你结合介绍看比较清楚
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-1 10:46 , Processed in 0.055005 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表