赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 图像处理与人工智能

模糊逻辑控制

模糊逻辑控制(Fuzzy Logic Control)是以模糊集合论、模糊语言变量和模糊逻辑控制推理为基础的一种计算机数字控制技术。
传统的控制理论,对于明确系统有强而有力的控制能力,但对于过于复杂或难以精确描述的系统则难以实现,因此尝试使用模糊数学来处理这些控制问题。

1. 模糊逻辑控制的基础:

一般控制系统架构包括5个主要部分,即自变量、模糊化、知识库、逻辑判断和去模糊化。
模糊逻辑控制是以模糊集合论、模糊语言及模糊逻辑控制为基础的控制,是一种非线性智能控制。模糊逻辑控制一般用于无法以严密的数学表达式表示的控制对象模型,即可利用人的经验和知识来控制。
模糊逻辑控制的控制规律由计算机的程序实现,计算机采样获取被控制量的精确值,然后将此量与给定值比较得到误差信号E。一般选误差信号E作为模糊逻辑控制器的一个输入量,把E的精确量进行模糊量化变成模糊量,误差E的模糊量可用相应的模糊语言表示,得到误差E的模糊语言集合的一个子集e,这是一个模糊向量;再由e和模糊逻辑控制规则R根据推理的合成规则进行模糊决策,得到模糊逻辑控制量u:u=exR。
为了对被控对象施加精确的控制,还需要将模糊量u进行非模糊化处理,转换成精确量;得到精确数字量后,经数模转换变成精确的模拟量送给执行机构,对被控对象进行控制。
然后,进行第二次采样,完成第二步控制,如此循环,最终实现对被控对象的模糊控制。
实现模糊逻辑控制器的设计,需要包括6方面的内容:
⑴确定模糊逻辑控制器的输入变量和输出变量
⑵设计模糊逻辑控制器的控制规则
⑶确立模糊化和非模糊化的方法
⑷选择模糊逻辑控制器的输入变量及输出变量的论域并确定模糊逻辑控制器的参数
⑸模糊逻辑控制器的软硬实现
⑹合理选择模糊逻辑控制算法的采样时间

2. 模糊逻辑控制规则设计:

控制规则是模糊逻辑控制器的核心,一般包括三部分设计内容,选择描述输入和输出变量的词集、定义各模糊变量的模糊子集、建立模糊逻辑控制器的控制规则。
1)选择描述输入和输出变量的词集:
模糊逻辑控制器的控制规则表现为一组模糊条件语句,在条件语句中描述输入/输出变量状态的一些词汇的集合,称为这些变量的词集。
选择较多的词汇描述输入、输出变量,可以使制定控制规则方便,但是控制规则相应就复杂;选择词汇过少,使得描述变量变得粗糙,导致控制器的性能变坏。一般情况下都选择7个词汇,但也可根据实际系统需要选择3个或5个语言变量。
对应于控制器输入输出误差采用的词集一般为:负大、负中、负小、零、正小、正中、正大,用英文缩写为:NB、NM、NS、ZO、PS、PM、PB。
2)定义各模糊变量的模糊子集:
定义一个模糊子集,实际上就是要确定模糊子集隶属函数曲线的形状。将确定的隶属函数离散化,就得到了有限个点上的隶属度,便构成了一个相应的模糊变量的模糊子集。
理论上,在众多的隶属函数曲线中,用正态型模糊变量来描述控制活动时的模糊概念是适宜的;但在实际的工程中,机器对于正态型分布的模糊变量的运算是相当复杂和缓慢的,而三角形分布的模糊变量的运算简单、迅速。因此,控制系统的控制器一般采用计算相对简单、控制效果迅速的三角形分布。
3)建立模糊逻辑控制器的控制规则:
模糊逻辑控制器的控制规则是基于手动控制策略,而手动控制策略又是通过学习、试验以及长期经验积累而逐渐形成的,存储在操作者头脑中的一种技术知识集合。
利用模糊集合理论和语言变量的概念,可以把利用语言归纳的手动控制策略上升为数值运算,于是可以采用计算机完成这个任务以替代人的手动控制,实现模糊自动控制。

3. 模糊逻辑控制工具箱:

