什么是bp神经网络pid控制

什么是bp神经网络pid控制,第1张

参考一下刘金琨的《先进PID控制》这本书。

例子:被控对象yout(k)=a(k)yout(k-1)/(1+yout(k-1)^2)+u(k_1)

其中a(k)=1.2(1-0.8e^(-0.1k))

输入信号:rin(k)=1.0和rin(k)=sin(2t)

%BP based PID Control

clear all

close all

xite=0.25//学习速率

alfa=0.05//惯性系数

S=1%Signal type

IN=4H=5Out=3 %NN Structure

if S==1 %Step Signal

wi=[-0.6394 -0.2696 -0.3756 -0.7023

-0.8603 -0.2013 -0.5024 -0.2596

-1.07490.5543 -1.6820 -0.5437

-0.3625 -0.0724 -0.6463 -0.2859

0.14250.0279 -0.5406 -0.7660]

%wi=0.50*rands(H,IN)

wi_1=wiwi_2=wiwi_3=wi

wo=[0.7576 0.2616 0.5820 -0.1416 -0.1325

-0.1146 0.2949 0.8352 0.2205 0.4508

0.7201 0.4566 0.7672 0.4962 0.3632]

%wo=0.50*rands(Out,H)

wo_1=wowo_2=wowo_3=wo

end

if S==2 %Sine Signal

wi=[-0.28460.2193 -0.5097 -1.0668

-0.7484 -0.1210 -0.47080.0988

-0.71760.8297 -1.60000.2049

-0.08580.1925 -0.63460.0347

0.43580.2369 -0.4564 -0.1324]

%wi=0.50*rands(H,IN)

wi_1=wiwi_2=wiwi_3=wi

wo=[1.04380.54780.86820.14460.1537

0.17160.58111.12140.50670.7370

1.00630.74281.05340.78240.6494]

%wo=0.50*rands(Out,H)

wo_1=wowo_2=wowo_3=wo

end

x=[0,0,0]

u_1=0u_2=0u_3=0u_4=0u_5=0

y_1=0y_2=0y_3=0

Oh=zeros(H,1) %Output from NN middle layer

I=Oh%Input to NN middle layer

error_2=0

error_1=0

ts=0.001

for k=1:1:6000

time(k)=k*ts

if S==1

rin(k)=1.0

elseif S==2

rin(k)=sin(1*2*pi*k*ts)

end

%Unlinear model

a(k)=1.2*(1-0.8*exp(-0.1*k))

yout(k)=a(k)*y_1/(1+y_1^2)+u_1

error(k)=rin(k)-yout(k)

xi=[rin(k),yout(k),error(k),1]

x(1)=error(k)-error_1

x(2)=error(k)

x(3)=error(k)-2*error_1+error_2

epid=[x(1)x(2)x(3)]

I=xi*wi'

for j=1:1:H

Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)))%Middle Layer

end

K=wo*Oh%Output Layer

for l=1:1:Out

K(l)=exp(K(l))/(exp(K(l))+exp(-K(l))) %Getting kp,ki,kd

end

kp(k)=K(1)ki(k)=K(2)kd(k)=K(3)

Kpid=[kp(k),ki(k),kd(k)]

du(k)=Kpid*epid

u(k)=u_1+du(k)

if u(k)>=10 % Restricting the output of controller

u(k)=10

end

if u(k)<=-10

u(k)=-10

end

dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.0000001))

%Output layer

for j=1:1:Out

dK(j)=2/(exp(K(j))+exp(-K(j)))^2

end

for l=1:1:Out

delta3(l)=error(k)*dyu(k)*epid(l)*dK(l)

end

for l=1:1:Out

for i=1:1:H

d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2)

end

end

wo=wo_1+d_wo+alfa*(wo_1-wo_2)

%Hidden layer

for i=1:1:H

dO(i)=4/(exp(I(i))+exp(-I(i)))^2

end

segma=delta3*wo

for i=1:1:H

delta2(i)=dO(i)*segma(i)

