[智能控制理论]智能控制理论的研究与进展
智能控制实验报告
(2008~2009 学年 春季 学期)
课程名称: 任课教师:杜尚丰 班 级:自动061 学 号:0608140612 姓 名:孙倩
实验题目1: SISO PID神经网络控制
姓名: 孙倩 班级: 自动化061 学号: 0608140612
一、仿真模型描述
单变量P I D神经网络的结构形式如下:
单变量神经网络的结构图
本实验用PID 神经网络实现单输入单输出解耦系统的模型仿真,用到的仿真模型为:
y(k+1)=0.8sin(y(k))+1.2u(k), k
系统输入: r(k)=1(k)
二、仿真参数说明
系统的输入向量是:r(k)=1;
输出向量是:y(k+1);
系统的控制向量为:u(k);
准则函数为:
E 1(k ) =
12
[r 1(k ) -y 1(k )]
2
权系地训练(取η1=η2=0.8)方式:
W(k+1)=W(k)- η
可得:
w i (k+1)=w i (k)+ ηe(k+1)oi (k)+β[w i (k)-w i (k-1)]
1
w j (k+1)=1w j (k)+ ηe(k+1)f[xj (k)][2w j (k)]y(k)+ β[1w j (k)-1w j (k-1)]
2
2
2
2
+β[W(k)=W(k-1)]
三、仿真结果分析
以下四幅图分别是系统输入r ,系统输出y ,系统控制量u ,以及系统误差error.
2
系统输出y 1
系统输入r 1
1.5
1.5
10.50
1
0.5
00.2
0.40.6时间(秒)
0.8
00.2
0.40.6时间(秒)
0.8
0.80.6
0.40.20
系统误差e r r o r 1
系统控制量u 1
1
0.5
00.2
0.40.6时间(秒)
0.8
-0.5
00.2
0.40.6时间(秒)
0.8
1、从图中我们可以看得到:当对象特性变化(k≥40) 时,由于PID 神经网络控制 器权系值地不断调整,使控制量u(k)变化,从而系统地输出经过很短的时间跟踪输入。
2、通过PID 控制算法,在系统控制量的作用下我们最终实现了跟踪控制,动态响应性能非常好,达到了输出量y 稳态误差为零的效果。
四、仿真程序:
%PID神经网络单输入单输出解耦模型仿真 %输入为1
%输入层单独成神经网,输出成一个神经网 clear all; close all; s=1;
if s==1 %初始化 y1_1=0.0;
u1_1=0.0;u1_2=0.0;
error1_1=0.0;error1_2=0.0;
wo_111=0.1*rand(1);wo_111_1=wo_111; wo_112=0.1*rand(1);wo_112_1=wo_112; wo_113=0.1*rand(1);wo_113_1=wo_113; wo_121=0.1*rand(1);wo_121_1=wo_121; wo_122=0.1*rand(1);wo_122_1=wo_122; wo_123=0.1*rand(1);wo_123_1=wo_123; wi_111=0.1*rand(1);wi_111_1=wi_111; wi_112=0.1*rand(1);wi_112_1=wi_112; wi_121=0.1*rand(1);wi_121_1=wi_121; wi_122=0.1*rand(1);wi_122_1=wi_122; wi_131=0.1*rand(1);wi_131_1=wi_131; wi_132=0.1*rand(1);wi_132_1=wi_132; x11=0.0;x12=0.0;x13=0.0; q11=0.0;q12=0.0;q13=0.0;
x11_1=x11;x12_1=x12;x13_1=x13; q11_1=q11;q12_1=q12;q13_1=q13; end
ts=0.001; for k=1:1:800 time(k)=k*ts;
if s==1 r1(k)=1; if 1
y1(k)=0.8*sin(y1_1)+1.2*u1_1; else
y1(k)=0.8*sin(0.4*y1_1)+1.2*u1_1; end
error1(k)=r1(k)-y1(k); end
%中间层输入输出
x11(k)=wi_111_1*r1(k)+wi_112_1*y1(k); x12(k)=wi_121_1*r1(k)+wi_122_1*y1(k); x13(k)=wi_131_1*r1(k)+wi_132_1*y1(k); if x11(k)>1 q11(k)=1; elseif x11(k)
else q11(k)=x11(k); end
if(q12_1+x12(k))>1 q12(k)=1;
elseif (q12_1+x12(k))
else q12(k)=q12_1+x12(k); end
if (x13(k)-x13_1)>1 q13(k)=1;
elseif (x13(k)-x13_1)
else q13(k)=x13(k)-x13_1;
end
%输出层输入输出,输出层输入输出相等
u1(k)=wo_111_1*q11(k)+wo_112_1*q12(k)+wo_113_1*q13(k); %中间层到输出层权值计算 wo if u1_1==u1_2 delta1(k)=0; else
delta1(k)=error1(k)*sign((y1(k)-y1_1)/(u1_1-u1_2)); end
wo_111(k)=wo_111_1+0.1*delta1(k)*q11(k); wo_112(k)=wo_112_1+0.1*delta1(k)*q12(k); wo_113(k)=wo_113_1+0.1*delta1(k)*q13(k); wo_121(k)=wo_121_1; wo_122(k)=wo_122_1; wo_123(k)=wo_123_1;
%输入层到中间层权值计算wi if x11(k)==x11_1 dqx_11(k)=0;
else
dqx_11(k)=sign((q11(k)-q11_1)/(x11(k)-x11_1)); end
if x12(k)==x12_1 dqx_12(k)=0;
else
dqx_12(k)=sign((q12(k)-q12_1)/(x12(k)-x12_1)); end
if x13(k)==x13_1 dqx_13(k)=0; else
dqx_13(k)=sign((q13(k)-q13_1)/(x13(k)-x13_1)); end
if u1_1==u1_2 wo_11(k)=0; Else
wo_11(k)=error1(k)*sign((y1(k)-y1_1)/(u1_1-u1_2)); end
wi_111(k)=wi_111_1+0.15*(wo_11(k)*wo_111(k))*dqx_11(k)*r1(k);
wi_112(k)=wi_112_1+0.15*(wo_11(k)*wo_111(k))*dqx_11(k)*y1(k); wi_121(k)=wi_121_1+0.1*(wo_11(k)*wo_112(k))*dqx_12(k)*r1(k); wi_122(k)=wi_122_1+0.1*(wo_11(k)*wo_112(k))*dqx_12(k)*y1(k); wi_131(k)=wi_131_1+0.1*(wo_11(k)*wo_113(k))*dqx_13(k)*r1(k); wi_132(k)=wi_132_1+0.1*(wo_11(k)*wo_113(k))*dqx_13(k)*y1(k); %参数更新
wo_111_1=wo_111(k); wo_112_1=wo_112(k); wo_113_1=wo_112(k); wo_121_1=wo_121(k); wo_122_1=wo_122(k); wo_123_1=wo_123(k); wi_111_1=wi_111(k); wi_112_1=wi_112(k); wi_121_1=wi_121(k); wi_122_1=wi_122(k); wi_131_1=wi_131(k); wi_132_1=wi_132(k); y1_1=y1(k);
u1_2=u1_1;u1_1=u1(k);
error1_2=error1_1;error1_1=error1(k); x11_1=x11(k);x12_1=x12(k);x13_1=x13(k); q11_1=q11(k);q12_1=q12(k);q13_1=q13(k); end
figure(1);
plot(time,r1,"r");
xlabel("时间(秒)");ylabel("系统输入r1"); figure(2);
plot(time,y1,"r");
xlabel("时间(秒)");ylabel("系统输出y1"); figure(3);
plot(time,u1,"r");
xlabel("时间(秒)");ylabel("系统控制量u1"); figure(4);
plot(time,error1,"r");
xlabel("时间(秒)");ylabel("系统误差error1");
五、实验总结
PI D 神经网络单变量制器通过学习和训练,根据系统控制效果自主调整网
络权值,具有良好的动态和稳态控制性能,当系统参数发生变化后,P I D 神经网络控制器通过再次的学习和调整,可以实现迅速跟踪控制 。
实验题目2:神经网络自校正控制
姓名: 孙倩 班级: 自动化061 学号: 0608140612
一、仿真模型描述
被控对象具有非线性时变特性,仿真模型为:
y (k +1) =0. 8sin(y (k )) +1. 2u (k ) 0
y (k +1) =0. 8sin(y (k )) +y (k ) /7+1. 2u (k ) k >=200
该自校正系统的控制框图为:
二、仿真参数说明
系统输入为:
r (k ) =1(k ), 0=300r (k ) =-1(k ), 100
作用于被控对象的扰动为:
v (k ) =0. 04, k =50v (k ) =0, k ≠50
权值调整方式为BP 算法:
V (k )=V (k -1)+∆V (k )+α(V (k -1)-V (k -2))
∂E (k )
∆w j (k )=-ηw =ηw (y (k )-y m (k ))h j (k )
∂w j (k )
∂E (k )∆v j (k )=-ηv =ηv (y (k )-y m (k ))h j (k ) ∂v j (k )
三、仿真结果分析
当单位阶跃的输入时,我们可以看到如下的结果:
1、从该系统对扰动的迅速响应,我们可以得知自校正控制的优越性。 2、上面第一个图所示为控制器输出u(k),说明自校正控制器能对非线性、不确定、不确知系统实现有效的控制。
3、第二个图所示为系统输出y (k )再输入r 变化(k=100,k=300)、扰动作用(k=50)及对象特性变化(k=200)时的情况,说明神经自校正控制具有很好的自适应性和鲁棒性。
四、仿真程序
%Self-Correct control based BP Identification clear all; close all; xite1=0.15; xite2=0.50; alfa=0.05; w=0.5*ones(6,1); v=0.5*ones(6,1); cij=0.50*ones(1,6);
bj=5*ones(6,1); h=zeros(6,1); w_1=w;w_2=w_1; v_1=v;v_2=v_1; u_1=0;y_1=0; ts=0.02;
for k=1:1:5000 time(k)=k*ts; end if 0
else if 100
if 0
g(k)=0.8*sin(y_1); else
g(k)=0.8*sin(y_1)+(y_1)/7; end
f(k)=1.2;
y(k)=g(k)+f(k)*u_1; for j=1:1:6
h(j)=exp(-norm(y(k)-cij(:,j))^2/(2*bj(j)*bj(j))); end
Ng(k)=w"*h;
Nf(k)=v"*h;
ym(k)=Ng(k)+Nf(k)*u_1; e(k)=y(k)-ym(k); d_w=0*w; for j=1:1:6
d_w(j)=xite1*e(k)*h(j); end
w=w_1+d_w+alfa*(w_1-w_2); d_v=0*v;
for j=1:1:6
d_v(j)=xite2*e(k)*h(j)*u_1; end
v=v_1+d_v+alfa*(v_1-v_2); u(k)=-Ng(k)/Nf(k)+r(k)/Nf(k); u_1=u(k); y_1=y(k); w_2=w_1; w_1=w; v_2=v_1; v_1=v; end figure(1);
plot(time,y_1,"b"); xlabel("(s)");ylabel("y"); figure(2);
plot(time,u_1,"b"); xlabel("(s)");ylabel("u");
五、实验总结
从仿真结果来看,神经网络自校正控制器具有很高的精度和很强的适应性, 取得了较好的控制效果。它既保证了控制的鲁棒性好的特点,又借助了神经网络的自学习、自组织的能力,可实现智能控制器参数的在线自整定和优化,有效地提高模糊控制器的精度和抗干扰的能力,避免了人工整定参数的繁琐工作。
实验题目3: Fuzzy PID控制
姓名: 孙倩 班级: 自动化061 学号: 0608140612
一、 仿真模型描述
Fuzzy PID控制器结构图如下:
Fuzzy PID 控制的我们实验采用的模型是
G p (s ) =
523500
s +87.35s +10470s
3
2
对于该模型,我们在试验中设置的采样时间是1m s ,采用模糊PID 控制进行阶跃响应,在第300个采样时间控制器输出加1.0的干扰。
二、 仿真参数说明
采样时间: 1ms, 系统输入: r(k)=1, 系统输出: y(k) 控制器输出:u(k)为 误差: e(k )
比例系数: K P , 积分系数K I , 微分系数 K D
三、仿真结果分析
系统仿真图如下:
仿真时在第300个采样点的时候人为的加入了一个幅值为1的脉冲干扰:
1. 输入输出及误差图像:
r i n , y o u
t
e r r o r
time(s)
time(s)
2. 控制器的输出:
u
time(s)
3.PID 参数ki ,kp ,kd 的自适应调整:
k
p
time(s)
k
i
time(s)
k d
time(s)
4. 以下两幅图是语言变量e 和ec 的隶属函数关系设计图,通过修改程序中的数值可以改变它们的隶属函数关系
:
(1)程序中包括模糊变量e 和ec ,PID 控制参数Kp ,Ki 和Kd 。其中e 和ec 的论域范围是(-3,3),关于各个变量的隶属度设计程序中已经加载,并且在程序运行之后的GUI 界面下也能清楚的看到。
(2)模糊控制规则是基于手动控制策略而做出的,主要作用是用来修正PID 参数的,它是控制领域内技术人员根据过程的阶跃响应情况的经验总结,在进行一定得处理后得到的。
(3)在我们的仿真模型中为了看到Fuzzy PID 控制的作用,我们在程序运行到第300个采样点的时候认为的加入了一个幅值为1的脉冲干扰,作为我们Fuzzy
PID 控制规则动态调整PID 参数能力的一个检验。
四、仿真程序:
%Fuzzy Tunning PID Control clear all; close all;
a=newfis("fuzzpid");
a=addvar(a,"input","e",[-3,3]); %Parameter e
a=addmf(a,"input",1,"NB","zmf",[-3,-1]); a=addmf(a,"input",1,"NM","trimf",[-3,-2,0]); a=addmf(a,"input",1,"NS","trimf",[-3,-1,1]); a=addmf(a,"input",1,"Z","trimf",[-2,0,2]); a=addmf(a,"input",1,"PS","trimf",[-1,1,3]); a=addmf(a,"input",1,"PM","trimf",[0,2,3]); a=addmf(a,"input",1,"PB","smf",[1,3]);
a=addvar(a,"input","ec",[-3,3]); %Parameter ec
a=addmf(a,"input",2,"NB","zmf",[-3,-1]);
a=addmf(a,"input",2,"NM","trimf",[-3,-2,0]); a=addmf(a,"input",2,"NS","trimf",[-3,-1,1]); a=addmf(a,"input",2,"Z","trimf",[-2,0,2]); a=addmf(a,"input",2,"PS","trimf",[-1,1,3]); a=addmf(a,"input",2,"PM","trimf",[0,2,3]); a=addmf(a,"input",2,"PB","smf",[1,3]);
a=addvar(a,"output","kp",[-0.3,0.3]); %Parameter kp
a=addmf(a,"output",1,"NB","zmf",[-0.3,-0.1]); a=addmf(a,"output",1,"NM","trimf",[-0.3,-0.2,0]); a=addmf(a,"output",1,"NS","trimf",[-0.3,-0.1,0.1]); a=addmf(a,"output",1,"Z","trimf",[-0.2,0,0.2]); a=addmf(a,"output",1,"PS","trimf",[-0.1,0.1,0.3]); a=addmf(a,"output",1,"PM","trimf",[0,0.2,0.3]); a=addmf(a,"output",1,"PB","smf",[0.1,0.3]);
a=addvar(a,"output","ki",[-0.06,0.06]); %Parameter ki
a=addmf(a,"output",2,"NB","zmf",[-0.06,-0.02]);
a=addmf(a,"output",2,"NM","trimf",[-0.06,-0.04,0]); a=addmf(a,"output",2,"NS","trimf",[-0.06,-0.02,0.02]);
a=addmf(a,"output",2,"Z","trimf",[-0.04,0,0.04]); a=addmf(a,"output",2,"PS","trimf",[-0.02,0.02,0.06]); a=addmf(a,"output",2,"PM","trimf",[0,0.04,0.06]); a=addmf(a,"output",2,"PB","smf",[0.02,0.06]);
a=addvar(a,"output","kd",[-3,3]); %Parameter kp
a=addmf(a,"output",3,"NB","zmf",[-3,-1]);
a=addmf(a,"output",3,"NM","trimf",[-3,-2,0]); a=addmf(a,"output",3,"NS","trimf",[-3,-1,1]); a=addmf(a,"output",3,"Z","trimf",[-2,0,2]); a=addmf(a,"output",3,"PS","trimf",[-1,1,3]); a=addmf(a,"output",3,"PM","trimf",[0,2,3]); a=addmf(a,"output",3,"PB","smf",[1,3]);
rulelist=[1 1 7 1 5 1 1; 1 2 7 1 3 1 1; 1 3 6 2 1 1 1; 1 4 6 2 1 1 1; 1 5 5 3 1 1 1; 1 6 4 4 2 1 1; 1 7 4 4 5 1 1;
2 1 7 1 5 1 1; 2 2 7 1 3 1 1; 2 3 6 2 1 1 1; 2 4 5 3 2 1 1; 2 5 5 3 2 1 1; 2 6 4 4 3 1 1; 2 7 3 4 4 1 1;
3 1 6 1 4 1 1; 3 2 6 2 3 1 1; 3 3 6 3 2 1 1; 3 4 5 3 2 1 1; 3 5 4 4 3 1 1; 3 6 3 5 3 1 1; 3 7 3 5 4 1 1;
4 1 6 2 4 1 1; 4 2 6 2 3 1 1; 4 3 5 3 3 1 1; 4 4 4 4 3 1 1; 4 5 3 5 3 1 1;
4 6 2 6 3 1 1; 4 7 2 6 4 1 1;
5 1 5 2 4 1 1; 5 2 5 3 4 1 1; 5 3 4 4 4 1 1; 5 4 3 5 4 1 1; 5 5 3 5 4 1 1; 5 6 2 6 4 1 1; 5 7 2 7 4 1 1;
6 1 5 4 7 1 1; 6 2 4 4 5 1 1; 6 3 3 5 5 1 1; 6 4 2 5 5 1 1; 6 5 2 6 5 1 1; 6 6 2 7 5 1 1; 6 7 1 7 7 1 1;
7 1 4 4 7 1 1; 7 2 4 4 6 1 1; 7 3 2 5 6 1 1; 7 4 2 6 6 1 1; 7 5 2 6 5 1 1; 7 6 1 7 5 1 1; 7 7 1 7 7 1 1];
a=addrule(a,rulelist);
a=setfis(a,"DefuzzMethod","mom"); writefis(a,"fuzzpid");
a=readfis("fuzzpid");
%PID Controller
ts=0.001;
sys=tf(5.235e005,[1,87.35,1.047e004,0]); dsys=c2d(sys,ts,"tustin"); [num,den]=tfdata(dsys,"v");
u_1=0.0;u_2=0.0;u_3=0.0;
y_1=0;y_2=0;y_3=0;
x=[0,0,0]";
error_1=0; e_1=0.0; ec_1=0.0;
kp0=0.40; kd0=1.0; ki0=0.0;
for k=1:1:500 time(k)=k*ts;
rin(k)=1;
%Using fuzzy inference to tunning PID k_pid=evalfis([e_1,ec_1],a); kp(k)=kp0+k_pid(1);
ki(k)=ki0+k_pid(2); kd(k)=kd0+k_pid(3);
u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);
if k==300 % Adding disturbance(1.0v at time 0.3s) u(k)=u(k)+1.0; end
if u(k)>=10 u(k)=10; end
if u(k)
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;
error(k)=rin(k)-yout(k);
%%%%%%%%%%%%%%Return of PID parameters%%%%%%%%%%%%%%% u_3=u_2; u_2=u_1; u_1=u(k);
y_3=y_2; y_2=y_1;
y_1=yout(k);
x(1)=error(k); % Calculating P x(2)=error(k)-error_1; % Calculating D
x(3)=x(3)+error(k); % Calculating I
e_1=x(1); ec_1=x(2);
error_2=error_1; error_1=error(k); end
showrule(a)
figure(1);plot(time,rin,"b",time,yout,"r"); 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);plot(time,kp,"r"); xlabel("time(s)");ylabel("kp"); figure(5);plot(time,ki,"r"); xlabel("time(s)");ylabel("ki"); figure(6);plot(time,kd,"r"); xlabel("time(s)");ylabel("kd"); figure(7);plotmf(a,"input",1); figure(8);plotmf(a,"input",2); figure(9);plotmf(a,"output",1); figure(10);plotmf(a,"output",2); figure(11);plotmf(a,"output",3); plotfis(a);
fuzzy fuzzpid.fis
五、实验总结:
Fuzzy PID控制控制器兼有模糊控制和PID 控制的优点, 具有良好的工程应用景,与单一的PID 控制或模糊控制相比,具有以下优点 : ( 1 )具有良好的动态响应性能, 超调量小。
( 2 )具有良好的静态性能, 震荡小, 没有静态误差。
( 3 )系统参数或结构变化时,Fuzzy PID控制器具有良好的自适应能力和鲁棒性。