您可以在MATLAB®命令行上构建一个模糊推理系统(FIS)。这种方法是交互式设计您的FIS使用的一种替代方法模糊逻辑设计。
这个例子向您展示了如何创建Mamdani模糊推理系统。在创建Mamdani FIS时,所使用的方法也适用于创建Sugeno系统。
为了演示用于创建和查看模糊推理系统的命令行功能,本示例使用了提示器FIS。
fis = readfis(“tipper.fis”);
该命令返回mamfis
对象,该对象包含模糊系统的属性。对于Sugeno系统,此命令返回asugfis
目的。
您可以使用点表示法访问FIS属性。例如,查看模糊系统的输入。
fis.inputs.
ANS = 1x2 FISVAR阵列具有属性:名称范围成员身份功能详细信息:名称范围成员身份功能_________ _______ __________________ 1“服务”0 10 {1x3 fismf} 2“食物”0 10 {1x2 fismf}
要设置模糊系统的属性,请使用点符号。例如,设置FIS的名称。
fis.name =“追悼”;
您代表了模糊推理系统使用mamfis
和sugfis
对象。这些对象包含所有模糊推理系统信息,包括变量名称,隶属函数定义和模糊推断方法。每个FIS都是物体的层次结构。在模糊系统中使用以下对象:
通过直接列出FIS的属性来查看它的所有信息。
FIS.
FIS = MAMFIS具有属性:名称:“小费”和方法:“min”ormethod:“max”amolicationmethod:“min”聚合方法:“max”defuzzificationmethod:“质心”输入:[1x2 fisvar]输出:[1x1 fisvar]规则:[1x3 fisrule] DisableStructuralChecks:0请参见“GetTunablyEtsing”参数优化方法。
可以使用点表示法查看FIS对象中的对象属性。例如,查看fisvar
对象的第一个输入变量。
FIS.INPUTS(1)
ans = fisvar with properties: Name: "service" Range: [0 10] MembershipFunctions: [1x3 fismf]
另外,查看此变量的成员关系函数。
fis.inputs(1).MembershipFunctions
ans = 1x3 fismf arrum与属性:类型参数名称详细信息:名称类型参数___________ ______________________ 1“差”“Gaussmf”1.5 0 2“良好”Gaussmf“1.5 5 3”优秀“Gaussmf”1.5 10
要从命令行获得模糊系统的高级视图,请使用Plotfis.
那plotmf
,Gensurf.
功能。Plotfis.
将整个系统显示为框图,如图所示模糊逻辑设计。
plotfis (fis)
这plotmf
函数绘制与给定变量关联的所有成员函数。例如,查看第一个输入变量的成员关系函数。
plotmf (fis,'输入',1)
类似地,要查看第一个输出的成员资格函数,请键入:
plotmf (fis,'输出',1)
plotmf
不支持查看Suge金宝appno系统的输出成员函数。
查看模糊系统的规则,输入:
fis.rules.
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,“服务”那“gaussmf”1.5 [0],'姓名'那“穷”);fis = addMF (fis,“服务”那“gaussmf”(1.5 - 5),'姓名'那“好”);fis = addMF (fis,“服务”那“gaussmf”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],'姓名'那“美味的”);
为提示添加输出变量,并添加三个三角成员关系函数。有关三角隶属函数的更多信息,请参见修剪
。
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列-输出成员函数的索引
第4栏-规则权重(来自0.
到1
的)
第5列-模糊算子(1
为,2
或)
对于隶属函数指标,使用负值表示不条件。有关模糊规则规范的更多信息,请参阅addrule.
。
规则列表= [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)。范围= [0 10];
定义第一个输入变量的隶属函数。对于每个MF,创建一个Fismf.
对象,并使用点表示法设置属性。
fis.Inputs (1) .MembershipFunctions (1) = fismf;fis.Inputs (1) .MembershipFunctions(1)。Name =“穷”;FIS.INPUTS(1).membershipfunctions(1).type =“gaussmf”;fis.Inputs (1) .MembershipFunctions(1)。参数= [1.5 0];fis.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];fis.Inputs (1) .MembershipFunctions (3) = fismf;fis.Inputs (1) .MembershipFunctions(3)。Name =“优秀”;fis.Inputs (1) .MembershipFunctions(3)。类型=“gaussmf”;fis.inputs(1).MembershipFunctions(3).Parameters = [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],......'姓名'那“美味的”);
同样,添加和配置输出变量及其成员资格函数。
fis.outputs(1)= fisvar([030],'姓名'那“提示”);
在本例中,使用的向量指定输出成员函数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.
目的。然后,使用这些对象的向量指定规则。创建A.Fisrule.
对象时,必须指定输入变量的数量。
rule([1 1 1 1 2],2);Rule2 = ([2 0 2 1 1],2);Rule3 = fisrule([3 2 3 1 2],2);= [rule1 rule2 rule3];
在将规则添加到模糊系统之前,必须使用FIS对象中的数据更新它们。使用该规则更新规则更新
功能,并将其添加模糊系统。
规则=更新(规则,FIS);fis.rules =规则;
在构造模糊系统时,您还可以指定自定义成员函数和推理功能。有关更多信息,请参阅使用自定义功能构建模糊系统。
为了评估一个给定输入组合的模糊系统的输出,使用evalfis.
命令。例如,评估FIS.
使用输入变量值1
和2
。
evalfis(FIS,[1 2])
ans = 5.5586
还可以使用数组计算多个输入组合,其中每一行表示一个输入组合。
输入= [3 5;2 7;3 1];输入evalfis (fis)
ans =3×112.2184 7.7885 8.9547
mamfis
|sugfis
|Plotfis.
|plotmf
|Gensurf.
|evalfis.