MATLAB提供了模糊逻辑控制工具箱,包括用于建立和测试模糊逻辑控制系统的功能函数,可以定义语言变量及其隶属度函数、输入模糊推理规则、观察模糊推理过程和输出结果等。
1)模糊逻辑控制系统的基本类型:
在模糊逻辑控制系统中,模糊模型的表示主要有两类。
⑴基于标准模型的模糊逻辑控制系统:
在标准模型模糊逻辑控制系统中,模糊规则的前件和后件均为模糊语言值,即具有如下形式:
IF x1 is A1 and x2 is A2 and...and xn is An THEN y is B
其中,Ai为输入模糊语言值;B为输出模糊语言值。
模糊规则库由若干TF-THEN规则构成。模糊推理机在模糊推理系统中起着核心作用,它将输入模糊集合按照模糊规则映射成输出模糊集合,提供了一种量化专家语言信息和在模糊逻辑控制原则下系统地利用这类语言信息的一般化模式。
⑵基于高木-关野模型的模糊逻辑控制系统:
高木-关野Takagi-Sugeno模糊逻辑控制系统中,采用如下形式的模糊规则:
IF x1 is A1 and x2 is A2 and...and xn is An THEN
模糊控制
其中,Ai为输入模糊语言值;ci为真值参数。
可见,高木-关野模糊逻辑控制系统的输出量是精确值,输出量可用输入量的线性组合来表示,因而能够利用参数估计方法来确定系统的参数,也可以用线性控制系统的分析方法来近似分析和设计模糊逻辑控制系统。
2)模糊逻辑控制系统的构成:
构造一个模糊逻辑控制系统必须明确其主要组成部分。一个典型的模糊逻辑控制系统主要由如下几个部分组成:
·模糊规则
·模糊推理算法
·输入量的模糊化方法和输出变量的去模糊化方法
·输入与输出语言变量,包括语言值及其隶属度函数
在MATLAB中构造一个模糊推理系统需要的步骤:
·模糊推理系统对应的数据文件,后缀fis,用于对该系统进行存储、修改和管理
·确定输入、输出语言变量及其语言值
·确定语言值的隶属度函数,包括隶属度函数的类型与参数
·确定模糊规则
·确定各种模糊运算方法,包括模糊推理方法、模糊化方法、去模糊化方法等
3)模糊推理系统的建立、修改与存储管理:
MATLAB提供的模糊逻辑控制工具箱中的管理函数:

函数

功能

newfis

创建新的模糊推理系统

readfis

从磁盘读取存储的模糊推理系统

getfis

获得模糊推理系统的特性数据

writefis

保存模糊推理系统

showfis

显示添加注释了的模糊推理系统

setfis

设置模糊推理系统的特性

plotfis

图形显示模糊推理系统的输入/输出特性

mamzsug

将Mamdani型模糊推理系统转换为Sugeno型

⑴a=newfis(fisName,fisType,andMethod,orMethod,impMethod,aggMethod,defuzzMethod)
创建新的模糊推理系统。其中,fisName为模糊推理系统名称;fisType为模糊推理系统类型;andMethod是与运算操作符;orMethod是或运算操作符;impMethod是模糊蕴含方法;aggMethod是各条规则推理结果的综合方法;defuzzMethod是去模糊化方法;返回值a为模糊推理系统对应的矩阵名称。
⑵fismat=readfis('fileName')    %从磁盘读取存储的模糊推理系统。
⑶getfis(a)    %获得模糊推理系统的特性数据
getfis(a,'fisprop')
getfis(a,'vartype',varindex)
getfis(a,'vartype',varindex,'varprop')
getfis(a,'vartype',varindex,'mf',mfindex)
getfis(a,'vartype',varindex,'mf',mfindex,'mfprop')
其中,fisprop为要设置的fis特性字符串;vartype为指定语言变量的类型;varprop为要设置的变量域名字符串;varindex为指定语言变量的编号;mf为隶属函数名;mfindex为隶属函数的编号;mfprop为要设置的隶属函数域名字符串。
⑷writefis(fismat) %将模糊推理的数据写入磁盘文件
writefis(fismat,'filename')
writefis(fismat,'filename','dialog')
其中,fismat为矩阵名。
⑸showfis(fisMat) %以分行方式显示模糊推理系统矩阵的所有属性函数
⑹a=setfis(a,'fispropname',newfisprop) %设置模糊推理系统的特性函数
a=setfis(a,'vartype',varindex,'varpropname',newvarprop)
a=setfis(a,'vartype',varindex,'mf',mfindex,...,'mfpropname',newmfprop)
⑺plotfis(fisMat) %绘图表示模糊推理系统的函数
4)模糊语言变量及其语言值:
语言变量分为输入语言变量和输出语言变量。语言变量具有多个语言值,每个语言值对应一个隶属函数。语言变量的语言值构成了对输入和输出空间的模糊分割,模糊分割的个数即语言值的个数,语言值对应的隶属度函数决定了模糊分割的精细化程度。模糊分割的个数也决定了模糊规则的个数,模糊分割数越多,控制规则数也越多,应在模糊分割的精细程度与控制规则的复杂性之间取得折中。
MATLAB模糊逻辑控制工具箱提供了添加或删除模糊语言变量及语言值的函数:

