⑴ 基于BP神经网络的PID,输入参数的归一化,问题求助
利用BP神经网络来整定PID,也许能实现。但是书本上的这个BP-PID理论书本是错误的。你仔细看看,它的输出激活函数的值域是【0,1】,PID的参数不可能是只在这个范围啊!可以说输出没有反归一化(值域扩展)。至于输入归一化,可用不做,但是输出在0和1之间,就是闹笑话了
⑵ s函数-神经网络PID
我毕设是这个研究好几天了
终于有点头绪.虽然你是3年前发的我忍不住跟你分享一下.
估计还会有人需要。我找了整整几天在网上找不到任何有用的资料
等过几天答辩完了有新的理解会回来补充,就当造福后人了。
switch flag,
case 0
[sys,x0,str,ts]=mdlInitializeSizes(nh);
case 3
sys=mdlOutputs(t,x,u,nh,xite,alfa,KF1,KF2,wi,wo);
case { 1,2, 4, 9 }
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
flag是标志位.不同的flag取值代表函数进行不同的运算,这里flag=0进行初始化运算,=3进行sys输出运算,其他的不运算。
function [sys,x0,str,ts] = mdlInitializeSizes(nh)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4+7*nh; % dynamically sized?
sizes.NumInputs = 14*nh+7; % dynamically sized?
sizes.DirFeedthrough = 1; % has direct feedthrough
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
str = [];
x0 = [];
ts = [-1 0];
这些是必要的参数设置,分别是连续参数为0,离散参数为0,输出个数4+7*nh,输入个数14*nh+7(不知道4和7是哪来的?分别是输入参数和返回参数的数量),直接馈入(我也不知道是什么)为1,取样次数为1.设置完赋给sys输出。
str是没用的东西,x0是初始状态为空矩阵,这里你打错字了是ts=[T0],ts是一个1X2的向量,ts(1)是采样周期,ts(2)是偏移量。
wi_2=wi+reshape(u(8:7+4*nh),nh,4);
wo_2=wo+reshape(u(8+4*nh:7+7*nh),3,nh);
wi_1=wi+reshape(u(8+7*nh:7+11*nh),nh,4);
wo_1=wo+reshape(u(8+11*nh:7+14*nh),3,nh);
这个是学习网络的建立过程,具体我也不懂。
xx=[u(1)-u(2);u(1);u(1)+u(3)-2*u(2)];
这句是增量式PID控制算法,应该是你说的PID部分,我也不太懂。
程序部分我就知道这些。
还有我好久才查到的,nh代表神经元个数,xite是学习速率,alfa惯性系数。
希望对再来看的人有帮助。