主要内容

在命令行构建模糊系统

您可以在MATLAB®命令行构建一个模糊推理系统(FIS)。这种方法是交互式设计FIS使用的另一种方法模糊逻辑设计器.有关交互式构建FIS的示例,请参见使用模糊逻辑设计器构建模糊系统

为了演示用于创建和查看模糊推理系统的命令行功能,本示例使用中定义的提示问题的解决方案模糊与非模糊逻辑.对于这个问题,我们用以下三个规则来定义给小费行为。

  1. 如果服务很差或者食物变质了,那么小费就很便宜。

  2. 如果服务很好,那么小费就一般了。

  3. 如果服务很好或者食物很美味,那么小费就会很慷慨。

虽然这个示例创建了一个type-1 Mamdani FIS,但使用的一般方法也适用于创建type-2和Sugeno系统。有关不同类型的模糊系统的更多信息,请参见Mamdani和Sugeno模糊推理系统而且2型模糊推理系统

FIS对象

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

  • fisvar对象同时表示输入变量和输出变量。

  • fismf对象表示每个输入和输出变量中的成员函数。2型模糊系统的使用fismftype2对象来表示成员关系函数。

  • fisrule对象表示将输入映射到输出的模糊规则。

加载FIS。

Fis = readfis(“tipper.fis”);

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

金融中间人
fis = mamfis with properties: Name: "tipper" AndMethod: "min" OrMethod: "max" ImplicationMethod: "min" AggregationMethod: "max" DefuzzificationMethod: "centroid" DisableStructuralChecks: 0输入:[1x2 fisvar]输出:[1x1 fisvar]规则:[1x3 fisrule]参见' gettuntesettings '方法进行参数优化。

可以使用点表示法访问FIS对象内对象的属性。例如,查看fisvar对象作为第一个输入变量。

fis.Inputs (1)
名称:"service"范围:[0 10]MembershipFunctions: [1x3 fismf]

另外,查看此变量的成员函数。

fis.Inputs (1) .MembershipFunctions
类型参数名称详细信息:名称类型参数___________ _________ __________ 1 "poor" "gaussmf" 1.5 0 2 "good" "gaussmf" 1.5 5 3 "excellent" "gaussmf" 1.5 10

系统显示功能

要从命令行获得模糊系统的高级视图,请使用plotfisplotmf,gensurf功能。plotfis将整个系统显示为框图。

plotfis (fis)

图中包含4个轴对象。Axes对象1包含3个line类型的对象。坐标轴对象2包含2个line类型的对象。坐标轴对象3包含3个line类型的对象。Axes对象4包含一个text类型的对象。

plotmf函数绘制与给定变量相关的所有成员函数。例如,查看第一个输入变量的成员函数。

plotmf (fis,“输入”,1)

图中包含一个轴对象。axis对象包含6个类型为line, text的对象。

类似地,查看第一个输出变量的成员函数。

plotmf (fis,“输出”,1)

图中包含一个轴对象。axis对象包含6个类型为line, text的对象。

plotmf不支持查看Suge金宝appno系统的输出成员函数。

gensurf函数为任何一个或两个输入变量绘制FIS的输出。

gensurf (fis)

图中包含一个轴对象。axis对象包含一个surface类型的对象。

查看模糊系统的规则。

金融中间人。规则
ans = 1 x3 fisrule数组属性:前期顺向体重连接细节描述:描述  __________________________________________________________ 1”服务= =差= = |食品酸败= >提示=廉价(1)”2 "服务==好=>小费=平均(1)"服务= |美食=美味=>小费=慷慨(1)

建立模糊推理系统

作为使用的替代模糊逻辑设计器app,你可以完全从命令行构建一个FIS。

首先,创建一个Mamdani FIS,并指定它的名称。

Fis = mamfis(“名称”“蒂珀”);

为服务和食物质量添加输入变量。

fis = addInput(fis,[0 10],“名称”“服务”);fis = addInput(fis,[0 10],“名称”“食物”);

使用高斯隶属函数为每个服务质量级别添加隶属函数。有关高斯隶属函数的更多信息,请参见gaussmf

fis = addMF(fis,“服务”“gaussmf”1.5 [0],“名称”“穷”);fis = addMF(fis,“服务”“gaussmf”(1.5 - 5),“名称”“好”);fis = addMF(fis,“服务”“gaussmf”1.5 [10],“名称”“优秀”);

使用梯形隶属函数为每个食品质量级别添加隶属函数。有关梯形隶属函数的信息,请参见trapmf

fis = addMF(fis,“食物”“trapmf”,[-2 0 1 3],“名称”“讨厌的”);fis = addMF(fis,“食物”“trapmf”,[7 9 10 12],“名称”“美味”);

为尖端添加输出变量,并为尖端级别添加三个三角形成员函数。有关三角隶属函数的更多信息,请参见trimf

