使用自定义函数构建模糊系统
在构建模糊推理系统(FIS)时,可以用自定义函数替换内置的隶属函数或推理函数。类中使用这些自定义函数创建FIS模糊逻辑设计器app和MATLAB®命令行。
有关创建FIS的详细信息,请参见使用模糊逻辑设计器构建模糊系统而且在命令行构建模糊系统.
定义自定义成员函数
您可以创建自定义成员函数,并在模糊推理过程中使用它们。这些函数的值必须在0和1之间。有关成员函数属性的详细信息,请参见隶属度函数.
创建自定义成员函数时,必须将其保存在当前工作文件夹或MATLAB路径中。然后,可以在命令行或中设计使用自定义成员关系函数的FIS模糊逻辑设计器应用程序。
下面是一个多步骤自定义成员函数的示例custmf1
,这取决于八个参数之间0
而且10
.
函数生成一个多步骤自定义成员函数%使用8个参数作为输入参数x函数Out = custmf1(x,params)为I = 1:长度如果X (i) <参数(1)y(i) =参数(1);elseifX (i) < params(2) y(i) = params(2);elseifX (i) < params(3) y(i) = params(3);elseifX (i) <参数(4)y(i) =参数(4);elseifX (i) <参数(5)y(i) =参数(5);elseifX (i) < params(6) y(i) = params(6);elseifX (i) < params(7) y(i) = params(7);elseifX (i) <= params(8) y(i) = params(8);其他的Y (i) = 0;结束结束将输出扩展到范围[0,1]。Out = 0.1*y';结束
使用模糊逻辑设计器指定自定义成员函数
控件设计FIS时使用自定义成员关系函数模糊逻辑设计器应用程序中,首先选择相应的变量系统浏览器.然后,在添加组件画廊,点击曼氏金融.
该应用程序将默认三角成员函数添加到所选变量。
在属性编辑器:
在范围字段,指定与成员函数的期望范围匹配的输入范围。
在的名字列时,为成员函数指定名称。
在类型列时,指定自定义成员关系函数的名称。
在参数列中,输入隶属度函数参数。
属性中的成员函数,以验证成员函数的外观系统浏览器打开会员功能编辑.
控件中自定义成员关系函数的参数会员功能编辑不支持。金宝app
定义自定义推理函数
根据所设计的FIS的类型,可以用自定义函数替换内置的AND、OR、蕴涵、聚合和去模糊化推理方法。对于每种类型的推断函数,下表列出了支持使用自定义函数的FIS对象。金宝app
推理函数 | 金宝app支持的FIS对象 |
---|---|
和 | 所有FIS对象 |
或 | |
含义 |
|
聚合 | |
去模糊化 | Type-1 Mamdani FIS |
Type-reduction |
|
创建自定义推理函数时,必须将其保存在当前工作文件夹或MATLAB路径中。然后,可以在命令行或中设计使用自定义推断函数的FIS模糊逻辑设计器应用程序。
创建自定义AND和OR函数
自定义与或推理函数必须以与MATLAB函数相同的方式在矩阵上按列操作马克斯
,最小值
,刺激
.例如:
对于行向量或列向量
x
,最小值
返回最小值元素。X = [1 2 3 4];分钟(x)
Ans = 1
对于一个矩阵
x
,最小值
返回包含每列中最小元素的行向量。X = [1 2 3 4;5 6 7 8;9 10 11 12];分钟(x)
Ans = 1 2 3 4
最小值
沿着第一个非单维度操作。对于两个数组,
x
而且y
,最小值
返回与较大的数组相同大小的数组x
或y
用最小的元素x
或y
.输入参数中的任何一个都可以是标量。X = [1 2;3 4];Y = [2 2;2 2];min (x, y)
Ans = 1 2 2 2
在模糊逻辑工具箱™软件中:
与推理函数执行一个逐个元素的矩阵操作,类似于命令
min (x, y)
.与命令类似,OR推断函数执行逐元素矩阵操作
max (x, y)
.
创建自定义含义函数
自定义蕴涵函数必须以与MATLAB函数相同的方式操作马克斯
,最小值
,刺激
.您的自定义隐含函数必须是T-范数模糊交叉运算。有关更多信息,请参见附加模糊算子.
隐含函数必须支持一个或两个输入,因为软件以两种方式调用函数金宝app。
利用所有规则的触发强度和相应的输出隶属度函数计算输出模糊集值。在这种情况下,软件使用如下两个输入调用隐含函数。
Impvals = customimp(w,outputmf)
w
-发射强度的多个规则,指定为Nr——- - - - - -N年代矩阵。在这里,Nr是多少规则和N年代是输出隶属度函数的样本数。W (:,j) = W (:,1)
对所有j.w(我,1)
是烧制的强度吗我规则。outputmf
-输出隶属函数值,指定为Nr——- - - - - -N年代矩阵。outputmf(我,:)
控件的数据我输出隶属函数。
对于给定的样本,使用单个规则的触发强度和相应的输出隶属度函数计算输出模糊值。在这种情况下,软件使用一个输入调用隐含函数,类似于下面的例子:
Impval = customimp([w outputmf])
w
而且outputmf
表示给定样本规则的触发强度和相应的输出隶属度函数值的标量值。
下面是一个带有二进制映射的有界乘积自定义隐含函数的示例 .[1]
函数Y = customimp(x1,x2)如果Nargin == 1% x1假设为非空列向量或矩阵。minVal = 0 (1,size(x1,2));Y = ones(1,size(x1,2));为i = 1:尺寸(x1, 1) y = max (minVal, sum ((y; x1(我,:)))1);结束其他的% x1和x2假设为非空矩阵。minVal = 0 (1,size(x1,2));Y = 0(大小(x1));为i = 1:尺寸(x1, 1) y(我:)= max (minVal, sum ((x1(我:);x2(我,:)))1);结束结束结束
请注意
Sugeno系统不支持自定义隐含函数。金宝app
创建自定义聚合函数
自定义聚合函数必须以与MATLAB函数相同的方式操作马克斯
,最小值
,刺激
必须是这种形式Y = customagg(x)
.您的自定义隐含函数必须是T-conorm (年代-norm)模糊交集运算。有关更多信息,请参见附加模糊算子.
x
是一个Nv——- - - - - -Nr矩阵,它是由隐含方法为每个规则返回的截断输出函数的列表。Nv输出变量的数量和Nr是规则的数量。聚合方法的输出是每个输出变量的一个模糊集。
下面是一个带有二进制映射的有界和自定义聚合函数的示例 .[1]
函数y = customagg(x) maxVal = ones(1,size(x,2));Y = 0 (1,size(x,2));为i = 1:size(x,1) y = min(maxVal,sum([y;x(i,:)]));结束结束
请注意
Sugeno系统不支持自定义聚合函数。金宝app
创建自定义去模糊化函数
自定义去模糊化函数的形式必须是Y = customdefuzz(x,ymf)
,在那里x
向量的值是否在隶属度函数的输入范围和ymf
包含每个成员函数的值x
价值。
下面是一个自定义去模糊化函数的例子。
函数Defuzzfun = customdefuzz(x,ymf) total_area = sum(ymf);Defuzzfun = sum(ymf.*x)/total_area;结束
请注意
Sugeno系统不支持自定义去模糊化功能。金宝app
创建自定义类型缩减函数
对于2型模糊推理系统,您可以指定一个自定义的类型缩减函数。这个函数必须是这样的形式Y = customtr(x,umf,lmf)
,在那里x
是隶属度函数输入范围内值的向量。umf
而且lmf
上隶属度和下隶属度各自的值是各自的函数吗x
价值。输出y
是质心的两元行向量[cl,cR]。
有关类型简化的详细信息,请参见2型模糊推理系统.
默认情况下,type-2 Sugeno系统只支持类型缩减的加权平均形金宝app式。下面的自定义类型缩减函数为Sugeno系统实现了一种加权和形式的类型缩减。
函数Y = customtr(x,umf,lmf) Y = 0 (1,2);Y (1) = sum(x.*umf);Y (2) = sum(x.*lmf);结束
使用模糊逻辑设计器指定自定义推理函数
类在设计FIS时使用自定义推理函数模糊逻辑设计器应用程序中,首先选择FIS系统浏览器.然后,在属性编辑器,在相应的推理函数字段中输入自定义函数的名称。
下表显示了属性编辑器字段为每种类型的推断函数。
推理函数 | 属性编辑字段 |
---|---|
和 | 和方法 |
或 | 或方法 |
含义 | 暗示的方法 |
聚合 | 聚合方法 |
去模糊化 | 去模糊化方法 |
Type-reduction | Type-reduction方法 |
在命令行中指定自定义推断函数
若要在MATLAB命令行中设计FIS时使用自定义推理函数,请将相应的FIS对象属性设置为自定义推理函数名称。例如,设置FIS的聚合功能myFIS
到customagg
函数。
myFIS。AggregationMethod =“customagg”;
下表显示了每种类型推断函数的FIS对象属性。
推理函数 | FIS对象属性 |
---|---|
和 | AndMethod |
或 | OrMethod |
含义 | ImplicationMethod |
聚合 | AggregationMethod |
去模糊化 | DefuzzificationMethod |
Type-reduction | TypeReductionMethod |
在代码生成中使用自定义函数
您可以在为其生成代码的模糊推理系统中使用自定义函数。有关模糊系统代码生成的更多信息,请参见部署模糊推理系统.
如果为生成的代码使用非双精度数据类型,则必须将数据类型从自定义函数的输入参数传播到输出参数。例如,以下自定义聚合函数维护的数据类型为x
在y
使用的
而且0
函数具有“喜欢”
论点。
函数Y = customagg(x)% # codegenmaxVal = ones(1,size(x,2),“喜欢”, x);Y = 0 (1,size(x,2),“喜欢”, x);为i = 1:size(x,1) y = min(maxVal,sum([y;x(i,:)]));结束结束
有关编写支持C/ c++代码生成的函数的更多信息,请参见金宝app代码生成的MATLAB编程(MATLAB编码器).
参考文献
[1]水本,雅春。模糊连接词的图示表示,第2部分:补偿算子和自对偶算子的情况。模糊集与系统32岁的没有。1(1989年8月):45-79。https://doi.org/10.1016/0165 - 0114 (89) 90087 - 0.