这里推荐搭建先看这个ppt,再看后面matlab的实现,这样你会很清晰,为了赚点积分,这里设置一下积分,抱歉大家了。

详细讲解模糊逻辑的ppt

如何使用模糊逻辑工具箱图形用户界面工具构建Mamdani系统

本示例说明了如何使用Fuzzy Logic Toolbox™图形用户界面(GUI)工具为小费示例构建模糊推理系统(FIS),如基本小费问题中所述。

您使用以下图形工具来构建,编辑和查看模糊推理系统:

  • Fuzzy Logic Designer可以处理系统的高级问题-多少个输入和输出变量?他们的名字是什么?

    Fuzzy Logic Toolbox软件不限制输入数量。但是,输入数量可能会受到机器可用内存的限制。如果输入的数量太大,或者隶属函数的数量太大,那么也可能难以使用其他工具来分析FIS。

  • 隶属函数编辑器(Membership Function Editor ),用于定义与每个变量关联的所有隶属函数的形状

  • 规则编辑器(Rule Editor )可编辑定义系统行为的规则列表。

  • 规则查看器(Rule Viewer)查看模糊推理图。使用此查看器作为诊断,以查看例如哪些规则处于活动状态,或各个隶属函数形状如何影响结果

  • Surface Viewer(Surface Viewer )可查看输出之一对任何一个或两个输入的依赖关系,即它生成并绘制系统的输出表面贴图。

这些GUI是动态链接的,因为您使用其中一个对FIS所做的更改会影响您在其他任何打开的GUI上看到的内容。例如,如果您在“成员资格功能编辑器”中更改成员资格功能的名称,则更改将反映在“规则编辑器”中显示的规则中。您可以使用图形用户界面来读取和写入两个变量的MATLAB ®工作区,并到一个文件(只读观众仍然可以交换与工作区地块并保存到一个文件)。您可以为任何给定系统打开其中的任何一个或全部,也可以为任意数量的FIS系统打开多个编辑器。

下图显示了FIS的主要组件和三个编辑器如何组合在一起。两位查看者检查了整个系统的行为。

除了这五个主要的GUI外,该工具箱还包括图形化Neuro-Fuzzy Designer,您可以使用它来构建和分析Sugeno型自适应神经模糊推理系统。

模糊逻辑工具箱GUI不支持使用数据构建FIS。如果要使用数据来构建FIS,请使用以下技术之一:

如果要使用MATLAB工作区变量,请使用命令行界面,而不要使用Fuzzy Logic Designer。有关示例,请参阅从头开始构建系统

基本小费问题

本示例基于美国的小费做法,使用了两输入单输出的小费问题

给定0到10之间的数字代表餐厅的服务质量(其中10表示出色),而另一个0到10之间的数字表示餐厅的服务质量(同样,10表示很好),那么应该怎么做?小费是?

起点是写下三个小费小法则:

  1. 如果服务差或食物腐烂,那么小费很便宜。

  2. 如果服务很好,那么小费是平均水平。

  3. 如果服务很好或食物很美味,那么小费就足够了。

假设平均小费是15%,慷慨小费是25%,便宜小费是5%。

曲线的数字和形状受当地传统,文化偏见等的影响,但是这三个规则通常是通用的。

既然您已经了解了规则并知道了输出的外观,那么就可以使用GUI工具为该决策过程构建模糊推理系统。

模糊逻辑设计器

模糊逻辑设计器显示有关模糊推理系统的信息。要打开模糊逻辑设计器,请在MATLAB提示符下键入以下命令:

fuzzyLogicDesigner

Fuzzy Logic Designer打开并显示一个模糊推理系统的图,其左侧为每个输入变量的名称,右侧为每个输出变量的名称,如下图所示。框中显示的示例隶属函数只是图标,并未描述隶属函数的实际形状。

图表下方是系统名称和使用的推理类型

在此示例中,您使用默认 Mamdani型推断。也可以使用另一种类型的推断,称为Sugeno类型的推断。请参阅什么是Sugeno型模糊推理?

在模糊逻辑设计器中:

  • 下拉列表使您可以修改模糊推理功能。

  • 当前变量区域显示为输入或输出变量,它的类型和默认范围的名称。

  • 底部的状态行显示有关最新操作的信息。

要从头构建基本技巧问题中描述的模糊推理系统,请在MATLAB提示符下键入以下命令:

fuzzyLogicDesigner

