离散论域模糊控制表的离线计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

离散论域模糊控制表的离线计算
一、题目
已知单变量两维输入,一维输出模糊控制器,其两维输入为E,EC,一维输出为I,论域均为E,EC,I∈{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6},E的论域划分为{NB,NM,NS,NZ,PZ,PS,PM,PB},共8个模糊子集,其各自的隶属度函数如表1所示。

EC和I的论域划分为{NB,NM,NS,ZE,PS,PM,PB},共7个模糊子集,它们的隶属度函数都如表2所示。

已知控制规则表如表3所示,试求解输出控制表(如当e=-6,ec=-6时,求输出i=?,最终输出的控制表格式如如表4所示)。

其中输入采用单点模糊法,输出清晰量采用加权平均法进行解模糊,可以用MATLAB编程计算。

各变量的隶属度函数以及控制规则表如下:
表3 控制规则表
二、基本原理
这是一个二输入、单输出的模糊控制器的设计,主要包括输入模糊化、模糊推理、解模糊等基本过程,现在叙述如下: 1、输入模糊化
在本实验实际过程中采用单点模糊集合的方法实现输入的模糊化,例如e 为离散论域E={-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6},则x *=,0的输入模糊集合可表示为:
00000010000006543210123456
A =
++++++++++++------ 2、模糊推理
设某一时刻偏差为e *,偏差变化量为ec *,则可根据由各条规则给出的模糊蕴含关系进行合成推理运算,得到相应的输出控制量的模糊值:
*
*
*
**1
1
1
**1
(){()}{()[()]}
{[()][()]}
m n m n m n
l l l l l l l l m n
l l l l l U e and ec R e and ec R e and ec A and B C e A C ec B C ⨯⨯⨯*
===⨯====→=→→ 其中,m 和n 分别表示e 和ec 的论域所划分的模糊自己的个数,在本实验中,m=8,n=7,对应着本题目中规定的56条控制规则。

控制器设计的核心就是对上式进行编程。

3、解模糊
本实验采用加权平均的方式解模糊,其精确值的计算公式如下:
101
()n
i i
i n
i
i z k
z df z k
====
∑∑
三、实验程序:
实验最终采用的程序如文件program 中fuc1.m 所示,fuc1_1.m 和fuc1_2.m 为了说明程序优化使用。

就本题目而言,三个程序都可以解决问题。

Maxmin.m 是最大最小合成函数,供fuc1_1.m 运行时调用。

各个excel 表格说明如下:Input1_Terms_Membership.xlsx 、Input2_Terms_Membership.xlsx 、Output_Terms_Membership.xlsx 分别为两个输入变量以及输出变量的隶属度函数表,用于在MA TLAB 执行程序的时候读入,Output_Result.xlsx 为程序运行结果。

本实验采用的程序如下:
四、程序优化及讨论
1、此程序中各个变量表的输入都是通过excel实现的。

让MA TLAB通过程序从excel 表中读入数组到工作空间中,同时为了方便查看结果,又将结果写到excel表中。

这样,我们在设计一个二输入单输出的模糊控制器时,只需要在四个excel表中输入相应的数值,而不需要进行程序的修改,唯一需要修改的就是各个变量的论域。

整个程序的适应性还是比较强的,具有通用性。

但付出的代价就是计算时间的延长,而时间延长的主要部分就花费在读取excel表上:
可以看出,每读一个excel表,就要花费约0.7s的时间。

然而,这对一些数据量比较多的隶属度函数表来说是有利的,我们可以将隶属度函数表以excel的表格储存起来,直接调用,从而免去了在每次执行程序的时候在程序中修改输入量或者计算一个模糊控制器就新建一个新程序,这样对提高工作效率和程序的通用性还是有很大帮助的。

同时,我们也不需要担心输出的结果在MATLAB关闭以后就丢失,可以直接储存在excel表中。

本实验采用的程序时间复杂度如下:
此外,其中求56条规则的并采用在循环中每一次都与上一次求并,并且用此次的计算值冲掉上一次的计算值,这样就节省了硬件上RAM空间的开销。

2、在最开始的编程中,计算最大最小合成以及蕴含模糊关系时,我采用了子函数调用的方式,这样可以使得主程序变得简洁,而如果一个功能相同的程序段在程序中重复出现时,我们考虑到程序的简洁性,就采用子程序调用的方法,但这个方法带来的代价也是程序调用花费的时间开销。

这种方法的实现是通过fuc1_1.m实现的,程序段如下:
可见,该方法相比实验采用的程序,速度要慢。

3、如果仅考虑该实验,而不用考虑程序的通用性,直接在.m文件中输入各个变量,即略去读写excel的过程,同时也不采用子程序调用的方式,这样的程序运行速度就要快很多。

该程序运行所花费的时间明显要低很多。

4、综合分析
为了程序的通用性,同时考虑到在实际应用中,二输入单输出的情况居多,因此我采用了excel读入输入量的方法,并且省去了子程序调用的过程,采用fuc1.m的方式。

该程序对于二输入单输出模糊控制器的设计都是适用的。

五、心得与体会
通过此次实验的编程,我对二维模糊控制器的设计流程以及其计算原理有了更深的印象。

设计一个MA TLAB程序,我觉得需要考虑的因素主要有时间复杂度、空间开销以及程序的通用性等。

在针对一个问题进行编程时,好的思维习惯是能够尽量地将这一个问题抽象成一类问题,而针对这一类问题编程。

最后根据实际的问题综合考虑各个因素编写出最终的程序。

而且随着经验的不断增加,我们考虑问题就会变得越来越全面。

相关文档
最新文档