使用自定义函数构建模糊系统
在构建模糊推理系统(FIS)时,可以用自定义函数替换内置的成员函数或推理函数。控件中使用这些自定义函数的FIS模糊逻辑设计app和MATLAB®命令行。
有关创建FIS的更多信息,请参见利用模糊逻辑设计器构建模糊系统而且在命令行上构建模糊系统.
定义自定义成员函数
您可以创建自定义成员函数,并在模糊推理过程中使用它们。这些函数的值必须在0到1之间。有关成员函数属性的更多信息,请参见隶属度函数.
创建自定义成员函数时,必须将其保存在当前工作文件夹或MATLAB路径中。控件中使用自定义成员关系函数的FIS模糊逻辑设计应用程序。
下面是一个多步骤自定义成员关系函数的示例custmf1
,这取决于之间的8个参数0
而且10
.
函数生成多步骤自定义成员关系函数%,使用8个参数作为输入参数x函数= custmf1 (x, params)为i = 1:长度(x)如果X (i) < params(1) y(i) = params(1);elseifX (i) < params(2) y(i) = params(2);elseifX (i) < params(3) y(i) = params(3);elseifX (i) < params(4) y(i) = params(4);elseifX (i) < params(5) y(i) = params(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]。= 0.1 * y ';结束
使用模糊逻辑设计器指定自定义成员函数
控件在设计FIS时使用自定义成员关系函数模糊逻辑设计应用程序中,首先选择相应的变量系统浏览器.然后,在添加组件画廊,点击曼氏金融.
该应用程序添加一个默认的三角形成员函数选择的变量。
在属性编辑器:
在范围字段,指定与成员函数的期望范围相匹配的输入范围。
在的名字列中,为成员关系函数指定名称。
在类型列,指定自定义成员关系函数的名称。
在参数列,输入隶属函数参数。
中选择成员函数以验证成员函数的外观系统浏览器并打开隶属函数编辑器.
控件中的自定义成员关系函数的参数进行交互调整隶属函数编辑器不支持。
定义自定义推理函数
根据所设计的FIS的类型,可以用自定义函数替换内置的AND、OR、隐含、聚合和去模糊化推理方法。对于每种类型的推断函数,下表列出了支持使用自定义函数的FIS对象。
推理函数 | 支持FIS对象 |
---|---|
和 | 所有FIS对象 |
或 | |
含义 |
|
聚合 | |
去模糊化 | 1型Mamdani FIS |
Type-reduction |
|
创建自定义推理函数时,必须将其保存在当前工作文件夹或MATLAB路径中。控件中使用自定义推理函数的FIS模糊逻辑设计应用程序。
创建自定义的AND和OR函数
自定义的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
在模糊逻辑工具箱™软件中:
AND推理函数执行一个元素一个元素矩阵的运算,类似于命令
min (x, y)
.OR推理函数执行一个元素一个元素矩阵的运算,类似于命令
max (x, y)
.
创建自定义隐含函数
自定义隐含函数必须以与MATLAB函数相同的方式运行马克斯
,最小值
,刺激
.你的自定义隐含函数必须是aT-范数模糊交集运算。有关更多信息,请参见额外的模糊算子.
隐含函数必须支持一个或两个输入,因为软件以两种方式调用函数。
利用所有规则的触发强度和相应的输出隶属度函数计算输出模糊集值。在这种情况下,软件使用如下两个输入调用隐含函数。
outputmf impvals = customimp (w)
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)如果输入参数个数= = 1% x1假设为非空列向量或矩阵。minVal = 0(1、大小(x1, 2));y = 1(1、尺寸(x1, 2));为i = 1:尺寸(x1, 1) y = max (minVal, sum ((y; x1(我,:)))1);结束其他的% x1和x2假设是非空矩阵。minVal = 0(1、大小(x1, 2));y = 0(大小(x1));为i = 1:尺寸(x1, 1) y(我:)= max (minVal, sum ((x1(我:);x2(我,:)))1);结束结束结束
请注意
Sugeno系统不支持自定义隐含函数。
创建自定义聚合函数
自定义聚合函数必须以与MATLAB函数相同的方式运行马克斯
,最小值
,刺激
而且必须是那种形式y = customagg (x)
.你的自定义隐含函数必须是aT-conorm (年代-范数)模糊交集运算。有关更多信息,请参见额外的模糊算子.
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系统不支持自定义聚合函数。
创建自定义去模糊化函数
自定义去模糊化函数必须是这样的形式y = customdefuzz (x, ymf)
,在那里x
向量的值在隶属函数的输入范围和ymf
包含每个成员关系函数的值x
价值。
下面是一个自定义去模糊化函数的示例。
函数Defuzzfun = customdefuzz(x,ymf) total_area = sum(ymf);defuzzfun = (ymf。* x) / total_area总和;结束
请注意
Sugeno系统不支持自定义去模糊化函数。
创建自定义减类型函数
对于2型模糊推理系统,您可以指定一个自定义的类型简化函数。这个函数必须符合这个形式y = customtr (x, umf lmf)
,在那里x
是隶属函数输入范围内值的向量。umf
而且lmf
上隶属度函数和下隶属度函数各自的值是分别对应的吗x
价值。输出y
是质心的双元素行向量[cl,cR]。
有关类型简化的更多信息,请参见二类模糊推理系统.
默认情况下,type-2 Sugeno系统只支持类型简化的加权平均形式。下面的自定义类型简化函数为Sugeno系统实现了类型简化的加权和形式。
函数Y = customr (x,umf,lmf) Y = 0 (1,2);y (1) = (x。* umf)总和;y (2) = (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 = 1(1、大小(x, 2),“喜欢”, x);y = 0(1、大小(x, 2),“喜欢”, x);为i = 1:size(x,1) y = min(maxVal,sum([y;x(i,:)]));结束结束
有关编写支持C/ c++代码生成的函数的更多信息,请参见代码生成的MATLAB编程(MATLAB编码器).
参考文献
[1] Mizumoto Masaharu。“模糊连通性的图示表示,第二部分:补偿算子和自对偶算子的例子”。模糊集与模糊系统32岁的没有。1(1989年8月):45-79。https://doi.org/10.1016/0165 - 0114 (89) 90087 - 0.