将打开通用的无标题模糊逻辑设计器,其中有一个输入input1和一个输出output1

提示    要使用存储在其中的预构建模糊推理系统打开Fuzzy Logic Designer tipper.fis,请输入

FuzzyLogicDesigner tipper

但是,如果加载预构建的系统,则不会构建规则或构造成员资格函数。

在此示例中,您将构建一个两输入一输出系统。服务食品这两个输入。一个输出是tip

要添加第二个输入变量并更改变量名称以反映这些名称:

  1. 选择编辑 > 添加变量 > 输入

    出现第二个标有input2的黄色框。

  2. 单击黄色框input1。此框以红色轮廓突出显示。

  3. input1service为编辑名称字段,然后按Enter

  4. 单击黄色框input2。此框以红色轮廓突出显示。

  5. input2food为编辑名称字段,然后按Enter

  6. 单击蓝色框output1

  7. output1tip编辑名称字段,然后按Enter

  8. 选择“ 文件” >“ 导出” >“ 到工作区”

          9.输入工作区变量名称tipper,然后单击“ 确定”

该图已更新,以反映输入和输出变量的新名称。现在,在工作空间中有一个名为的新变量tipper,其中包含有关该系统的所有信息。通过使用新名称保存到工作区,您还可以重命名整个系统。您的窗口如下图所示。

现在将推理选项留在左下角的默认位置。您已经输入了此特定GUI所需的所有信息。接下来,定义与每个变量关联的隶属函数。为此,打开会员功能编辑器。

您可以通过以下三种方式之一打开成员资格功能编辑器:

  • 在Fuzzy Logic Designer窗口中,选择Edit > Membership Functions

  • 在“模糊逻辑设计器”窗口中,双击名为tip的蓝色图标。

  • 在命令行中,输入mfedit

隶属函数编辑器

隶属度函数编辑器是使您可以显示和编辑与整个模糊推理系统的所有输入和输出变量关联的所有隶属度函数的工具。成员资格功能编辑器与模糊逻辑设计器共享一些功能,如下图所示。实际上,所有五个基本GUI工具都具有相似的菜单选项,状态行以及“ 帮助”和“ 关闭”按钮

当您打开成员资格函数编辑器以在工作空间中尚不存在的模糊推理系统上工作时,没有与使用Fuzzy Logic Designer定义的变量关联的成员资格函数。

隶属函数编辑器中图形区域的左上角是“变量面板”,可用于设置给定变量的隶属函数。

要设置与FIS的输入或输出变量关联的隶属函数,请单击该区域以选择一个FIS变量。

接下来,选择“ 编辑”下拉菜单,然后选择“ 添加MF”。。出现一个新窗口,该窗口允许您选择隶属函数类型和与所选变量关联的隶属函数数量。在窗口的右下角,是用于选择成员资格函数后可以更改其名称,类型和参数(形状)的控件。

当前变量的隶属函数显示在主图中。这些隶属函数可以通过两种方式进行操作。您可以首先使用鼠标选择与给定变量质量(例如,对于变量,服务而言较差)关联的特定隶属函数,然后从一侧到另一侧拖动隶属函数。此操作会影响给定变量与该隶属函数相关联的质量的数学描述。还可以通过以下方式标记所选的隶属函数以进行扩张或收缩:单击隶属函数上的小方形拖动点,然后用鼠标将函数向外侧拖动,进行扩张或向内拖动,用于收缩。此操作将更改与该成员资格功能关联的参数。

变量选项板下面是有关当前变量的类型和名称的一些信息。此区域中有一个文本字段,可让您更改当前变量范围的限制(论述的范围),而另一个文本框可让您设置当前变量的限制(对系统无实际影响)。

