参考文献《智能控制——刘金锟》
以水位的模糊控制为例。如图4一4所示,设有一个水箱,通过调节阀可向内注水和向外抽水。设计一个模糊控制器,通过调节阀门将水位稳定在固定点附近。按照日常的操作经验,可以得到基本的控制规则为:
“若水位高于0点,则向外排水,差值越大,排水越快”;“若水位低于0点,则向内注水,差值越大,注水越快”.
根据上述经验,可按下列步骤设计一维模糊控制器。
1 确定观测量和控制量
定义理想液位0点的水位为h0,实际测得的水位高度为h,选择液位差为
将当前水位对于h0点的偏差e作为观测量。
2 输入量和输出量的模糊化
将偏差分为5个模糊集:负大(NB),负小(NS),零(ZO),正小(PS),正大(PB)。将偏差e的变化分为7个等级,-3,-2,-1,0,+1,+2,+3,从而得到水位变化模糊表,见表4一1。
控制量为调节阀门开度的变化。将其分为5个模糊集:负大(NB),负小(NS),零(ZO),正小(PS),正大(PB)。将的变化分为9个等级:一4,一1,0,+1,+2,+3,+4,得到控制量模糊划分表,见表4一2。
3.模糊规则的描述
根据日常的经验,设计以下模糊规则:
(1)"若负大,则负大”;
(2)“若e负小,则负小”;
(3)“若e为零,则为零”;
(4)“若e正小,则正小”
(5)“若e正大,则正大”
其中,排水时为负,注水时为正。
将上述规则采用“'IF A THEN B”的形式来描述,则模糊规范表示为
(l)if e = NB Then u =NB
(2)if e = NS Then u =NS
(3)if e = ZO Then u =ZO
(4)if e = PS Then u =PS
(5)if e = PB Then u = PB
根据上述经验规则,可得模糊控制规则表,见表4一3。
4 求模糊关系
模糊控制规则是一个多条语句,它可以表示为U×V上的模糊子集,即模糊关系R为R=(NBe×NBu)U(NSe×NSu)U(ZOe×ZOu)U(PSe×PSu)U(PBe×PBu)。其中规则内的模糊集运算取交集,规则间的模糊集运算取并集,即
由以上可得:
5 模糊决策
模糊控制器的输出为误差向量和模糊关系的合成,即
6 控制量的反模糊化
由模糊决策可知,当误差为负大时,实际液位远高于理想液位,e=NB,控制器的输出为一模糊向量,可表示为
如果按照“隶属度最大原则”进行反模糊化,选择控制量为u=-4,即阀门的开度应开大一些,加大排水量。如下图:
模糊控制响应表见4-4
7 matlab仿真结果
1)模型
2)输入隶属度
3)输出隶属度
4)控制系统
7 matlab程序
clear
clc
close all;
a=newfis('fuzz-tank');%创建一个模糊推理系统(FIS)
%% 偏差参数
%水位变化e划分,NB:负大 NS:负小 Z:零 PS:正小 PB:正大
a=addvar(a,'input','e',[-3,3]);%向模糊推理系统中添加语言变量
a=addmf(a,'input',1,'NB','zmf',[-3,-1]); %Z形隶属函数
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,'PB','smf',[1,3]);%S形隶属函数
%% 控制参数
%控制量u变化划分,NB:负大 NS:负小 Z:零 PS:正小 PB:正大
a=addvar(a,'output','u',[-4,4]);
a=addmf(a,'output',1,'NB','zmf',[-4,-1]);
a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]);
a=addmf(a,'output',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'output',1,'PS','trimf',[-1,2,4]);
a=addmf(a,'output',1,'PB','smf',[1,4]);
%% 规则描述
%模糊规则
%若e负大,则u负大
%若e负小,则u负小
%若e为零,则u为零
%若e正小,则u正小
%若e正大,则u正大
rulelist=[
1 1 1 1;
2 2 1 1;
3 3 1 1;
4 4 1 1;
5 5 1 1];
。。。。。。。。略