我是靠谱客的博主 火星上方盒,最近开发中收集的这篇文章主要介绍FIS学习——利用Matlab创建模糊推理系统ⅠFIS——利用Matlab创建模糊推理系统Ⅰ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

FIS——利用Matlab创建模糊推理系统Ⅰ

模糊推理是在很多地方都会用到一种方法,可以很好模拟人对于不确定事物的认识和判断,尤其是在模拟人的认识决策这方面,可以十分简洁的表达出来,可以说是人工智能的在很早的时候的表现。matlab中就有官方的工具包供我们使用,使用方法也很简单,这里简单概括一下。

这里来介绍一下matlab中fuzzy logic toolbox的使用方法。有关模糊推理的基础知识这里就不去详细介绍了,这里仅就相关代码操作方面给予总结介绍。更详细的了解,可以在matlab的help document中找到十分详细的介绍,本文就是对其的简要总结。

Fuzzy Logic Designer

通过Fuzzy Logic Designer应用程序创建和编辑模糊推理系统,是最简单直观的创建模糊推理系统的方式了,网络上这些教程很多。我这里也就简单说一下。

要打开Fuzzy Logic Designer,请在MATLAB提示符下键入以下命令:fuzzyLogicDesigner

Fuzzy Logic Designer将打开并显示一个模糊推理系统的图,其左侧为每个输入变量的名称,右侧为每个输出变量的名称,如下图所示。

在这里插入图片描述

整个界面很简单直观,是一个双输入单输出的结构,黄色区域为输入变量,蓝色区域为输出变量,双击这些区域可以进入输入(输出)的参数设置界面,如下。其中可以设置是变量的取值范围(range)、隶属度函数类型以及参数、或者更改隶属度函数数量。

白色区域是规则设置,用来编辑if-then逻辑规则

在这里插入图片描述
在这里插入图片描述

Import and Export Fuzzy Inference Systems

将模糊系统保存到文件时,将使用文件后缀保存该系统的ASCII文本FIS文件表示形式.fis。不要手动编辑**.fis**文件的内容。这样做会在加载文件时产生意外的结果。将模糊系统保存到MATLAB工作区时,您将创建一个变量,用作模糊系统的MATLAB对象。

Build Fuzzy Systems at the Command Line

利用FIS Designer创建模糊系统虽然很简单直观,但还是需要了解一下它根本的代码,才好!

我们用上面也用到的例子FIS-tipper,这个例子是matlab内置的一个fis

fis = readfis('tipper.fis');

可以使用fis.访问FIS属性。例如,查看模糊系统的input。

fis.Inputs
#ans = 
  1x2 fisvar array with properties:

    Name
    Range
    MembershipFunctions

  Details:
           Name        Range     MembershipFunctions
         _________    _______    ___________________

    1    "service"    0    10        {1x3 fismf}    
    2    "food"       0    10        {1x2 fismf}

更进一步的理解,其实设计的整个模糊推理系统,无论使用应用程序创建还是代码命令创建,其实在matlab中的数据结构就是一个对象,FIS object

这些对象包含所有模糊推理系统信息,包括变量名称,隶属函数定义和模糊推理方法。每个FIS本身都是对象的层次结构。在模糊系统中使用以下对象:

  • fisvar 对象代表输入和输出变量。
  • fismf 对象代表每个输入和输出变量中的隶属函数。
  • fisrule 对象表示将输入映射到输出的模糊规则。

通过直接列出其属性来查看FIS的所有信息。

fis
#fis = 
  mamfis with properties:

                       Name: "gratuity"
                  AndMethod: "min"
                   OrMethod: "max"
          ImplicationMethod: "min"
          AggregationMethod: "max"
      DefuzzificationMethod: "centroid"
                     Inputs: [1x2 fisvar]
                    Outputs: [1x1 fisvar]
                      Rules: [1x3 fisrule]
    DisableStructuralChecks: 0

还可以使用plotfisplotmfgensurf功能。plotfis将整个系统显示为框图,就和Fuzzy Logic Designer中所显示的图一致。

plotfis(fis) #整个系统流程图
plotmf(fis,'input',1)  #输入量的隶属度函数
plotmf(fis,'output',1)  #输出的隶属度函数
fis.Rules      #模糊规则if-then
gensurf(fis)   #输出三维图像

现在说下怎么新建一个FIS object,下面是输入输出变量以及隶属度函数

fis = mamfis('Name',"tipper");

#添加第一个输入变量,论域,高斯函数(方差,均值)
fis = addInput(fis,[0 10],'Name',"service");
fis = addMF(fis,"service","gaussmf",[1.5 0],'Name',"poor");
fis = addMF(fis,"service","gaussmf",[1.5 5],'Name',"good");
fis = addMF(fis,"service","gaussmf",[1.5 10],'Name',"excellent");

#Add the second input variable for the food quality, 梯形隶属度函数
fis = addInput(fis,[0 10],'Name',"food");
fis = addMF(fis,"food","trapmf",[-2 0 1 3],'Name',"rancid");
fis = addMF(fis,"food","trapmf",[7 9 10 12],'Name',"delicious");

#Add the output variable for the tip, 三角隶属度函数
fis = addOutput(fis,[0 30],'Name',"tip");
fis = addMF(fis,"tip","trimf",[0 5 10],'Name',"cheap");
fis = addMF(fis,"tip","trimf",[10 15 20],'Name',"average");
fis = addMF(fis,"tip","trimf",[20 25 30],'Name',"generous");

接下来介绍一下模糊规则是如何定义的,是以一个矩阵的形式进行定义,以tipper.fis中的规则为例介绍一下。

tipper的规则如下:

  1. If (service is poor) or (food is rancid), then (tip is cheap).
  2. If (service is good), then (tip is average).
  3. If (service is excellent) or (food is delicious), then (tip is generous).

矩阵每一列的含义如下:

  • Column 1 - Index of membership function for first input
  • Column 2 - Index of membership function for second input
  • Column 3 - Index of membership function for output
  • Column 4 - Rule weight (from 0 to 1)
  • Column 5 - Fuzzy operator (1 for AND, 2 for OR)

可以对应到3×5的矩阵

ruleList = [1 1 1 1 2;
            2 0 2 1 1;
            3 2 3 1 2];

fis = addRule(fis,ruleList);

Evaluate Fuzzy Inference System 结果输出

evalfis(fis,[1 2])
ans = 5.5586

inputs = [3 5;
          2 7;
          3 1];
evalfis(fis,inputs)
ans = 3×1

   12.2184
    7.7885
    8.9547

参数标定

对于FIS中隶属度函数的确定或是模糊规则if-then的确定,一般都是凭借设计人员的经验来确定这些参数,参数包括隶属度函数的类型,函数中的参数,规则的确定。但人的经验在模糊的问题上起到的作用很小,很难去确定系统的准确性。

因此,有许多参数标定的方法可以被使用,这方面的论文也有蛮多。一般都是利用大量的数据集去训练模型,让模型学习到一个最佳的参数集合状态。还有一种就是在没有输入输出训练数据集的时候,自定义cost函数,通过评估输出的cost,来优化参数。

这一部分内容留到下一部分详细说一下。

参考资料:

[1]matlab help document

https://www.mathworks.com/help/fuzzy/what-is-fuzzy-logic.html

最后

以上就是火星上方盒为你收集整理的FIS学习——利用Matlab创建模糊推理系统ⅠFIS——利用Matlab创建模糊推理系统Ⅰ的全部内容,希望文章能够帮你解决FIS学习——利用Matlab创建模糊推理系统ⅠFIS——利用Matlab创建模糊推理系统Ⅰ所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部