end

d_wi=xite*delta2'*xi

wi=wi_1+d_wi+alfa*(wi_1-wi_2)

%Parameters Update

u_5=u_4u_4=u_3u_3=u_2u_2=u_1u_1=u(k)

y_2=y_1y_1=yout(k)

wo_3=wo_2

wo_2=wo_1

wo_1=wo

wi_3=wi_2

wi_2=wi_1

wi_1=wi

error_2=error_1

error_1=error(k)

end

figure(1)

plot(time,rin,'r',time,yout,'b')

xlabel('time(s)')ylabel('rin,yout')

figure(2)

plot(time,error,'r')

xlabel('time(s)')ylabel('error')

figure(3)

plot(time,u,'r')

xlabel('time(s)')ylabel('u')

figure(4)

subplot(311)

plot(time,kp,'r')

xlabel('time(s)')ylabel('kp')

subplot(312)

plot(time,ki,'g')

xlabel('time(s)')ylabel('ki')

subplot(313)

plot(time,kd,'b')

xlabel('time(s)')ylabel('kd')

楼主的这个问题已经是六年前的问题了(今天2021年5月),不知道楼主现在还关注这个话题不?神经网络自整定PID肯定是有效的。目前,神经网络自整定PID主要面临三个问题:一是初值选择的问题,不合理的初值很容易使闭环系统不稳定;二是神经网络自整定PID自身需要人为设定的参数较多,PID控制自身只需要三个人为设定参数,神经网络自整定PID则需要四个(三个初值和一个学习因子),这使得神经网络自整定PID比传统PID算法还要麻烦;三是缺乏完整的理论稳定性证明,神经网络自整定PID在线更新规则早已稳定,并且被广泛引用和应用,而基于神经网络自整定PID的闭环系统稳定性证明一直没有得到很好的解决,某种程度上,这限制了神经网络自整定PID的推广。

我个人也做了一些这样的研究,感兴趣的话可以参考我的一篇期刊论文。

Data-Driven Tracking Control Based on LM and PID Neural Network with Relay Feedback for Discrete Nonlinear Systems

PID 调节器是一个在工业控制应用中常见的反馈回路部件,PID是以它的三种纠正算法而命名的。这三种算法都是用加法调整被控制的数值。而实际上这些加法运算大部分变成了减法运算因为被加数总是负值。以下是PID的调节作用举例:

1.比例- 来控制当前,误差值和一个负常数P(表示比例)相乘,然后和预定的值相加。P只是在控制器的输出和系统的误差成比例的时候成立。这种控制器输出的变化与输入控制器的偏差成比例关系。比如说,一个电热器的控制器的比例尺范围是10°C,它的预定值是20°C。那么它在10°C的时候会输出100%,在15°C的时候会输出50%,在19°C的时候输出10%,注意在误差是0的时候,控制器的输出也是0。

2.积分 - 来控制过去,误差值是过去一段时间的误差和,然后乘以一个负常数I,然后和预定值相加。I从过去的平均误差值来找到系统的输出结果和预定值的平均误差。一个简单的比例系统会振荡,会在预定值的附近来回变化,因为系统无法消除多余的纠正。通过加上一个负的平均误差比例值,平均的系统误差值就会总是减少。所以,最终这个PID回路系统会在预定值定下来。

3.微分 - 来控制将来,计算误差的一阶导,并和一个负常数D相乘,最后和预定值相加。这个导数的控制会对系统的改变作出反应。导数的结果越大,那么控制系统就对输出结果作出更快速的反应。这个D参数也是PID被称为可预测的控制器的原因。D参数对减少控制器短期的改变很有帮助。一些实际中的速度缓慢的系统可以不需要D参数。

扩展资料:

用更专业的话来讲,一个PID控制器可以被称作一个在频域系统的滤波器。这一点在计算它是否会最终达到稳定结果时很有用。如果数值挑选不当,控制系统的输入值会反复振荡,这导致系统可能永远无法达到预设值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7801210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存