fis = addOutput(fis,[0 30],“名称”“小费”);fis = addMF(fis,“小费”“trimf”,[0 5 10],“名称”“便宜”);fis = addMF(fis,“小费”“trimf”,[10 15 20],“名称”“平均”);fis = addMF(fis,“小费”“trimf”,[20 25 30],“名称”“慷慨”);

为FIS指定以下三条规则作为数字数组。

  1. 如果(服务差)或(食物发臭),那么(小费就便宜了)。

  2. 如果(服务很好),那么(小费也是一般的)。

  3. 如果(服务很好)或(食物可口),那么(小费也很慷慨)。

数组的每一行包含如下格式的一条规则。

  • 第1列-第一次输入的隶属度函数索引

  • 第2列-第二次输入的隶属度函数索引

  • 列3 -输出的隶属函数索引

  • 第4列-规则权重(来自01

  • 第5列-模糊算子(1为,2或)

对于隶属度函数指数,使用负值指示NOT条件。有关模糊规则规范的更多信息,请参见addRule

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

将规则添加到FIS中。

fis = addRule(fis,ruleList);

或者,您可以使用点表示法和的组合来创建模糊推理系统fisvarfismf,fisrule对象。对于大多数应用程序来说,这种方法不是一个好的实践。但是,当应用程序在构造和修改FIS时需要更大的灵活性时,可以使用这种方法。

创建模糊推理系统。

Fis = mamfis(“名称”“蒂珀”);

添加并配置第一个输入变量。在本例中,创建一个默认值fisvar对象并使用点表示法指定其属性。

fisvar . input (1) = fisvar;fis.Inputs(1)。Name =“服务”;fis.Inputs(1)。Range = [0 10];

定义第一个输入变量的隶属度函数。对于每个MF,创建一个fismf对象,并使用点表示法设置属性。

fismf . inputs (1).MembershipFunctions(1) = fismf;fis.Inputs (1) .MembershipFunctions(1)。Name =“穷”;fis.Inputs (1) .MembershipFunctions(1)。类型=“gaussmf”;fis.Inputs (1) .MembershipFunctions(1)。参数= [1.5 0];fismf . inputs (1).MembershipFunctions(2) = fismf;.MembershipFunctions fis.Inputs(1)(2)。Name =“好”;.MembershipFunctions fis.Inputs(1)(2)。类型=“gaussmf”;.MembershipFunctions fis.Inputs(1)(2)。参数= [1.5 5];fismf . inputs (1).MembershipFunctions(3) = fismf;fis.Inputs (1) .MembershipFunctions(3)。Name =“优秀”;fis.Inputs (1) .MembershipFunctions(3)。类型=“gaussmf”;fis.Inputs (1) .MembershipFunctions(3)。参数= [1.5 10];

添加并配置第二个输入变量。类时,为此变量指定名称和范围fisvar对象。

fis. input (2) = fisvar([0 10],“名称”“食物”);

为第二个输入指定隶属度函数。类时,为每个MF指定名称、类型和参数fismf对象。

fismf . inputs (2).MembershipFunctions(1) = fismf(“trapmf”,[-2 0 1 3],...“名称”“讨厌的”);fismf . inputs (2).MembershipFunctions(2) = fismf(“trapmf”,[7 9 10 12],...“名称”“美味”);

类似地,添加并配置输出变量及其成员函数。

fisvar . outputs (1) = fisvar([0 30],“名称”“小费”);

在本例中,使用向量指定输出成员函数fismf对象。

Mf1 = fismf(“trimf”,[0 5 10],“名称”“便宜”);Mf2 = fismf(“trimf”,[10 15 20],“名称”“平均”);Mf3 = fismf(“trimf”,[20 25 30],“名称”“慷慨”);fis.Outputs(1)。MembershipFunctions = [mf1 mf2 mf3];

为模糊系统创建规则。为每个规则创建一个fisrule对象。然后,使用这些对象的向量指定规则。当创建fisrule对象使用数值时,必须指定输入变量的数目。

Rule1 = fisrule([1 1 1 1 2],2);Rule2 = fisrule([2 0 2 1 1],2);Rule3 = fisrule([3 2 3 1 2],2);规则= [rule1 rule2 rule3];

在将规则添加到模糊系统之前,必须使用FIS对象中的数据更新它们。方法更新规则更新函数,并将其添加到模糊系统中。

规则=更新(规则,fis);金融中间人。规则=规则;

在构造模糊系统时,还可以指定自定义隶属函数和推断函数。有关更多信息,请参见使用自定义函数构建模糊系统

评价模糊推理系统

为了评估一个给定输入组合的模糊系统的输出,使用evalfis函数。例如,evaluate金融中间人使用输入变量值1和2。

[1 - 2] evalfis (fis)
Ans = 5.5586

还可以使用数组计算多个输入组合,其中每行代表一个输入组合。

输入= [3 5;2 7;3 1];输入evalfis (fis)
ans =3×112.2184 7.7885 8.9547

另请参阅

|||||

相关的话题