在命令行上构建模糊系统
您可以在MATLAB®命令行构建一个模糊推理系统(FIS)。这种方法是交互式设计FIS的另一种选择模糊逻辑设计.有关交互式构建FIS的示例,请参见利用模糊逻辑设计器构建模糊系统.
为了演示用于创建和查看模糊推理系统的命令行功能,本示例使用了中定义的引爆问题的解决方案模糊与非模糊逻辑.针对这个问题,我们使用以下三条规则来定义小费行为。
如果服务很差或者食物很臭,那么小费是便宜的。
如果服务好,那么小费是一般的。
如果服务很好或食物很美味,那么小费是慷慨的。
虽然这个示例创建了一个1型Mamdani FIS,但使用的一般方法也适用于创建2型和Sugeno系统。有关不同类型模糊系统的更多信息,请参见Mamdani和Sugeno模糊推理系统而且二类模糊推理系统.
FIS对象
你表示模糊推理系统使用mamfis
,sugfis
,mamfistype2
,sugfistype2
对象。这些对象包含模糊推理系统的所有信息,包括变量名称、隶属函数定义和模糊推理方法。每个FIS本身是一个对象层次结构。以下对象在模糊系统中使用。
fisvar
对象表示输入和输出变量。fismf
对象表示每个输入和输出变量中的成员函数。2型模糊系统的使用fismftype2
对象来表示成员关系函数。fisrule
对象表示将输入映射到输出的模糊规则。
加载金融中间人。
fis = readfis (“tipper.fis”);
通过直接列出FIS的属性来查看其所有信息。
金融中间人
名称:" tippper " AndMethod: "min" OrMethod: "max" ImplicationMethod: "min" AggregationMethod: "max" DefuzzificationMethod: "centroid" DisableStructuralChecks: 0输入:[1x2 fisvar]输出:[1x1 fisvar]规则:[1x3 fisrule]参数优化请参见' gettablelesettings '方法。
您可以使用点表示法访问FIS对象中的对象的属性。例如,查看fisvar
对象作为第一个输入变量。
fis.Inputs (1)
Name: "service" Range: [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
系统显示功能
要从命令行获得模糊系统的高级视图,请使用plotfis
,plotmf
,gensurf
功能。plotfis
以框图的形式显示整个系统。
plotfis (fis)
的plotmf
函数绘制与给定变量相关的所有隶属函数。例如,查看第一个输入变量的成员函数。
plotmf (fis,“输入”, 1)
类似地,查看第一个输出变量的成员函数。
plotmf (fis,“输出”, 1)
plotmf
不支持查看Sugeno系统的输出隶属函数。
的gensurf
函数为任意一个或两个输入变量绘制FIS的输出图。
gensurf (fis)
查看模糊系统规则。
金融中间人。规则
ans = 1 x3 fisrule数组属性:前期顺向体重连接细节描述:描述 __________________________________________________________ 1”服务= =差= = |食品酸败= >提示=廉价(1)”“服务=好=>小费=平均(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列-输出隶属函数的索引
第4栏-规则权重(来自
0
来1
)第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)。类型=“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)。参数= [1.5 10];
添加并配置第二个输入变量。类时指定此变量的名称和范围fisvar
对象。
fisv . inputs (2) = fisvar([0 10],“名称”,“食物”);
为第二个输入指定成员函数。对象时指定名称、类型和参数fismf
对象。
fis.Inputs (2) .MembershipFunctions (1) = fismf (“trapmf”,[-2 0 1 3],...“名称”,“讨厌的”);fis.Inputs (2) .MembershipFunctions (2) = fismf (“trapmf”,[7 9 10 12],...“名称”,“美味”);
类似地,添加和配置输出变量及其成员函数。
fisv . 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
函数。例如,评估金融中间人
使用输入变量值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
另请参阅
mamfis
|sugfis
|plotfis
|plotmf
|gensurf
|evalfis