指定两个输入小费示例的隶属函数的过程tipper如下:

  1. 双击输入变量service以打开成员资格功能编辑器。

  2. 在隶属函数编辑器,进入[0 10]范围显示范围领域。

  3. 为输入变量创建隶属函数service   

  • ​​​​​​​ 选择“ 编辑” >“ 删除所有MF”以删除输入变量的默认隶属函数service

  • 选择“ 编辑” >“ 添加MF”以打开“成员资格功能”对话框。

  • 在“成员资格功能”对话框中,选择gaussmf“ MF类型”

  •  确认3已选择作为MF数量
  • 单击“ 确定”将三个高斯曲线添加到输入变量service

   4.重命名输入变量的隶属函数service,并指定其参数。

  1. 单击命名的曲线以mf1将其选中,然后在“ 当前成员关系函数”(单击MF进行选择)区域中指定以下字段:

    • 名称字段中,输入poor

    • 参数字段中,输入[1.5 0]

      参数的两个输入代表高斯曲线的标准偏差和中心。

      提示    要调整隶属函数的形状,请输入所需的参数或使用鼠标,如前所述。

  2. 单击命名的曲线以mf2将其选中,然后在“ 当前成员关系函数”(单击MF进行选择)区域中指定以下字段:

    • 名称字段中,输入good

    • 参数字段中,输入[1.5 5]

  3. 单击名为的曲线mf3,然后在“ 当前成员关系函数”(单击MF选择)区域中指定以下字段:

    Membership Function Editor窗口的外观类似于下图。

    • 名称字段中,输入excellent

    • 参数字段中,输入[1.5 10]

5.在“ FIS变量”区域中,单击输入变量food以将其选中。

6.输入[0 10]范围显示范围领域。

7.为输入变量创建隶属函数food

  1. 选择“ 编辑” >“ 删除所有MF”以删除输入变量的默认成员资格函数food

  2. 选择“ 编辑” >“ 添加MF”以打开“成员资格功能”对话框。

  3. 在“成员资格功能”对话框中,选择trapmf“ MF类型”

  4. 选择2微丝数下拉列表中。

  5. 单击“ 确定”将两个梯形曲线添加到输入变量food

8.重命名输入变量的隶属函数food,并指定其参数:

  1. 在“ FIS变量”区域中,单击输入变量food以将其选中。

  2. 单击名为的曲线mf1,然后在“ 当前成员关系函数”(单击MF选择)区域中指定以下字段:

    • 名称字段中,输入rancid

    • 参数字段中,输入[0 0 1 3]

                    3.单击命名的曲线以mf2将其选中,然后delicious 在“ 名称”字段中输入。

    如果需要,重置关联的参数。

9.单击输出变量tip以将其选中。

10.输入[0 30]范围显示范围字段以覆盖输出范围。

11.输入范围为0到10,但输出范围为5%到25%。

  1. 重命名输出变量的默认三角隶属函数tip,并指定其参数。

    成员资格功能编辑器的外观类似于下图。

    1. 单击命名的曲线以mf1将其选中,然后在“ 当前成员关系函数”(单击MF进行选择)区域中指定以下字段:

      • 名称字段中,输入cheap

      • 参数字段中,输入[0 5 10]

    2. 单击命名的曲线以mf2将其选中,然后在“ 当前成员关系函数”(单击MF进行选择)区域中指定以下字段:

      • 名称字段中,输入average

      • 参数字段中,输入[10 15 20]

    3. 单击命名的曲线以mf3将其选中,然后指定以下内容:

      • 名称字段中,输入generous

      • 参数字段中,输入[20 25 30]

现在已经对变量进行了命名,并且隶属函数具有适当的形状和名称,您可以输入规则。要调出规则编辑器,请转到“ 编辑”菜单,选择“规则”,或ruleedit在命令行中键入。

使用图形化的“规则编辑器”界面构造规则是不言而喻的。根据使用Fuzzy Logic Designer定义的输入和输出变量的描述,规则编辑器允许您自动构造规则语句。在GUI中,您可以:

  • 通过在每个输入和输出变量框中选择一个项目,选择一个Connection项目,然后单击Add Rule创建规则。您可以选择none将变量从给定规则中排除作为变量质量之一,并not在任何变量名称下进行选择以取消关联的质量。

  • 通过选择规则并单击“ 删除规则”删除规则

  • 通过更改变量框中的选择并单击“ 更改规则”来编辑规则

  • 通过在Weight0和之间输入所需的数字来指定规则的权。如果未指定重量,则假定为单位。1(1)

与“模糊逻辑设计器”和“隶属函数编辑器”中的类似,“规则编辑器”具有菜单栏和状态行。菜单项允许您使用五个基本的GUI工具打开,关闭,保存和编辑模糊系统。从菜单中,您还可以:

  • 通过选择选项 > 格式来设置显示格式

  • 通过选择选项 > 语言来设置语言

您可以通过单击“ 帮助”来访问有关规则编辑器的信息,然后使用“ 关闭”关闭 GUI 。

要在规则编辑器中插入第一条规则,请选择以下内容:

  • poor在可变服务下

  • rancid在可变食物下

  • 连接块中的单选按钮

  • cheap在输出变量下tip