函数

功能

addvar

添加模糊语言变量

rmvar

删除模糊语言变量

⑴a=addvar(a,'varType','varName',varBounds)
其中,varType指定语言变量的类型;varName指定语言变量的名称;varBounds指定语言变量的论域范围。示例:a=addvar(a,'input','service',[0 10]);
⑵fis2=rmvar(fis,'varType',varIndex)
[fis2,errorStr]=rmvar(fis,'varType',varIndex)
其中,fis为矩阵名;varType指定语言变量的类型;varIndex为语言变量的编号。
5)模糊语言变量的隶属度函数:
MATLAB提供了模糊隶属度函数:

函数

功能

pimf

建立π形隶属度函数

gauss2mf

建立双边高斯形隶属度函数

gaussmf

建立高斯形隶属度函数

gbellmf

建立一般的钟形隶属度函数

smf

建立S形隶属度函数

trapmf

建立梯形隶属度函数

trimf

建立三角形隶属度函数

zmf

建立Z形隶属度函数

模糊隶属度函数用以生成特殊形状的隶属函数,包括三角形、高斯形、π形、钟性等。
⑴y=pimf(x,params) %建立π形隶属度函数
y=pimf(x,[a b c d])
π形函数是一种样条函数,形状类似字母π。其中,x指定函数的自变量范围;[a b c d]决定函数的形状,a和d分别对应曲线下部的左右两个拐点,b和c分别对应曲线上部的左右两个拐点。
⑵y=gauss2mf(x,[sig1 c1 sig2 c2]) %建立双边高斯形隶属度函数
双边高斯形函数的曲线由两个中心点相同的高斯形函数的左、右半边函数组合而成。其中,sig1、ci、sig2、c2分别对应高斯函数的宽度与中心点。
⑶y=gaussmf(x,[sig c]) %建立高斯形隶属度函数
其中,c决定了函数的中心点;sig决定了函数曲线的宽度。高斯函数的表达式为:
模糊控制
⑷y=gbellmf(x,params) %建立一般的钟形隶属度函数
其中,x指定变量的论域范围,[a b c]指定钟形函数的形状。钟形函数表达式:
模糊控制
⑸y=smf(x,[a b]) %建立S性隶属度函数
⑹y=trapmf(x,[a,b,c,d]) %建立梯形隶属度函数
梯形隶属度函数形状的表达式:
模糊控制
⑺y=trimf(x,[a,b,c]) %建立三角形隶属度函数
三角形隶属度函数形状的表达式:
模糊控制
⑻y=zmf(x,[a,b]) %建立Z形隶属度函数
Z形函数是一种基于样条插值的函数,两个参数a和b分别定义样条插值的起点和终点。函数表达式为:
模糊控制
6)模糊规则的建立与修改:
MATLAB提供了有关对模糊规则建立和操作的函数:

函数

功能

addrule

向模糊推理系统添加模糊规则函数

parsrule

解析模糊规则函数

showrule

显示模糊规则函数

