模糊控制的Matlab仿真.ppt
- 文档编号:728813
- 上传时间:2023-04-29
- 格式:PPT
- 页数:166
- 大小:2.43MB
模糊控制的Matlab仿真.ppt
《模糊控制的Matlab仿真.ppt》由会员分享,可在线阅读,更多相关《模糊控制的Matlab仿真.ppt(166页珍藏版)》请在冰点文库上搜索。
用MATLAB的模糊逻辑工具箱(Fuzzytoolbox)实现,Matlab4.2以后的版本中推出的模糊工具箱(FuzzyToolbox),为仿真模糊控制系统提供了很大的方便。
在Simulink环境下对PID控制系统进行建模是非常方便的,而模糊控制系统与PID控制系统的结构基本相同,仅仅是控制器不同。
对模糊控制系统的建模关键是对模糊控制器的建模。
Matlab软件提供了一个模糊推理系统(FIS)编辑器,只要在Matlab命令窗口键入Fuzzy就可进入模糊控制器编辑环境。
Matlab模糊逻辑工具箱仿真,模糊推理系统编辑器(Fuzzy)模糊推理系统编辑器用于设计和显示模糊推理系统的一些基本信息,如推理系统的名称,输入、输出变量的个数与名称,模糊推理系统的类型、解模糊方法等。
其中模糊推理系统可以采用Mandani或Sugeuo两种类型,解模糊方法有最大隶属度法、重心法、加权平均等。
打开模糊推理系统编辑器,在MATLAB的命令窗(commandwindow)内键入:
fuzzy命令,弹出模糊推理系统编辑器界面,如下图所示。
多个输入时,在Edit菜单中,选Addvariable-input,加入新的输入input,如下图所示,选择input(选中为红框),在界面右边文字输入处键入相应的输入名称,例如,温度输入用tmp-input,磁能输入用mag-input,等。
隶属度函数编辑器(Mfedit)该编辑器提供一个友好的人机图形交互环境,用来设计和修改模糊推理系中各语言变量对应的隶属度函数的相关参数,如隶属度函数的形状、范围、论域大小等,系统提供的隶属度函数有三角、梯形、高斯形、钟形等,也可用户自行定义。
双击所选input,弹出一新界面,在左下Range处和DisplayRange处,填入取只范围,例如0至9(代表0至90)。
在右边文字文字输入Name处,填写隶属函数的名称,例如lt或LT(代表低温)。
在Type处选择trimf(意为:
三角形隶属函数曲线,trianglememberfunction),当然也可选其它形状。
在Params(参数)处,选择三角形涵盖的区间,填写三个值,分别为三角形底边的左端点、中点和右端点在横坐标上的值。
这些值由设计者确定。
用类似的方法设置输出output的参数。
比如:
共有9个规则,所以相应地有9个输出隶属函数。
默认3个隶属函数,剩下6个由设计者加入。
点击Edit菜单,选AddCustomMS-继续填入相应参数即可。
模糊推理规则编辑器Ruleedit通过隶属度函数编辑器来设计和修改“IF.THEN”形式的模糊控制规则。
由该编辑器进行模糊控制规则的设计非常方便,它将输入量各语言变量自动匹配,而设计者只要通过交互式的图形环境选择相应的输出语言变量,这大大简化了规则的设计和修改。
另外,还可为每条规则选择权重,以便进行模糊规则的优化。
选Edit菜单,选择Rules,弹出一新界面RuleEditor.在底部的选择框内,选择相应的IFANDTHEN规则,点击Addrule键,上部框内将显示相应的规则。
本例中用9条左右的规则,依次加入。
如下图所示:
模糊逻辑工具箱仿真结果模糊规则浏览器用于显示各条模糊控制规则对应的输入量和输出量的隶属度函数。
通过指定输入量,可以直接的显示所采用的控制规则,以及通过模糊推理得到相应输出量的全过程,以便对模糊规则进行修改和优化。
所有规则填入后,选菜单View,选择Rules,弹出一新界面RuleViewer,如下图所示。
上图表示当温度为45度、磁能为45瓦时,输出干度为约70个单位。
左右拉动界面中的两支红线,拉到欲选的近似值,右边图顶显示相应的干度结果。
上图中选菜单View,选择Surface,弹出一新界面SurfaceViewer,弹出该课题结果的三维图。
如下图所示。
注意将鼠标箭头放置图内,移动鼠标可得到不同角度的视图,如下图所示。
Matlab模糊控制仿真演示例子,模型sltank.mdl使用模糊控制器对水箱水位进行控制。
假定水箱有一个进水口和一个出水口,可以通过控制一个阀门来控制流入的水量(即水位高度),但是流出的速度取决于出水口的半径(定值)和水箱底部的压力(随水箱中的水位高度变化)。
系统有许多非线性特性。
要求设计的目标是一个合适的进水口阀门的控制器,能够根据水箱水位的实时测量结果对进水阀门进行相应控制,使水位满足特定要求(即特定输入信号)。
一般情况下,控制器以水位偏差(理想水位和实际水位的差值)及水位变化率作为输入,输出的控制结果是进水阀打开或关闭的速度。
在Matlab中仿真,可以看到出现一个水箱模型的仿真动画窗口。
该动画由一个S函数”animtank.m”实现。
从动画中,可以观察到实际系统的水位跟随殊荣的要求水位信号变化。
如果对S函数的实现感兴趣,可以键入命令openanimtank(或editanimtank)来查看”animtank.m”文件,在Simulink编辑窗口左边的模块浏览区可以看到在水箱仿真系统中包括水箱子模型、阀门子模型及PID控制子模型。
直接在浏览区中点击或右键点击它们,并在弹出菜单中选择lookundermask】,可以看到这些模块实现的细节结构,如图所示。
这里暂时不讨论具体的系统模型的构造问题,我们可以先在这个已经建立好的系统模型上进行修改,体验模糊逻辑与仿真环境结合使用的优势。
对于仿真模型系统中已经建立的水箱模块、阀门模块以及动画仿真显示模块可以直接使用,这里我们重点讨论与模糊推理系统设计问题相关的模糊系统变量tank(即MATLAB的模糊逻辑推理系统)。
在MATLAB命令窗口中键入命令fuzzytank,就可以开始对模糊系统tank进行编辑了。
为简单起见,我们直接利用系统里已经编辑好的模糊推理系统,在它的基础上进行修改。
这里我们采用与tank.fis中输入输出变量模糊集合完全相同的集合隶属度函数定义,只是对模糊规则进行一些改动,来学习模糊工具箱与仿真工具的结合运用。
对于这个问题,根据经验和直觉很显然可以得到如下的模糊控制规则:
If(水位误差小)then(阀门大小不变(权重1)If(水位低)then(阀门迅速打开)(权重1)If(水位高)then(阀门迅速关闭)(权重1),这相当于在原有模糊系统模型上减少两条模糊规则得到的新的模糊推理系统。
改动完成后进行仿真,观察示波器模块,可以得到系统水位变化,如图所示。
从上图的仿真控制结果曲线中可以看出上述由三条模糊规则组成的模糊控制系统的结果并不理想,因此可以再增加如下两条模糊控制规则:
If(水位误差小且变化率为负)then(阀门缓慢关闭)(权重1)If(水位误差小且变化率为正)then(阀门缓慢打开)(权重1)系统的输出变化曲线如下图所示。
从上图可以看出,在增加了模糊控制规则后,系统的动态特性得到较大改善,不但具有较短的响应时间,而且超调量也很小。
可以用Surfviewtank命令来显示模糊控制系统的输出曲面,如图所示。
在这个例子中,还可以用传统的PID控制方法与模糊逻辑推理控制进行比较。
在水箱仿真环境主界面中将控制方法选择开关中间的const模块的值由由-1改为1,这时系统将用传统的PID控制方法进行控制,如图所示。
其他例子,模型Shower.mdl淋浴温度调节模糊控制系统仿真;模型slcp.mdl单级小车倒摆模糊控制系统仿真;模型slcp1.mdl变长度倒摆小车模糊控制系统仿真;模型slcpp1.mdl定长、变长二倒摆模糊控制系统仿真;模型slbb.mdl球棒模糊控制系统仿真;模型sltbu.mdl卡车智能模糊控制倒车系统仿真;模型sltank2.mdl用子系统封装的水箱控制仿真。
学习MATLAB仿真工具的一个快速有效的方法就是学习示例模型,通过看懂这些模型和模块的功能以及搭建过程,可以很快熟悉和掌握如何使用MATLAB仿真工具来设计和搭建自己独特的模型。
下面以模型Shower.mdl的结构作一个介绍,方便读者更好地理解和学习这个例子。
模型Shower.mdl是一个淋浴温度及水量调节的模糊控制系统的仿真,该模糊控制器的输入变量分别是水流量和水温,输出变量分别是对热水阀和冷水阀的控制方式。
该问题是一个典型的经验查表法控制示例,是Mamdani型系统,其模糊控制矩阵存为磁盘文件shower.fis。
这个仿真模型的输出是用示波器来表示的,如图所示。
通过示波器上的图形我们可以清楚地看到温度和水流量跟踪目标要求的性能。
水温示波器,水流示波器,水温偏差区间模糊划分及隶属度函数,水流量偏差区间模糊划分及隶属度函数,输出对冷水阀控制策略的模糊化分及隶属度函数,输出对热水阀控制策略的模糊化分及隶属度函数,其中输入变量水温与流速的偏差与输出热水阀、冷水阀的控制方法的经验表格如表1及表2所示。
根据这两个输出控制表,可以产生九条模糊控制规则,如下:
系统的模糊推理运算相关定义如下:
其余例子,请各位同学自行打开研究学习。
通过Maltab命令(程序)创建和计算模糊逻辑系统,前面介绍过如何使用图形化工具建立模糊逻辑系统,我们也可以完全用命令行或程序段的方式来实现。
小费问题:
实际生活中有着许多模糊的概念和逻辑方式,“给小费”问题就是一个可以用模糊逻辑来分析的经典的例子。
下图表示的是一个关于饭店的服务质量和顾客所给小费之间的关系图,左边表示饭店的服务质量,作为输入;右边表示顾客所给的小费,作为输出,两者是有一定逻辑关系的。
图中的黑箱表示一种映射规则,将服务质量映射到小费。
这个黑箱就是这一逻辑关系的核心部分,它可以理解为各种不同的逻辑,例如模糊逻辑、线性逻辑、专家系统、神经网络、微分方程、多维表格查询或者随机选择器等。
在上述问题中,模糊逻辑被证明是最佳的。
在国外饭店就餐后一般需要付给侍者小费,这是国外模糊系统的教材中一个非常经典的例子。
下面我们通过小费问题来说明模糊逻辑的作用。
“小费”问题的核心就是:
多少小费是“合适”的?
我们先把问题简化,假定用从010的数字代表服务的质量(10表示非常好,0表示非常差),小费应该给多少?
这里还考虑到问题的背景在美国平均的小费是餐费15,但具体多少随服务质量而变。
首先考虑最简单的情况,顾客总是多给总账单的15作为小费:
用MATLAB语句绘图,如下图所示。
虽然是简单的线性关系,但这样的结果已经基本能够反映服务质量对小费的影响效果了,如果考虑到顾客所给的小费也应当能反映食物的质量,那么问题就在原来的基础上扩展为:
给定两个从0到10的数字分别代表服务和食物的质量(10表示非常好,0表示非常差),这时小费与它们之间的关系又应当如何反映呢?
假设是二元线性关系,用下列MATLAB语句可绘出下图。
可以看到,如果不考虑服务质量因素比食物质量因素对于小费的支付占有更大的比重,上面的关系图形已经能够反映一些实际的情况了。
假如希望服务质量占小费的80%,而食物仅占20。
这里可以设定权重因子:
用下列MATLAB语句可绘出下图,这样的结果与实际情况还是有些不符。
通常顾客都是给15的小费,只有服务特别好或特别不好的时候才有改变,也就是说,希望在图形中间部分的响应平坦些,而在两端(服务好或坏)有凸起或凹陷。
这时服务与小费是分段线性的关系。
例如,用下面MATLAB语句绘出的下图的情况。
上图没有考虑食物质量的影响,我们加入这个因素后,扩展为三维的,就有如下的结果:
用下列MATLAB语句可绘出图,现在的结果比较好了,可是函数看起来有点复杂,而且程序也越来越长,将来不便于修改和增加新的规则及排除检查错误。
对于不清楚设计过程的人来说,设计人员的思维是不容易被理解的。
模糊系统可以很好地结合人类的自然语言。
对于小费问题,现在只考虑关键因素,把问题简化,得出下面三条规则:
当服务很差的时候,小费比较少。
当服务比较好的时候,小费中等。
当服务非常好的时候,小费比较高。
如果我们把食物对小费的影响考虑进来,可以增加下面两条规则:
当食物很差时,小费比较少。
当食物很好时,小费比较高。
上面五条规则不分先后顺序,但是各条规则的重要性可以是不同的,在没有特殊要求的情况下,可以认为这些规则的重要性(权重)是相同的。
可以把服务和食物的质量综合起来,总结为如下三条规则:
当服务差或食物差的时候,小费少。
当服务好的时候,小费中等。
当服务很好或食物好的时候,小费高。
当我们已经得到上述三条模糊逻辑系统的推理规则后,只要再给出其中的模糊变量(例如“服务差”、“服务好”、“服务非常好”等概念)的定义和表示,就建立了该问题的一个完整的模糊推理系统的方案。
这个系统的核心就是上述三条规则以及相关模糊变量的定义。
使用Matlab图形化工具,可以方便地建立起模糊控制系统。
用命令行函数实现模糊逻辑系统,前面主要介绍了MATLAB图形化工具的使用,MATLAB同样也提供了一些函数命令来实现模糊逻辑系统。
这些函数不仅能完全实现图形化方式所提供的功能,同时还可以实现图形化方式所难以实现的功能。
特别是对于那些比较复杂的模糊推理系统,在输入输出变量、隶属度函数、模糊规则数目比较多的时候,如果要在图形化界面中人工输入,效率就很低。
如果通过命令行方式的编程,就可以让计算机完成许多重复性的输入工作,大大减少了工作量。
还有其他一些情况,如输入输出变量、隶属度函数、模糊规则等是由程序计算得到的,这时如果采用命令行的编程会更加简单方便。
MATLAB模糊工具箱的图形化工具与命令行函数是统一的,我们可以将它们结合使用。
无论是命令行方式或是图形化方式创建的系统,其格式都是一样的。
因此,如果根据需要同时使用两种方法来编辑一个模糊逻辑系统,往往会达到更好的效果。
命令行函数使用示例入门,小费问题是模糊逻辑工具箱中提供的一个模糊推理系统的示例。
在MATLAB中一个模糊逻辑推理系统被当作是一种FIS结构。
例如,我们在命令行工作环境键入命令:
结果:
该命令加载小费问题模糊推理系统的数据文件到当前的工作空间中,并存为变量a,a是一种FIS结构的变量。
在上面的结果之列中,冒号左边的标号表示MATLAB的FIS结构中的与tipper.fis相关的结构成员变量名,可以通过“结构名成员名”的方式来访问这些结构成员变量。
例如键入命令:
其实在MATLAB里,模糊推理系统是以特定的语法用文本方式来存储的。
如果键入命令:
typetipper.fis,就可以看到这个用ASCll代码存储的模糊系统。
函数readfis得到了这个数据文件中的所有属性,并把它们存入一个结构(也可以看作是一个广义的矩阵)。
上面的例子中通过语句a=readfis(tipper.fis)变量a被赋予一个FIS(FuzzyInferencesystem)结构变量矩阵。
这个矩阵主要由ASCll代码构成,通常表现为数字的排列,这样就不便于阅读,因此需要特定的函数来显示系统属性。
函数getfis(a)返回结果是关于模糊推理系统的一般属性,比如说系统名称,输入、输出变量的名称等等。
例如键入命令:
getfis(a),结果:
从上面的结果我们可以看到,有些属性并不是结构变量a中所包含的。
例如键入:
系统返回如下错误信息:
但是,如果键入:
系统返回结果:
getfis函数还有若干种使用方法,可以键入右边命令试一试,看看结果。
前述功能同样可以通过“结构名成员名”的方式来访问,只是具体的访问方式与成员的类型相关。
例如,要得到上述getfis(a,Inlabels)命令的结果,可以采用如下的方式:
返回结果:
setfis是和getfis相对应的函数,它允许改变一个FIS系统的特性。
如果想将上述系统的名字tipper改为gratuity,可以运行命令:
返回结果:
在结果中可以看到name变为gratuity,同样上面的操作也可以用命令“a.name=gratuity”,来实现。
如果想要知道更详细的内容,通过函数showfis(a)就可以得到这个FIS矩阵的详细属性。
这个函数最主要是用来进行程序调试,但同时它也能分行显示所有记录在FIS矩阵的信息。
在这里结构变量a代表一个小费问题的模糊推理系统,前面提到的图形化编辑工具都可以用来对它进行相关操作。
下面这些函数命令将打开相应的小费系统图形化工具界面。
如果a是一个Sugeno型的模糊系统,命令anfisedit(a)将打开ANFIS(模糊神经网络系统)图形编辑界面。
通过MATLAB命令(程序)创建和计算模糊逻辑系统,前面介绍过如何用图形化工具建立模糊逻辑系统,这些也可以完全用命令行或程序段的方式实现。
仍然使用小费问题的例子作为范例,在这个例子中将用到newfis、addvar、addmf、addrde等几个函数。
在用命令行建立模糊逻辑系统的过程中,往往最令人迷惑的就是模糊规则在系统中的简述表达方式。
规则是通过函数addrule来加入的,每一个输入或输出的变量都有一个索引(index)值,同样每一个隶属度函数也有一个index值,输入规则的函数就是使用这些索引来创建相应的模糊规则,在MATLAB中模糊规则一般具有如下形式:
模糊规则按照下面的逻辑被转化成一种数据结构(或矩阵)的形式来表示:
如果系统由m个输入、n个输出变量和k条模糊规则组成,则该规则结构是一个(m+n+2,k)的矩阵。
该矩阵的每个行向量代表一条模糊规则,这个行向量的前m个数表示前m个输入变量对应的隶属度函数的索引值,例如,第一列表示第一个输入变量在各条规则的相应的隶属度函数的索引,第二列表示第二个输入变量相应的隶属度函数的索引。
接着的n列表示n个输出变量对应的隶属度函数的索引值。
第m+n+1列的数分别表示各条规则的权重(一般为1),第m+n+2列表示各条规则之间的相互连接方式(and=l,or=2)。
这样,上面这条规则用MATLAB的结构表示为一个行向量。
如果输入或是输出变量加了否定修饰词not的话,则只需在相应的隶属度函数索引值前键入一个负号。
例如,对于规则:
其对应的行向量变为:
-1320.52,依次解释如下:
-1表示notMF1;3表示MF3;2表示MF2;0.5表示weight=0.5;2表示or。
下面是用“结构名成员名”表达方式编写的创建小费模糊推理系统tipper.fis的命令行程序示例。
例用命令行方式建立小费推理系统模糊模型。
这样的程序相当繁琐,如果用前面所提到的规则结构变量以及相应的一些MATLAB函数来实现会简单得多,例如:
使用模糊逻辑推理系统对于给定输入得到相应的输出结果才是实际使用中最终的目的,这个过程在MATLAB里可以通过函数evalfis来完成。
例如,下面的命令行用来计算小费推理系统对于输入变量为1,2的输出结果:
MATLAB的FIS结构和存储,在MATLAB中模糊推理系统是以一种FIS的结构类型来表示和存储的。
无论是图形化的工具或是像getfis和setfis这样的函数,都可以对这种结构进行直接的操作,同样也可以用“结构名成员名”(“Structure.field”)的语法方式来访问。
FIS的结构组成很简单,是将MATLAB模糊逻辑的各个函数统一起来使用的基础。
FIS结构可以看作是一种层次结构,如下图所示。
模糊推理系统FIS结构层次,可以用Showfis函数来生成关于FIS结构变量的详细信息列表。
例如键入,除了图形化环境,MATLAB的命令行方式提供了下列与FIS结构的创建和编辑相关的函数:
getfis、setfis、showfis、addvar、addmf、addrule、rmvar及rnmlf。
关于这些函数的使用方法将在后面的内容里介绍。
*.fis文件格式及存储,在MATLAB中模糊推理系统使用一种特定格式的文本文件来存储,通常以后缀fis命名。
工具箱提供了readfis和writefis两个函数分别来读写这种文件。
FIS文件是以文本方式存储,也可以不用图形工具或是相关函数而直接用文本编辑器来编辑它。
但是这样往往比较复杂而且容易出错,因为改动了一个参数可能需要在文件的许多地方进行考虑和修改。
例如,如果删除了一条隶属度函数,那么所有与该隶属度函数相关的规则就得删除,而且其他隶属度函数的序号也会发生改变,其他规则也要做相应改动。
在FIS文件中,模糊规则是以index方式表示的。
直接用文本编辑器或是用命令typetipper.fis(或opentipper.fis,edittipper.fis)都可以查看到小费问题模糊推理系统的文件tipper.fis,例如:
前面提到的一些函数,例如readfis、getfis、setfis、showfis等,都是模糊工具箱提供的命令行函数,直接调用这些函数就可以实现对模糊推理系统进行建立、修改以及存储等操作,下面将详细介绍常用的命令行函数。
说明:
在参数列表中,a为模糊推理系统对应的矩阵变量名,varType用于指定语言变量的类型为字符型(如input或output);varName也为字符型变量,用于指定语言变量的名;varBoundS用于指定语言变量的论域范围。
对于添加到同一个模糊推理系统的语言变量,将按照添加的先后顺序自动编号,编号从1开始,逐渐递增。
对于分属于输入与输出的不同语言变量则独立地分别编号。
说明:
当一个模糊语言变量正在被当前的模糊规则集使用时,试图删除该变量会导致其他相关规则被删除。
系统出现询问对话框,问是否确认删除命令。
在一个模糊语言变量被删除后,Matlab模糊逻辑工具箱将会自动地对模糊规则集进行修改以保证一致性。
从varType表示语言变量的类型,为字符型,如input或output;varIndex表示语言变量的编号。
说明:
隶属度函数只能为模糊推理系统中已经存在的某一语言变量的语言值添加隶属度函数,而不能添加到一个尚不存在的语言变量中。
对于每个语言变量的隶属度函数按照该函数被添加的顺序加以编号,第一个添加的隶属度函数被编为1号,此后依次递增编号。
函数必须指定输入以下六个参数:
例加入三条高斯型隶属度函数,如图所示。
说明:
当一个隶属度函数正在被当前模糊推理规则使用时,如果删除该隶属度函数将会删除涉及它的模糊规则,系统会出现要求确认消息框,如果确认删除将自动删除相关的一些规则。
各参数的含义说明如下:
例删除隶属度函数结果。
例删除被模糊规则使用的隶属度函数。
FIS系统相关操作,说明:
该函数用于创建并返回一个新的模糊推理系统,模糊推理系统的特性可由函数的参数指定,其参数个数可达7个。
如果不指定相应参数则取为缺省值。
参数的含义及类型说明如下:
例使用缺省参数的newfis函数创建mamdani和sugeno型模糊系统。
说明:
打开一个由指定的模糊推理系统的数据文件(.fis),并将其加载到当前的工作空间(workspace)中的变量FISMAT中。
当未指定文件名时,MATLAB将会打开一个文件对话窗口,提示用户指定某一fis文件。
说明:
使用该函数是获得模糊推理系统及其对应矩阵的所有属性的基本方法。
也可以用“结构名成员名”(Structure.field)的语法方式来替代这个函数。
在参数列表中,a为模糊推理系统结构在内存中对应的矩阵变量,必须已经存在,这是必须指定的参数,后面的其他参数则可以省略。
仅有参数a时,函数将列出模糊推理系统的所有属性。
说明:
fismat为MATLAB工作环境内存中的模糊推理系统结构的矩阵变量。
例以分行的形式显示模糊推理系统tipperfis矩阵的所有属性。
说明:
该函数的参数个数可以有3、5、7三种情况。
当参数个数为3时,用于设定模糊推理系统的全局属性,包括:
当参数个数为5个时,用于设定模糊推理系统矩阵某一个语言变量的属
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模糊 控制 Matlab 仿真