然后,点击添加规则

产生的规则是

1.如果(服务质量差)或(食物腐烂),则(小费便宜)(1)

 

1. If (service is poor) or (food is rancid) then (tip is cheap) (1)

括号中的数字代表重量。

遵循类似的过程,将第二和第三条规则插入“规则编辑器”中,以获取

  1. 如果(服务不佳)或(食物很烂),那么(小费便宜)(1)

  2. 如果(服务很好),那么(小费是平均水平)(1)

  3. 如果(服务很好)或(食物很好吃),那么(小费很多)

If (service is poor) or (food is rancid) then (tip is cheap) (1)

If (service is good) then (tip is average) (1)

If (service is excellent) or (food is delicious) then (tip is generous) (1)

提示    要更改规则,请首先单击要更改的规则。接下来,对该规则进行所需的更改,然后单击“ 更改规则”。例如,将第一个规则更改为

1.如果(服务不差)或(食物不腐烂)则(小费不便宜)(1)

1. If (service not poor) or (food not rancid) then (tip is not cheap) (1)

选择每个变量下的not复选框,然后单击Change rule

“ 选项”菜单中的“ 格式”弹出菜单表示您正在查看规则的详细形式。尝试将其更改为。你会看见symbolic

1.(服务==差)| (食物==腐烂)=>(小费=便宜)(1)

1. (service==poor) | (food==rancid) => (tip=cheap) (1)

2.(服务==好)=>(技巧=平均)(1)

2. (service==good) => (tip=average) (1)

3.(服务==优秀)| (食物==美味)=>(小费=大量)(1)

3. (service==excellent) | (food==delicious) => (tip=generous) 

显示屏上并没有太大的区别,但是在语言上略有差异,因为它不依赖于ifthen之类的术语。如果将格式更改为索引格式,则会看到规则的压缩版本。

1 1,1(1):2
2 0,2(1):1
3 2,3(1):2

这是计算机处理的规则的版本。

  • 此结构中的第一列对应于输入变量。

  • 第二列对应于输出变量。

  • 第三列显示应用于每个规则的权重。

  • 第四列是表示这是OR(2)规则还是AND(1)规则的简写。

  • 前两列中的数字指的是隶属函数的索引号。

规则1的字面解释是“如果输入1是MF1(与输入1相关联的第一个隶属度函数),或者如果输入2是MF1,则输出1应该是MF1(与输出1相关联的第一个隶属度函数),权重为1。 。

符号格式不考虑术语ifthen等等。索引格式甚至不用理会变量的名称。显然,系统的功能并不取决于您对变量和隶属函数的命名方式。与往常一样,描述性地命名变量的要点是使系统更易于您解释。因此,除非您有特殊目的,否则继续使用冗长格式可能会更容易。

至此,模糊推理系统已被完全定义,因为变量,隶属函数和计算技巧所需的规则已经到位。现在,查看上一节末尾提供的模糊推理图,并验证所有内容均以您认为的方式运行。您可以使用Rule Viewer,这是我们将要研究的下一个GUI工具。从查看菜单中,选择规则

规则查看器显示整个模糊推理过程的路线图。它基于上一部分中描述的模糊推理图。您会看到一个包含10个绘图的单个图形窗口。图顶部的三个图表示第一个规则的前提和结果。每个规则是一行图,每列是一个变量。规则编号显示在每一行的左侧。您可以单击规则编号以在状态行中查看规则。

  • 图的前两列(六个黄色图)显示了前项或每个规则的if部分所引用的隶属函数。

  • 图表的第三列(三个蓝色图表)显示了每个规则的结果或随后部分引用的隶属函数。

    请注意,在food下方有一个空白的地块。这对应于第二条规则中none可变食物的特征。

  • 图的第三列中的第四图表示给定推理系统的总加权决策。

    该决定将取决于系统的输入值。经去模糊处理的输出在该图上显示为粗体垂直线。

变量及其当前值显示在列顶部。左下角有一个输入文本字段,您可以在其中输入特定的输入值。对于双输入系统,您将输入一个输入向量,[9 8]例如,然后按Enter。您也可以通过单击每个输入的三个图中的任何一个来调整这些输入值。这会将红色索引线水平移动到您单击的位置。或者,您也可以单击并拖动此行以更改输入值。当您释放该行时(或在手动指定输入之后),将执行新的计算,并且您可以看到整个模糊推理过程已完成:

  • 在左上图中,表示服务的索引线与隶属函数线“服务差”交叉之处决定了激活规则的程度。

  • 实际隶属度函数曲线下的黄色色块用于使模糊隶属度值在视觉上显而易见。

