神经网络PID控制
控制结构
NNC控制器采用增量PID控制结构
x1(k)=e(k)=r(k)−y(k)
x2(k)=Δe(k)=e(k)−e(k−1)
x3(k)=Δ2e(k)=Δe(k)−Δe(k−1)=e(k)−e(k−1)−[e(k−1)−e(k−2)]
=e(k)−2×e(k−1)+e(k−2)
NNC的控制输出为
Δu(k)=k1x1(k)+k2x2(k)+k3x3(k)
性能指标
J=12[r(k+1)−y(k+1)]2
训练系数 w
=−λ∂J∂y(k+1)∂y(k+1)∂u(k)∂u(k)∂w 问题在于当系统未知时, ∂y(k+1)∂u(k) 无法求得,因此采用NNI来辨识对象模型,以求得 ∂y(k+1)∂u(k) 的代替量 ∂y^(k+1)∂u(k)
辨识器
设辨识对象是单输入单输出的非线性系统
y(k+1)=F[y(k),y(k−1),…,y(k−ny+1),u(k),u(k−1),…,u(k−nu+1)]
ny 为输出的阶次
nu 为输入的阶次采用BP神经网络
- 输入层
输入信号由两部分组成,分别为控制及其延迟信号 u(k),u(k−1),…,u(k−nu+1) ,和输出和输出延迟信号 y(k),y(k−1),…,y(k−ny+1)
来自控制: Out1j(k)=y(k−j),0≤j≤ny−1
来自输出: Out1j(k)=u(k−j),0≤j≤nu−1
Out 表示输入神经元的输出
下角标表示第几个神经元, j 表示第j个
上角标表示第几层神经元,1 表示第一层,即输入层
- 隐藏层
net2j(k)=∑ny+nui=0w2ji(k)⋅Out1i(k)
Out2j(k)=f(net2j(k)),i=0,…,nhidden−1
nhidden 为隐藏层个数
- 输出层
y^(k+1)=∑nhiddeni=0w3i(k)⋅Out2i(k)
- 性能指标
J=12[y(k+1)−y^(k+1)]2
- 求偏导
输出层权值 w3i(k) 偏导
∂J∂w3i(k)=∂J∂y(k+1)∂y(k+1)∂u(k)∂u(k)∂w(k)=−[y(k+1)−y^(k+1)]⋅1⋅Out2i(k)隐藏层权值 w2ji(k) 偏导
∂J∂w2ji(k)=∂J∂y(k+1)∂y(k+1)∂u(k)∂u(k)∂Out2j(k)∂Out2j(k)∂u(k)∂u(k)∂w2ji(k)
=−[y(k+1)−y^(k+1)]⋅1⋅w3i(k)⋅f′(net2j(k))⋅Out1j(k)
- 权值更新
w3i(k+1)=w3i(k)+ηΔw3i(k)
w2ji(k+1)=w2ji(k)+ηw2ji(k)
综合
利用辨识器NNI可以求得 ∂y^(k+1)∂u(k)
∂y^(k+1)∂u(k)=∑Qi=0∂J∂y(k+1)∂y(k+1)∂u(k)∂u(k)∂Out2j(k)∂Out2j(k)∂u(k)∂u(k)∂Out1j(k)∂Out1j(k)∂u(k)
=∑Qi=0w3i(k)⋅f′(net2j(k))⋅w2ji(k)将NNI得到的 ∂y^(k+1)∂u(k) 代入NNC的权值更新中,即可更新NNC控制器参数
如果不采用NNI辨识器,则 ∂y(k+1)∂u(k) 可以用近似符号函数 sgn[∂y(k+1)∂u(k)] 或者采用 y(k+1)−y(k)u(k)−u(k−1) 得到,由此带来的计算不精确的影响可以通过调整学习速率 η 来补偿