⑴fisMat2=addrule(fisMat1,rulelist) %向模糊推理系统添加模糊规则函数
其中,fisMat1和fisMat2为添加规则前后模糊推理系统对应的矩阵名称;rulelist为以向量形式给出的需要添加的模糊规则,如果模糊推理系统有m个输入语言变量和n个输出语言变量,向量rulelist的列数必须为m+n+2,行数任意。
rulelist的每一行中,前m个数字表示各输入变量对应的隶属度函数的编号;其后n个数字表示输出变量对应的隶属度函数编号;第m+n+1个数字是该规则适用的权重,权重的值在0~1之间,一般设为1;第m+n+2个数字为0或1两个值之一,如果为1表示模糊规则前件各语言变量之间是“与”的关系,如果为0则表示是“或”的关系。
例如:系统fisMat有两个输入和一个输出,其中两条模糊规则为:
IF x is X1 and y is Y1 THEN z is Z1
IF x is X2 and y is Y2 THEN z is Z2
使用MATLAB的模糊规则为:
rulelist=[1 1 1 1 1;1 2 2 1 1];
fisMat=addrule(fisMat,rulelist);
⑵fisMat2=parsrule(fisMat1,txtRuleList,ruleFormat,lang) %解析模糊规则函数
⑶showrule(fisMat,indexList,format,lang) %显示模糊规则函数
其中,fisMat是模糊推理系统矩阵名;indexList是规则编号,规则编号可以以向量形式指定多个规则;format是规则显示方式。模糊规则有三种显示方式,详述方式verbose、符号方式symbolic和隶属度函数编号方式membership function index referencing。
7)模糊推理计算与去模糊化:
目前常用的模糊推理合成规则为“极大-极小”规则。设R表示规则,X为A→Y为B表达的模糊关系,则当X为A'时,按照“极大-极小”规则进行模糊推理的结论B'计算公式为:
模糊控制
MATLAB模糊逻辑控制工具箱中提供了有关对模糊推理计算与去模糊化的函数:

函数

功能

evalfis

执行模糊推理计算函数

defuzz

执行输出去模糊化函数

gensurf

生成模糊推理系统的输出曲面并显示函数

⑴output=evalfis(onput,fisMat) %执行模糊推理计算函数
⑵out=defuzz(x,mf,type) %执行输出去模糊化函数
其中,x为变量的论域范围;mf为待去模糊化的模糊集合;type为去模糊化的方法。
⑶gensurf(fisMat)
gensurf(fisMat,inputs,outputs)
gensurf(fisMat,inputs,outputs,grids,refinput)
其中,fisMat为模糊推理系统对应的矩阵;inputs为模糊推理系统的一个或两个输入语言变量的编号;outputs为模糊系统的输出语言变量的编号;grids用于指定x和y坐标方向的网络数目;当系统输入变量多于两个时,refinput用于指定保持不变的输入变量。
8)示例代码:
fisMat=newfis('s1');
fisMat=addvar(fisMat,'input','成绩',[0 10]);
fisMat=addvar(fisMat,'output','奖学金',[0 100]);
fisMat=addmf(fisMat,'input',1,'差','gaussmf',[1.8 0]);
fisMat=addmf(fisMat,'input',1,'中等','gaussmf',[1.8 5]);
fisMat=addmf(fisMat,'input',1,'很好','gaussmf',[1.8 10]);
fisMat=addmf(fisMat,'output',1,'低','trapmf',[0 0 10 50]);
fisMat=addmf(fisMat,'output',1,'中等','trimf',[10 30 80]);
fisMat=addmf(fisMat,'output',1,'高','trapmf',[50 80 100 100]);
rulelist=[1 1 1 1; 2 2 1 1;3 3 1 1];
fisMat=addrule(fisMat,rulelist);
subplot(311);plotmf(fisMat,'input',1);xlabel('成绩');ylabel('输入隶属度');
subplot(312);plotmf(fisMat,'output',1);xlabel('奖学金');ylabel('输出隶属度');
subplot(313);gensurf(fisMat);

4. 模糊逻辑控制的图形界面GUI:

MATLAB中可以使用图形用户界面建立模糊推理系统,输出曲面视图窗口。GUI工具包括模糊推理系统编辑器、隶属度函数编辑器、模糊规则编辑器、模糊规则浏览器、模糊推理输入/输出曲面视图等5个部分。
命令行fuzzy可以启动模糊推理系统编辑器,窗口上部中列出了输入模糊变量、模糊规则、输出模糊变量部分,双击图形框可以相应的编辑窗口;窗口下部列出变量和推理系统。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659