模糊控制概念认知
模糊逻辑控制理论(Fuzzy Logic Control Theory),简称模糊控制理论(Fuzzy Control Theory),这一概念1974年由L.A.Zadeh教授提出。模糊控制是利用人的知识对控制对象进行控制的一种方法,通常用“if条件,then结果”的形式来表现,所以又通俗地称为语言控制。一般用于无法以严密的数学表示的控制对象模型,即可利用人(熟练专家)的经验和知识来很好地控制。因此利用人的智力模糊地进行系统控制的方法就是模糊控制。
模糊控制的步骤
(图片及原理来源于:博客)
它的核心部分为模糊控制器。模糊控制器的控制规律由计算机的程序实现,实现一步模糊控制算法的过程是:微机采样获取被控制量的精确值,然后将此量与给定值比较得到误差信号E;一般选误差信号E作为模糊控制器的一个输入量,把E的精确量进行模糊量化变成模糊量,误差E的模糊量可用相应的模糊语言表示;从而得到误差E的模糊语言集合的一个子集e(e实际上是一个模糊向量);再由e和模糊控制规则R(模糊关系)根据推理的合成规则进行模糊决策,得到模糊控制量u为:u=eR。
式中u为一个模糊量;为了对被控对象施加精确的控制,还需要将模糊量u进行非模糊化处理转换为精确量:得到精确数字量后,经数模转换变为精确的模 拟量送给执行机构,对被控对象进行一步控制;然后,进行第二次采样,完成第二步控制,这样循环下去,就实现了被控对象的模糊控制。
自定义问题背景
此实验为一个两输入,一输出的模糊控制实验
自定义使用场景:根据当前时间对灯光的需要以及当前物理上已经有的光(如自然光)的情况,来自动调节家用灯的暗亮程度
输入1:当前时间对对光的需要程度
输入2:当前条件下已有的光亮程度(level1-6逐渐增强)
输出:家用灯的自动调节情况
按照日常操作经验,有以下规则:
1、 若当前必须使用灯光,且当前已有的光很暗,则需要非常亮的灯光。
2、 若当前必须使用灯光,且当前已有的光适中,则需要适当亮的灯光。
3、 若当前必须使用灯光,且当前已有的光很亮,则不需要的灯光。
根据这样生活中的经验,写了18条模糊规则,并用if-then的语句输出。
代码实现
%模糊控制器设计
a=newfis('fuzzf'); %创建新的模糊推理系统
%输入1
f1=1;
a=addvar(a,'input','time',[-5*f1,8*f1]);
%添加time的模糊语言变量Z型隶属度函数
a=addmf(a,'input',1,'must turn on the light','zmf',[-5*f1,0*f1]);
%添加time的模糊语言变量的三角形隶属度函数
a=addmf(a,'input',1,'must turn off the light','trimf',[-3*f1,0,4*f1]);
%添加time的模糊语言变量S型隶属度函数
a=addmf(a,'input',1,'maybe need light','smf',[2*f1,8*f1]);
绘制出自己写的输入1的不同情况的隶属度
%输入2
f2=1;
a=addvar(a,'input','naturallight',[0*f2,6*f2]);
%添加 ec 的模糊语言变量
a=addmf(a,'input',2,'level1','zmf',[0*f2,1*f2]);
a=addmf(a,'input',2,'level2','trimf',[0*f2,1*f2,2*f2]);
a=addmf(a,'input',2,'level3','trimf',[1*f2,2*f2,3*f2]);
a=addmf(a,'input',2,'level4','trimf',[2*f2,3*f2,4*f2]);
a=addmf(a,'input',2,'level5','trimf',[3*f2,4*f2,5*f2]);
a=addmf(a,'input',2,'level6','smf',[4*f2,6*f2]);
绘制出输入2不同情况下的隶属度:
%输出
f3=1;
a=addvar(a,'output','automatic',[-3*f3,3*f3]);
%添加 u 的模糊语言变量
a=addmf(a,'output',1,'very dark','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'dark','trimf',[-3*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'moderaion','trapmf',[-2*f3,0,0.5*f3,2*f3]);
a=addmf(a,'output',1,'light','trimf',[-1*f3,1*f3,3*f3]);
a=addmf(a,'output',1,'very light','trimf',[0,2*f3,3*f3]);
绘制出输出时不同情况下的隶属度:
%规则库
rulelist=[1 1 5 1 1; %编辑模糊规则,后俩个数分别是规则权重和AND OR选项
1 2 4 1 1;
1 3 3 1 1;
1 4 3 1 1;
1 5 3 1 1;
1 6 3 1 1;
2 1 2 1 1;
2 2 2 1 1;
2 3 2 1 1;
2 4 2 1 1;
2 5 1 1 1;
2 6 1 1 1;
3 1 3 1 1;
3 2 3 1 1;
3 3 2 1 1;
3 4 2 1 1;
3 5 2 1 1;
3 6 1 1 1;];
a=addrule(a,rulelist); %添加模糊规则函数
showrule(a) %显示模糊规则函数
a1=setfis(a,'DefuzzMethod','centroid'); %设置解模糊方法
writefis(a1,'fuzzf'); %保存模糊系统
a2=readfis('fuzzf'); %从磁盘读出保存的模糊系统
disp('fuzzy Controller table:time=[-5,+8],naturallight=[0,+6]');%显示矩阵和数组内容
输出自己写的模糊规则:
%推理
Ulist=zeros(3,6); %全零矩阵
for i=1:3
for j=1:6
time(i)=0+i;
naturallight(j)=0+j;
Ulist(i,j)=evalfis([time(i),naturallight(j)],a2); %完成模糊推理计算
end
end
% Ulist=ceil(Ulist) %朝正无穷方向取整
Ulist %朝正无穷方向取整
%画出模糊系统
figure(1); plotfis(a2);
figure(2);plotmf(a,'input',1);
figure(3);plotmf(a,'input',2);
figure(4);plotmf(a,'output',1);
计算结果:
对实验结果的分析理解
使用模糊逻辑推理系统对于给定输入得到相应的输出结果才是实际使用的最终目的,这个过程在MATLAB里可以通过函数evalfis来完成。Ulist(i,j)=evalfis([time(i),naturallight(j)],a2);这里的Ulist就是一个当输入变量不同的时候,用这个模糊控制来实现的不同输出的矩阵。例如,第1个数据就是,当输入为1,1时,用centroid 面积重心法反模糊化计算后输出的值为-0.9998。这个循环中输入变量前后的数据加减为调整输入值的范围不要超过输入变量的范围,只要在范围内,可以随意写需要测试的数据(自己的理解)。
备注:
模糊规则矩阵rulelist的含义:模糊矩阵是由模糊规则转化而来,这里矩阵规模为3*6,矩阵第一列表示输入time(3个模糊集合依次对应1-3),矩阵第二列表示输入naturallight(含义同理),第三列表示输出automatic,第四列为规则的权重weight,第五列为AND模糊运算(1对应AND,2对应OR)。
模糊控制的优缺点
优点:
1.模糊控制是一种基于规则的控制,它直接采用语言型控制规则,出发点是现场操作人员的控制经验或相关专家的知识,在设计中不需要建立被控对象的精确的数学模型,因而使得控制机理和策略易于接受与理解,设计简单,便于应用。(自己在实验中深有体会)
2.由工业过程的定性认识出发,比较容易建立语言控制规则,因而模糊控制对那些数学模型难以获取,动态特性不易掌握或变化非常显著的对象非常适用。
3.基于模型的控制算法及系统设计方法,由于出发点和性能指标的不同,容易导致较大差异;但一个系统语言控制规则却具有相对的独立性,利用这些控制规律间的模糊连接,容易找到折中的选择,使控制效果优于常规控制器。
4.模糊控制是基于启发性的知识及语言决策规则设计的,这有利于模拟人工控制的过程和方法,增强控制系统的适应能力,使之具有一定的智能水平。
5.模糊控制系统的鲁棒性强,干扰和参数变化对控制效果的影响被大大减弱,尤其适合于非线性、时变及纯滞后系统的控制。
缺点:
1.模糊控制的设计尚缺乏系统性,这对复杂系统的控制是难以奏效的。难以建立一套系统的模糊控制理论,以解决模糊控制的机理、稳定性分析、系统化设计方法等一系列问题;
2.如何获得模糊规则及隶属函数即系统的设计办法,完全凭经验进行;(实验中自己建立的模糊规则也界定的很模糊)
3.信息简单的模糊处理将导致系统的控制精度降低和动态品质变差。若要提高精度就必然增加量化级数,导致规则搜索范围扩大,降低决策速度,甚至不能进行实时控制;
4.如何保证模糊控制系统的稳定性即如何解决模糊控制中关于稳定性和鲁棒性问题还有待解决。