主要内容

在命令行构建模糊系统

您可以在Matlab®命令行构建模糊推理系统(FIS)。该方法是交互式设计FIS的替代方案模糊逻辑设计师

这个例子向您展示了如何创建Mamdani模糊推理系统。在创建Mamdani FIS时,所使用的方法也适用于创建Sugeno系统。

在命令行下的问题

为了演示用于创建和查看模糊推理系统的命令行功能,此示例使用Tipper FIS。

fis = readfis ('tipper.fis');

此命令返回一个mamfis包含模糊系统属性的对象。对于Sugeno系统,此命令返回aSugfis.对象。

您可以使用点表示法访问FIS属性。例如,查看模糊系统的输入。

金融中间人。输入
详细信息:Name Range MembershipFunctions ________________ ___________________ 1 "service" 0 10 {1x3 fismf} 2 "food" 0 10 {1x2 fismf}

要设置模糊系统的属性,请使用点表示法。例如,设置FIS的名称。

金融中间人。Name =“小费”

FIS对象

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

  • Fisvar.对象代表输入和输出变量。

  • fismf对象表示每个输入和输出变量中的成员函数。

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

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

金融中间人
fis = mamfis with properties: Name: " gratity " AndMethod: "min" OrMethod: "max" implationmethod: "min" AggregationMethod: "max" DefuzzificationMethod: "centroid" Inputs: [1x2 fisvar] Outputs: [1x1 fisvar] Rules: [1x3 fisrule] DisableStructuralChecks: 0参数优化见gettunlessettings方法。

您可以使用点表示法查看FIS对象中对象中的对象的属性。例如,查看Fisvar.第一个输入变量的对象。

fis.Inputs (1)
ANS = FISVAR具有属性:名称:“服务”范围:[0 10]隶属函数:[1x3 Fismf]

此外,查看此变量的隶属函数。

fis.Inputs (1) .MembershipFunctions
ans = 1x3具有属性的fismf数组:类型参数名称详细信息:名称类型参数___________ _________ __________ 1 "poor" "gaussmf" 1.5 0 2 "good" "gaussmf" 1.5 5 3 "excellent" "gaussmf" 1.5 10

系统显示功能

要从命令行获取模糊系统的高级视图,请使用plotfisPlotmf.,gensurf功能。plotfis将整个系统显示为框图,如图所示模糊逻辑设计师

plotfis (fis)

图中包含4个轴。axis 1包含3个类型为line的对象。axis 2包含2个类型为line的对象。axis 3包含3个类型为line的对象。Axes 4包含3个类型为text的对象。

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

Plotmf(FIS,“输入”1)

图包含轴。轴包含6个类型的类型线,文本。

类似地,要查看第一个输出的成员函数,输入:

Plotmf(FIS,“输出”1)

图包含轴。轴包含6个类型的类型线,文本。

Plotmf.不支持查看Suge金宝appno系统的输出隶属函数。

查看模糊系统的规则,输入:

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

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

Gensurf(FIS)

图包含轴。轴包含类型表面的物体。

建立模糊推理系统

作为使用模糊逻辑设计师应用程序,你可以完全从命令行构建FIS。

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

fis = mamfis (“名字”“蒂珀”);

使用使用的服务质量添加第一个输入变量addInput

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

为每个服务质量级别添加成员函数addMF.在这种情况下,使用高斯隶属函数。有关高斯隶属度函数属性的更多信息,请参见gaussmf

fis = addmf(fis,“服务”“高斯”,[1.5 0],“名字”“贫穷的”);fis = addmf(fis,“服务”“高斯”,[1.5 5],“名字”“好”);fis = addmf(fis,“服务”“高斯”,[1.5 10],“名字”“优秀”);

为食品质量添加第二个输入变量,并添加两个梯形成员函数。有关梯形隶属函数的信息,请参见trapmf

fis = addInput(fis,[0 10],“名字”“食物”);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 2;2 0 2 1 1;3 2 3 1 2];

将规则添加到FIS中。

ruleList fis = addRule (fis);

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

创建模糊推理系统。

fis = mamfis (“名字”“蒂珀”);

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

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

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

fis.inputs(1).MembershipFunctions(1)= Fismf;FIS.INPUTS(1).membershipfunctions(1).name =“贫穷的”;fis.Inputs (1) .MembershipFunctions(1)。类型=“高斯”;fis.inputs(1).membershipfunctions(1).Parameters = [1.5 0];fis.inputs(1).MembershipFunctions(2)= Fismf;FIS.INPUTS(1).MEMBERSHIPFUNCTIONS(2).name =“好”;.MembershipFunctions fis.Inputs(1)(2)。类型=“高斯”;fis.inputs(1).MembershipFunctions(2).Parameters = [1.5 5];fis.inputs(1).MembershipFunctions(3)= Fismf;FIS.INPUTS(1).MEMBERSHIPFUNCTIONS(3).name =“优秀”;FIS.INPUTS(1).membershipfunctions(3).type =“高斯”;fis.Inputs (1) .MembershipFunctions(3)。参数= [1.5 10];

添加并配置第二个输入变量。对于此变量,在创建时指定名称和范围Fisvar.对象。

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

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

fis.inputs(2).MembershipFunctions(1)= Fismf(“trapmf”,[ -  2 0 1 3],...“名字”“馊”);fis.inputs(2).MembershipFunctions(2)= Fismf(“trapmf”,[7 9 10 12],...“名字”“美味”);

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

if (1) = [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对象使用数值,必须指定输入变量的数量。

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

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

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

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

评估模糊推理系统

为了评估一个给定输入组合的模糊系统的输出,使用evalfis命令。例如,评估金融中间人使用的输入变量值12

[1 - 2] evalfis (fis)
ANS = 5.5586.

您还可以使用每行代表一个输入组合的数组来评估多个输入组合。

输入= [3 5;2 7;3 1];evalfis(FIS,投入)
ans =.3×112.2184 7.7885 8.9547

另请参阅

|||||

相关的话题