模糊控制器的查询表的实例计算过程
⽤模糊控制实现⽔箱⽔温的恒温控制。⽔箱由底部的电阻性电热元件加热,由电动搅拌器实现均温。设控制的⽬标温度为
25oC ,以实测温度T 与⽬标温度R 之差,即误差e=T-R ,以及误差变化率ec 为输⼊,以固态继电器通电时间的变化量u (以⼀个控制周期内的占空⽐表⽰,控制电加热器的功率)为输出。设e 的基本论域为[-5,5] oC ,其语⾔变量E 的论域为[-
5,5];ec 的基本论域为[-1,1] oC/s ,其语⾔变量EC 的论域为[-5,5];控制量u 的基本论域为[-5,5]单位,其语⾔变量U 的论域为[-5,5]。E 、EC 和U 都选5个语⾔值{NB ,NM ,NS ,Z ,PS ,PM ,PB},各语⾔值的⾪属函数采⽤三⾓函数,其分布可⽤表1和表2表⽰,控制规则如表3所⽰。要求:1、画出模糊控制程序流程图;2、计算出模糊控制器的查询表,写出必要的计算步骤。表
表3 模糊控制规则表(
解:步骤:
1)输⼊输出语⾔变量的选择。输⼊变量选为实测温度T 与⽬标温度R 之差,即误差e ,及误差变化率ec ;
输出语⾔变量选固态继电器通电时间的变化量u ,故模糊控制系统为双输⼊—单输出的基本模糊控制器。
2)建⽴各语⾔变量的赋值表。设误差e 的基本论域为[-5,5]。C ,输⼊变量E 的论域为[-5,-4,-3,-2,-1,0,1,2,3,4,5],误差的量化因⼦为ke=5/5=1。语⾔变量E 选取5个语⾔值:
,,,,PB
PS ZE NS NB 。表1为语⾔变量E 、EC 的赋值表,表2为语⾔变量U 的赋值表
3)建⽴模糊控制规则表,总结控制策略,得出⼀组由25条模糊条件语句构成的控制规则,据此建⽴模糊控制规则表,如表3所⽰.表中⾏与列交叉处的每个元素及其所在列的第⼀⾏元素和所在⾏的第⼀列元素,对应于⼀个形式为”if E and EC then U”的模糊语句,
根据该模糊语句可得相应的模糊关系i R ,则总控制规则的总模糊关系为25
1
=i
i R U R = 。表3 模糊控制规则表(内容为控制量U)
4)建⽴查询表。根据推理合成原则,输出模糊集合2()T U E
E R =?? ,利⽤判决结果可建⽴模糊控制器查询表。通过查表得出U,乘以⽐例因⼦K u ,(K u =u max /n=5/5=1),即查表得出的结果U 即为控制量的值u 。 5)流程图如下图所⽰
流程图
6)在线查询表如表4所⽰
0 0.5 1 0.5 0 0 0 0 0 0 0;
0 0 0 0 0.3 1 0.3 0 0 0 0;
0 0 0 0 0 0 0 0.5 1 0.5 0;
0 0 0 0 0 0 0 0 0.1 0.4 1];%5*11 E的赋值表矩阵EC=E;
U=[1 0.6 0.2 0 0 0 0 0 0 0 0;
0 0.4 1 0.4 0 0 0 0 0 0 0;三角函数查询表
0 0 0 0 0.5 1 0.5 0 0 0 0;
0 0 0 0 0 0 0 0.4 1 0.4 0;
0 0 0 0 0 0 0 0 0.2 0.6 1];
rule=[5 5 5 4 3;
5 4 4 3 3;
4 4 3 2 2;
4 3 2 2 1;
3 2 1 1 1];%5*5模糊控制规则表矩阵
R=zeros(121,11);%申请模糊控制的⾪属度关系矩阵%计算模糊控制⾪属度关系矩阵R? for ii=1:5 for jj=1:5
U_rule=rule(ii,jj);%按控制规则表出语⾔变量对应的向量
A=E(ii,:);
B=EC(jj,:);
C=U(U_rule,:); %根据模糊算法,求(A'×B)对应按值取⼩
for i=1:11
for j = 1:11
if A(i)>B(j)
R_C(i,j)=B(j);
else
R_C(i,j)=A(i);
end
end
end
R_C1=reshape(R_C',11*11,1);%转置成121*1的列向量,形成单条控制语句的模糊关系的⾪属度函数R1 for i=1:11*11
for j=1:11
if R_C1(i)>C(j)
R1(i,j)=C(j);%得到R1是121*11的矩阵
else
R1(i,j)=R_C1(i);
end
end
end %将R1合成为整个模糊关系的⾪属度函数R,R是121*11的矩阵
for i=1:121
for j=1:11
if R(i,j)
R(i,j)=R1(i,j);
end
end
end
end
end
%计算控制量U1=(A1×B1)T2。R,T2表⽰前⾯矩阵转化成⾏向量
for iii=1:11
for jjj=1:11 %求E的量化值对应的语⾔值的所对应的⾏向量
temp_maxA=E(1,iii);
line_no=ones(3,1);
for k=1:5
if(temp_maxA
temp_maxA=E(k,iii);
line_no(1)=k;
end
end
A1=E(line_no(1),:);%求EC的量化值对应的语⾔值的所对应的⾏向量
temp_maxB=EC(1,jjj);