当你建立一个模糊推理系统时,如模糊推断过程,您可以用自定义函数替换内置的成员关系函数、推断函数或两者。控件中的自定义函数构建模糊推理系统模糊逻辑设计器应用程序。
使用自定义功能构建模糊推理系统模糊逻辑设计器应用程序:
打开模糊逻辑设计器.在Matlab.®命令行,输入以下命令。
fuzzyLogicDesigner
指定模糊系统的输入和输出的数量,如图所示模糊逻辑设计器.
创建自定义成员关系函数,并用它们替换内置成员关系函数,如指定自定义成员资格函数.
隶属度函数定义如何将输入空间中的每个点映射到介于0和1之间的隶属度值。
使用规则编辑器创建规则,如下所述规则编辑器.
规则定义输入和输出之间的逻辑关系。
创建自定义推理功能,并使用它们替换内置推断功能,如图所示指定自定义推理函数.
推理方法包括与、或、蕴涵、聚合和去模糊化方法。此操作生成模糊系统的输出值。
下图显示了内置的推翻问题示例含义,聚集和去模糊化函数被自定义函数替换,海关
,customagg
, 和customdefuzz
,分别。
选择看法>表面如中所述,在曲面查看器中查看模糊推理系统的输出曲面查看器.
您可以创建自定义成员函数,并在模糊推理过程中使用它们。这些函数的值必须介于0和1之间。有关成员函数属性的详细信息,请参阅会员职能.
要创建自定义成员函数,并替换内置的成员函数:
创建MATLAB函数,并将其保存在您当前的工作文件夹中。
要了解如何创建MATLAB函数,请参阅脚本与函数.
下面的代码是一个多步骤自定义成员函数的示例,Custmf1.
,这取决于八个参数之间的关系0
和10.
.
%函数生成多步骤自定义成员资格函数%使用8个参数的输入参数x功能out=custmf1(x,参数)为i = 1:长度(x)如果x(i)埃尔塞夫X (i) < params(2) y(i) = params(2);埃尔塞夫X (i) < params(3) y(i) = params(3);埃尔塞夫x(i)<参数(4)y(i)=参数(4);埃尔塞夫x(i) 埃尔塞夫X (i) < params(6) y(i) = params(6);埃尔塞夫x(i) 埃尔塞夫x(i) 其他的y(i)=0;结束结束= 0.1 * y ';%缩放输出到0到1之间。结束
打开模糊逻辑设计器应用程序。
fuzzyLogicDesigner
模糊逻辑设计器打开默认的FIS名称,无标题
,并包含一个输入,input1,和一个输出,输出1.
在模糊逻辑设计器, 选择编辑>会员职能打开成员函数编辑器。
三个三角形的隶属函数input1默认情况下显示。
要在成员函数编辑器中将默认成员函数替换为自定义函数:
选择编辑>删除所有MFs删除的默认成员资格函数的步骤input1.
选择编辑>添加自定义MF打开“自定义成员资格函数”对话框。
要指定自定义函数,请在“自定义成员资格函数”对话框中:
在里面MF名称字段,为自定义成员身份函数指定名称。对于此示例,请使用名称customMF1
请注意
添加其他自定义会员函数时,请指定其他不同MF名称对于每个功能。
在里面M文件函数名称字段,指定自定义成员函数文件的名称。
在里面参数表,指定参数向量。在本例中使用向量[0 1 2 4 6 8 9 10]
.
这些值决定成员函数的形状和位置,使用这些参数值对函数进行评估。
请注意
参数矢量的长度必须大于或等于自定义成员函数中的参数数。
使用Custmf1.
示例,自定义成员函数对话框如下图所示。
点击行添加自定义成员函数。
指定这两者范围和显示范围成为[0 10]
以匹配自定义成员函数的范围。
成员关系函数编辑器显示自定义成员关系函数图。
此操作还将自定义成员身份函数添加到规则查看器中,并使其可用于为模糊推断过程创建规则。要在规则查看器中查看自定义函数,请选择编辑>规则在两者模糊逻辑设计器或成员资格函数编辑器。
添加自定义成员函数输出1,在成员函数编辑器中选择它,并重复步骤4和5。
您还可以在MATLAB命令行的FIS中添加自定义成员身份函数。例如,添加Custmf1.
对于第一个输入变量,input1
FIS,myFIS
,并命名它customMF1
,输入以下内容:
myfis = addmf(myfis,“input1”,“custmf1”,[0 1 2 4 6 8 9 10],“名字”,“custommf1”);
您可以用自定义函数替换内置的AND、OR、隐含、聚合和解模糊推理方法。创建自定义推理函数后,将其保存在当前工作文件夹中。要学习如何使用自定义推理函数建立模糊系统,请参阅在模糊逻辑设计器中使用自定义函数建立模糊推理系统部分。
创建和指定用于构建模糊推理系统的功能的指南将在以下章节中描述。
自定义AND和OR推理函数必须在矩阵上按列操作,方式与MATLAB函数相同最大限度
,闵
, 要么戳
.
对于行向量或列向量x
,分钟(x)
返回最小元素。
x=[1234];最小值(x)
ans = 1
对于矩阵x
,分钟(x)
返回包含每列最小元素的行向量。
X = [1 2 3 4;5 6 7 8;9 10 11 12];分钟(x)
答案:1 2 3 4
分钟(x)
作用于第一个非单元素维度。
功能最小(x,y)
返回与尺寸相同的数组x
和y
从最小的元素x
要么y
.输入参数中的任何一个都可以是标量。函数如最大限度
, 和戳
以类似的方式操作。
在工具箱中,AND隐含方法执行一个元素一个元素的矩阵运算,类似于MATLAB函数最小(x,y)
.
a=[12;3 4]; b=[2;2 2]; 最小值(a,b)
Ans = 1 2 2 2
OR隐含方法执行一个元素一个元素的矩阵运算,类似于MATLAB函数max (x, y)
.
自定义隐含函数必须以与MATLAB函数相同的方式操作最大限度
,闵
, 要么戳
. 您的自定义蕴涵函数必须是T-norm模糊交叉操作。有关更多信息,请参阅额外的模糊运营商.
隐含函数必须支持一个或两个输入,因为软件以两种方式调用该函金宝app数:
使用所有规则的射击强度和相应的输出隶属函数计算输出模糊集值。在这种情况下,软件使用两个输入调用隐含函数,类似于以下示例:
ImplAls = ComporicImp(W,Outputmf)
w
-多个规则的射击强度,指定为NR.-借-ns.矩阵。在这里NR.是多少规则和ns.为输出成员函数的样本数。
w (:, j) = w (: 1)
总的来说j.w(i,1)
是火种的火力我TH.规则。
outputmf.
-输出成员函数值,指定为NR.-借-ns.矩阵。在这里NR.是多少规则和ns.为输出成员函数的样本数。
outputmf(我,:)
包含我TH.输出成员函数。
对给定的样本,利用单个规则的烧成强度和相应的输出隶属度函数计算输出模糊值。在这种情况下,软件使用一个输入调用隐含函数,类似于下面的示例:
Impval = customimp([w outputmf])
w
和outputmf.
是表示给定样本的规则触发强度和相应输出成员函数值的标量值。
下面是一个带有二进制映射的有界积自定义蕴涵函数的例子 .[1]
功能y=自定义IMP(x1,x2)如果nargin == 1% x1假定为非空列向量或矩阵。minVal = 0(1、大小(x1, 2));y = y =(1,尺寸(x1,2));为i = 1:尺寸(x1,1)y = max(minval,sum([y; x1(i,i:)]) - 1);结束其他的%假设x1和x2为非空矩阵。minVal = 0(1、大小(x1, 2));y = 0(大小(x1));为i=1:size(x1,1)y(i,:)=max(minVal,sum([x1(i,:));x2(i,:)]-1);结束结束结束
请注意
Sugeno类型系统不支持自定义隐含函数。金宝app
自定义聚合函数的操作方式必须与MATLAB函数相同最大限度
,闵
, 要么戳
而且必须是形式y = customagg(x)
. 您的自定义蕴涵函数必须是T-锥形(年代-norm)模糊交叉口操作。有关更多信息,请参阅额外的模糊运营商.
x是一个NV.-借-NR.矩阵,它是每个规则的隐含方法返回的截断输出函数的列表。NV.是输出变量的数量,以及NR.是规则的数量。聚合方法的输出是每个输出变量的一个模糊集。
下面是一个带有二进制映射的有界和自定义聚合函数的示例 .[1]
功能y = customagg(x) maxVal = ones(1,size(x,2));y = 0(1、尺寸(x, 2));为i = 1:size(x,1) y = min(maxVal,sum([y;x(i,)]));结束结束
请注意
Sugeno类型的系统不支持自定义聚合函数。金宝app
自定义Defuzzzification函数必须是表单y = customdefuzz(x,ymf)
哪里x
是隶属度函数输入范围中的值向量,以及ymf
包含每个成员关系函数的值x
价值。
以下是自定义解模糊功能的示例:
功能defuzzfun=customdefuzz(x,ymf)总面积=sum(ymf);defuzzfun=总和(ymf.*x)/总面积;结束
请注意
Sugeno型系统不支持自定义除霜功能。金宝app
创建并保存自定义推理函数后,可以在模糊推理系统中的命令行或使用模糊逻辑设计器.
指定自定义推理功能模糊逻辑设计器,使用以下步骤。
请注意
为了指定自定义推理功能模糊逻辑设计器,首先必须将至少一个规则添加到您的FIS中。
在左下方的面板模糊逻辑设计器, 选择习俗
从与要为其指定自定义函数的推理方法对应的下拉菜单中。
这样做会打开一个对话框,您可以在其中指定自定义推理函数的名称。
在里面方法名字段,指定自定义推理功能的名称,然后单击行.
在构建模糊推理系统时,自定义函数代替内置函数。
要为其他推理方法指定自定义函数,请重复步骤1和2。
为FIS指定自定义推理函数(myFIS
)在MATLAB命令行中,将相应的FIS对象属性设置为推理函数名称。例如,要添加自定义项,请执行以下操作:
Defuzzzification方法,型
myFIS。DefuzzificationMethod =“customdefuzz”;
在哪里customdefuzz
是定制Defuzzzification函数的名称。
蕴涵方法,类型
myFIS。ImplicationMethod =“customilm”;
在哪里海关
是自定义含义函数的名称。
聚合方法,类型
myFIS。AggregationMethod =“customagg”;
在哪里customagg
是自定义聚合函数的名称。
对于2型模糊推理系统,可以指定自定义类型缩减函数。此函数的形式必须为y=客户TR(x,umf,lmf)
哪里x
是隶属函数输入范围中值的矢量。umf
和lmf
每一项的上、下成员函数是否各自的值x
价值。输出y
是一个针质的两个元素行矢量[cl,cR].
有关缩减类型的更多信息,请参阅2型模糊推理系统.
默认情况下,type-2 Sugeno系统只支持类型缩减的加权平均形金宝app式。下面的自定义类型约简函数实现了Sugeno系统类型约简的加权和形式。
功能Y = customtr(x,umf,ymf) Y = 0 (1,2);y (1) = (x。* umf)总和;y (2) = (x。* lmf)总和;结束
为FIS指定自定义类型缩减函数(myFIS
)在matlab命令行,类型
myFIS。DTypeReductionMethod =“customtr”;
在哪里CustomTr.
是定制Defuzzzification函数的名称。
您可以在生成代码的模糊推理系统中使用自定义函数。有关模糊系统的代码生成的更多信息,请参见部署模糊推理系统.
如果您对生成的代码使用NONDOUDE数据类型,则必须将数据类型从自定义函数的输入参数传播到输出参数。例如,以下自定义聚合函数维护数据类型x
在y
使用一个
和0
与之“喜欢”
论点。
功能y = customagg(x)maxval =α(1,尺寸(x,2),“喜欢”, x);y = 0(1、大小(x, 2),“喜欢”, x);为i = 1:size(x,1) y = min(maxVal,sum([y;x(i,)]));结束结束
有关编写支持C/ c++代码生成的函数的更多信息,请参见金宝app代码生成的MATLAB编程(MATLAB编码器).
[1] Mizumoto Masaharu。模糊连接词的图示,第二部分:补偿算子和自对偶算子的应用。模糊集与系统32,不。1(1989年8月):45-79。https://doi.org/10.1016/0165-0114(89)90087-0.