jack_boy 发表于 2007-6-27 10:26

<求助>单神经元pid在用s函数仿真中的问题

现在刚开始用单神经元pid做仿真,遇到一些问题请大家指点指点!
我是按照从网上搜到的一篇文章《基于s函数的神经元PID控制SIM U LIN K仿真模型》做的,控制对象的传递函数是:
G(S)=2.3exp(-0.167s)/(3.05s+1),学习步长:ηp=6800,ηi=68,ηd=1000,神经元比例系数:k=1.1,采样周期T=0.0167。
我仿真的结果跟文献上的结果出入很大,我用的是ode45,变步长,参数调整多次,其结果仍然比单纯的pid控制的效果差,体现不出变参数pid控制的优点。并且,当我设置定步长0.0167仿真的时候,出现振荡,是采样周期设置有问题吗,请问应该在哪里设置呢?
我的s函数主要部分如下:
sizes.NumContStates= 0;
sizes.NumDiscStates= 3;
sizes.NumOutputs   = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;   
sys = simsizes(sizes);
x0= ;

function sys=mdlUpdate(t,x,u,etap,etai,etad,k)
sys(1) = x(1)+etai*u(1)*u(1);   %u(1)=e(k)=r(k)-y(k)
sys(2) = x(2)+etap*u(1)*u(2);   %u(2)=e(k)-e(k-1)
sys(3) = x(3)+etad*u(1)*u(3);   %u(3)=e(k)-2(k-1)+e(k-2)

function sys=mdlOutputs(t,x,u,etap,etai,etad,k)
sys = k*(x(1)*u(1)+x(2)*u(2)+x(3)*u(3))/(abs(x(1))+abs(x(2))+abs(x(3)));    %output is du(k),u(k)=u(k-1)+du(k)
系统框图如下:


请各位帮帮我!先谢谢了!
文献中的结果很好

这是我做的结果

我的仿真文件:

lirui0662 发表于 2007-6-27 10:55

我觉得就是你取的参数的问题
多换几次参数比较一下,看看规律

jack_boy 发表于 2007-6-27 11:17

参数调过很多次,无法达到文献中的效果,而且也达不到我做的pid的效果
参数这么难调的话,他比pid好在哪里呢?

lirui0662 发表于 2007-6-27 16:50

我有同学做的单神经元pid效果很好
这个肯定是比传统的lid调节要好
不过不知道什么原因你的这个效果不好
你可以参考一下薛定宇编的那本《控制系统计算机辅助设计-matlab语言与应用》
上面有很多很好的例子可以借鉴

jack_boy 发表于 2007-6-27 17:47

能让你同学帮我看看么?
谢谢lirui0662 你的关注及推荐的参考书!

Matlab 发表于 2007-6-29 14:25

u(3)输入前应该再加一个-(z-1)/z才能达到u(3)=e(k)-2(k-1)+e(k-2)吧

kee 发表于 2008-3-28 10:28

怎么无人回答啊
我把你的模型下来看看,结果效果更差,怎么搞啊??

ldren110 发表于 2008-4-7 12:29

这模型和书上的有些不一样啊

这模型和书上的有些不一样啊,《先进PID控制与MATLAB仿真》上有例程

sunnymovie 发表于 2009-5-18 07:56

看看xiexie

pauljames 发表于 2009-12-10 09:49

书上那个是用m语言写的仿真文件,不如模型直观。而且,如果要加入到xpc做实时控制的话,m文件不能用的。

hidefreak 发表于 2010-5-22 05:10

我也刚刚才接触simulink 下面的是我自己参考书上的算法和论文得出的结论 如有不对 请大家指出

lz照着论文弄就是走错的第一步 我现在总算知道什么叫尽信书不如无书了
我所搜到的神经元pid的s函数论文里 内容基本都差不多
我照着论文搭好系统 设好参数根本仿真不出来
lz是在控制输出的后面加了个饱和器 把值限制在+-5才得到个勉强可以看的图
把积分器去掉的话 可以看到控制输出值在10的几次方到几十次方的量级 整个系统输出也在10的几十次方量级 而且根本不稳定
后来看了一些将神经元pid原理的书的论文 发现mux的输入除了x1、x2、x3外 还应该有一个u 就是当前的控制量
书上明明写着w(k+1)=w(k)+eta*z(k)*u(k)*xi(k) 不知道为什么到某些论文里u(k)就没有了 害我浪费了一个通宵

我修改了m文件 将u也引入算法 不知道对不对 不过 系统至少收敛了 得到了比较像样的图像



[ 本帖最后由 hidefreak 于 2010-5-22 05:27 编辑 ]

hqli_06 发表于 2010-5-25 15:43

学习一下,不过还是有诸多疑问啊

龙剑 发表于 2011-5-20 15:32

我也在做,先参考下看看。

panda810 发表于 2011-10-11 18:05

下下来看看呢。。。

panda810 发表于 2011-10-11 18:12

最近也在研究这方面
页: [1] 2
查看完整版本: <求助>单神经元pid在用s函数仿真中的问题