以这种方式相对于输入索引线指定每个变量的每个特征。如果遵循图顶部的规则1,则可以看到随之而来的“小费便宜”被截断的程度与(复合)先行词的程度完全相同-这是实际的暗示过程。聚合发生在第三列的下方,生成的聚合图显示在出现在图字段右下角的单个图中。去模糊的输出值由穿过聚合模糊集的粗线显示。

您可以使用向左向右向下向上移动图。菜单项允许您使用五个基本GUI工具中的任何一个来保存,打开或编辑模糊系统。

规则查看器使您可以立即解释整个模糊推理过程。规则查看器还显示某些隶属函数的形状如何影响整体结果。因为它绘制了每个规则的每个部分,所以对于特别大的系统来说可能变得笨拙,但是对于相对较少的输入和输出,它最多可以运行30条规则(取决于您为它分配的屏幕空间数量)以及多达6或7个变量。

规则查看器一次详细显示一次计算。从这个意义上讲,它代表了模糊推理系统的一种微观观点。如果要查看系统的整个输出表面(基于输入集的整个范围的输出集的整个范围),则需要打开Surface Viewer。该查看器是五个基本模糊逻辑工具箱GUI工具中的最后一个。要打开Surface Viewer,请从“ 视图”菜单中选择“ 表面 ” 。

打开Surface Viewer后,您会看到一条三维曲线,代表从食物和服务质量到小费金额的映射。由于此曲线表示两输入一输出情况,因此可以在一个图中看到整个映射。当我们整体上超出三个维度时,我们开始遇到显示结果的麻烦。

因此,表面查看器配备有下拉式菜单X(输入): Y(输入):Z(输出):可用来选择任何两个输入和用于绘制任何一个输出。在这些菜单下面是两个输入字段X网格:Y网格:您可以指定要包括的x轴和y轴网格线的数量。此功能使您可以使复杂问题的计算时间保持合理。

如果要创建更平滑的图,请使用“ 图点数”字段来指定在输入或输出范围内评估隶属函数的点数。默认情况下,此字段的值为101。

单击“ 评估”将启动计算,并在计算完成后生成图。要在查看曲面后更改x轴或y轴网格,请更改适当的输入字段,然后按Enter。将更新表面图以反映新的网格设置。

Surface Viewer具有一项特殊功能,在具有两个(或多个)输入和一个输出的情况下非常有用:您可以使用鼠标抓住轴并将其重新放置以获取数据的不同三维视图。

参考。输入字段用于系统需要的输入多于曲面映射的情况。您可以编辑此字段以显式设置未在曲面图中指定的输入。

假设您有一个四输入一输出系统,并且希望看到输出表面。Surface Viewer可以生成三维输出表面,其中任何两个输入都会变化,但是其中两个输入必须保持恒定,因为计算机监视器无法显示五维形状。在这种情况下,输入是一个四维向量,其中NaNs保留了变化的输入的位置,而数值表示那些保持固定的值。阿楠是IEEE ®的不是数字符号。

菜单项允许您使用五个基本的GUI工具打开,关闭,保存和编辑模糊系统。您可以通过单击“ 帮助”并使用“ 关闭”关闭 GUI来访问有关Surface Viewer的信息。

总结了每个主要GUI工具的快速介绍。对于小费问题,模糊系统的输出与您对服务到小费的模糊映射形状的最初想法相当吻合。事后看来,您可能会说:“为什么要打扰?我可以画一个快速查找表并在一小时前完成!” 但是,如果您有兴趣解决一整套类似的决策问题,那么模糊逻辑可以为解决方案提供适当的工具,因为它可以轻松快速地修改系统。

从GUI工具导入和导出

将模糊系统保存到文件时,将使用文件后缀保存该系统的ASCII文本FIS文件表示形式.fis。该文本文件可以编辑和修改,并且易于理解。将模糊系统保存到MATLAB工作区时,您正在创建一个变量(选择的名称),该变量充当MATLAB的MATLAB结构。FIS系统。FIS文件和FIS结构代表相同的系统。

注意    如果您不将FIS保存到文件中,而是仅将其保存到MATLAB工作区中,则无法将其恢复以在新的MATLAB会话中使用。

 
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