当前位置:首页 > 工作计划 > [智能控制理论]智能控制理论的研究与进展
 

[智能控制理论]智能控制理论的研究与进展

发布时间:2019-08-05 10:09:18 影响了:

智能控制实验报告

(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控制器具有良好的自适应能力和鲁棒性。

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3