3.3 模糊控制器的设计
3.3.1 模糊控制器的设计步骤
模糊控制器最简单的实现方法是将一系列模糊控制规则离线转化为一个查询表(又称为控制表),存储在计算机中供在线控制时使用。这种模糊控制器结构简单,使用方便,是最基本的一种形式。本节以单变量二维模糊控制器为例,介绍这种形式的模糊控制器的设计步骤,其设计思想是设计其他模糊控制器的基础。具体设计步骤如下。
1.模糊控制器的结构
单变量二维模糊控制器是最常见的结构形式。
2.定义输入输出模糊集
例如,对误差e、误差变化ec及控制量u的模糊集及其论域定义如下:
e、ec和u的模糊集均为:{NB,NM,NS,Z,PS,PM,PB}
e、ec的论域均为:{-3,-2,-1,0,1,2,3}
u的论域为:{-3.5,-3,-1.5,0,1,3,3.5}
3.定义输入输出隶属函数
模糊变量误差e、误差变化ec及控制量u的模糊集和论域确定后,需对模糊语言变量确定隶属函数,即所谓对模糊变量赋值,就是确定论域内元素对模糊语言变量的隶属度。
4.建立模糊控制规则
根据人的直觉思维推理,由系统输出的误差及误差的变化趋势来消除系统误差的模糊控制规则。模糊控制规则语句构成了描述众多被控过程的模糊模型。例如,卫星的姿态与作用的关系、飞机或舰船航向与舵偏角的关系和工业锅炉中的压力与加热的关系等。因此,在条件语句中,误差e、误差变化ec及控制量u对于不同的被控对象有着不同的意义。
5.建立模糊控制表
上述描写的模糊控制规则可采用模糊规则表3.5来描述,共49条模糊规则,各个模糊语句之间是或的关系,由第1条语句所确定的控制规则可以计算出u1。同理,可以由其余各条语句分别求出控制量u2,…,u49,则控制量为模糊集合u,可表示为
表3.5 模糊规则表
6.模糊推理
模糊推理是模糊控制的核心,它利用某种模糊推理算法和模糊规则进行推理,得出最终的控制量。
7.反模糊化
通过模糊推理得到的结果是一个模糊集合,但在实际模糊控制中,必须要有一个确定值才能控制或驱动执行机构。将模糊推理结果转化为精确值的过程称为反模糊化。常用的反模糊化有下面3种。
(1)最大隶属度法。
选取推理结果模糊集合中隶属度最大的元素作为输出值,即v0=maxμv(v),v∈V。
如果在输出论域V中,其最大隶属度对应的输出值多于一个,则取所有具有最大隶属度输出的平均值,即
其中,N为具有相同最大隶属度输出的总数。
最大隶属度法不考虑输出隶属度函数的形状,只考虑最大隶属度处的输出值。因此,难免会丢失许多信息。它的突出优点是计算简单,在一些控制要求不高的场合,可采用最大隶属度法。
(2)重心法。
为了获得准确的控制量,就要求模糊方法能够很好地表达输出隶属度函数的计算结果。重心法是取隶属度函数曲线与横坐标围成面积的重心为模糊推理的最终输出值,即
对于具有m个输出量化级数的离散域情况
与最大隶属度法相比较,重心法具有更平滑的输出推理控制,即使输入信号有微小变化,输出也会发生变化。
(3)加权平均法。
工业控制中广泛使用的反模糊方法为加权平均法,输出值由下式决定
其中,系数ki的选择根据实际情况而定,不同的系数决定系统具有不同的响应特性,当系数ki取隶属度μv(vi)时,就转化为重心法。
反模糊化方法的选择与隶属度函数形状的选择、推理方法的选择相关。
MATLAB提供了5种解模糊化方法,分别为centroid(面积重心法)、bisector(面积等分法)、mom(最大隶属度平均法)、som(最大隶属度取小法)和lom(最大隶属度取大法)。
在MATLAB中,可通过setfis()设置解模糊化方法,通过defuzz()执行反模糊化运算。
例如,重心法通过下列程序来实现:
x=-10:1:10; mf=trapmf(x,[-10,-8,-4,7]); xx=defuzz(x,mf,'centroid)';
在模糊控制中,重心法可通过下列语句来设定:
a1=setfis(a,'DefuzzMethod','centroid)'
其中,a为模糊规则库。
3.3.2 模糊控制器的MATLAB仿真
根据上述步骤,建立二输入单输出模糊控制系统,该系统包括两个部分,即模糊控制器的设计和位置跟踪。
1.模糊控制器的设计
针对某线性系统的正弦跟踪,设计模糊规则表如表3.6所示,控制规则为9条。通过运行showrule(a),可得到用于描述模糊系统的9条模糊规则。
表3.6 模糊规则表
模糊控制器的设计仿真程序见chap3_2fuzz.m。在仿真时,根据模糊推理系统a2,模糊规则可由命令showrule(a2)得到
Rule1:If(e is N)and(ec is N)then(u is N)(1)
Rule2:If(e is N)and(ec is Z)then(u is N)(1)
Rule3:If(e is N)and(ec is P)then(u is Z)(1)
Rule4:If(e is Z)and(ec is N)then(u is Z)(1)
Rule5:If(e is Z)and(ec is Z)then(u is Z)(1)
Rule6:If(e is Z)and(ec is P)then(u is Z)(1)
Rule7:If(e is P)and(ec is N)then(u is Z)(1)
Rule8:If(e is P)and(ec is Z)then(u is P)(1)
Rule9:If(e is P)and(ec is P)then(u is P)(1)
取误差e、误差变化ec的范围均为[-0.03,0.03],控制输入u的范围为[-300,300]。模糊推理系统输入输出隶属函数可由命令plotfis(a2)得到,如图3.7~图3.9所示。
图3.7 偏差隶属度函数
图3.8 偏差变化率隶属度函数
图3.9 控制器输出隶属度函数
模糊系统设计仿真程序:chap3_2fuzz.m
2.模糊控制位置跟踪
被控对象为
首先运行模糊控制器程序chap3_2fuzz.m,并将模糊控制系统保存在a2之中,然后运行模糊控制的Simulink仿真程序,位置指令取sin(t),仿真结果如图3.10所示。
图3.10 位置跟踪
模糊控制位置跟踪的Simulink仿真程序见chap3_2sim.mdl,作图程序见chap3_2plot.m。
仿真程序
Simulink主程序:chap3_2sim. mdl
作图程序:chap3_2plot.m
close all; figure(1); plot(t,y(:,1),'k',t,y(:,2),'r','linewidth',2); xlabel('time(s)');ylabel('y response)'; figure(2); plot(ut(:,1),'k','linewidth',2); xlabel('x1)';ylabel('ut)';