模糊系统相关对象与函数详解
1. ClauseParameters 对象
1.1 概述
ClauseParameters 对象用于存储模糊规则的前件或后件的可调设置。
1.2 创建方式
使用
getTunableSettings
函数创建 ClauseParameters 对象。该函数的第三个输出包含
RuleSettings
对象,每个
RuleSettings
对象的
Antecedent
和
Consequent
属性就是用于指定相应规则可调设置的
ClauseParameter
对象。
1.3 属性
| 属性 | 描述 | 取值 |
|---|---|---|
| Free |
可调整的子句参数值,当
ClauseParameters
对象表示规则前件时,子句参数值是对应每个输入变量的隶属函数;当表示规则后件时,是对应每个输出变量的隶属函数
| 逻辑值 1 或 0,或逻辑值数组 |
| AllowNot | 指示是否允许在规则子句中使用 NOT 逻辑的标志 | 逻辑值 1 或 0,或逻辑值数组 |
| AllowEmpty | 指示是否允许在规则子句中忽略输入和输出的标志 | 逻辑值 1 或 0,或逻辑值数组 |
1.4 示例:从模糊推理系统中获取规则的可调设置
% 创建两个模糊推理系统,并定义它们之间的连接
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','fis2','NumInputs',2,'NumOutputs',1);
con = ["fis1/output1" "fis2/input1"];
% 创建模糊推理系统树
tree = fistree([fis1 fis2],con);
% 获取模糊推理系统规则的可调设置
[~,~,rule] = getTunableSettings(tree);
% 对于第一条规则,不调整输入 1 的隶属函数索引,不忽略输出 1 的隶属函数索引
rule(1).Antecedent.Free(1) = false;
rule(1).Consequent.AllowEmpty(1) = false;
% 对于第二条规则,允许输入 2 的隶属函数索引使用 NOT 逻辑
rule(2).Antecedent.AllowNot(2) = true;
2. evalfisOptions 对象
2.1 概述
使用
evalfisOptions
对象为
evalfis
函数指定选项。
2.2 创建方式
-
opt = evalfisOptions:创建具有默认选项的evalfis函数选项集。 -
opt = evalfisOptions(Name,Value):使用名称 - 值对设置属性。例如,evalfisOptions('NumSamplePoints',51)创建一个选项集并将输出模糊集的样本点数设置为 51。
2.3 属性
| 属性 | 描述 | 取值 |
|---|---|---|
| NumSamplePoints | 输出模糊集中的样本点数 | 大于 1 的整数,默认值为 101 |
| OutOfRangeInputValueMessage | 输入超出范围时的诊断消息行为 | “warning”(默认)、”error” 或 “none” |
| NoRuleFiredMessage | 没有规则触发时的诊断消息行为 | “warning”(默认)、”error” 或 “none” |
| EmptyOutputFuzzySetMessage | 输出模糊集为空时的诊断消息行为 | “warning”(默认)、”error” 或 “none” |
2.4 示例:创建用于评估模糊推理系统的选项集
% 方法一:指定输出模糊集的样本点数创建选项集对象
options = evalfisOptions('NumSamplePoints',51);
% 方法二:创建默认选项集,使用点符号配置属性
options = evalfisOptions;
options.NumSamplePoints = 51;
2.5 扩展功能:C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 和 C++ 代码。使用注意事项和限制如下:
- 用于代码生成时,
evalfisOptions
对象将其
OutOfRangeInputValueMessage
、
NoRuleFiredMessage
和
EmptyOutputFuzzySetMessage
属性存储为字符向量而不是字符串。
- 在 Simulink 中评估模糊推理系统时,建议不要在 MATLAB 函数块中使用
evalfis
或
evalfisOptions
,而是使用模糊逻辑控制器块来评估模糊推理系统。
3. fismf 对象
3.1 概述
使用
fismf
对象表示类型 1 模糊隶属函数。在模糊推理系统(FIS)中,每个输入和输出变量都有一个或多个隶属函数来定义该变量的可能语言集。
3.2 创建方式
-
mf = fismf:创建具有默认类型、参数和名称的模糊隶属函数(MF)。 -
mf = fismf(type,parameters):设置Type和Parameters属性。 -
mf = fismf('Name',name):设置Name属性。 -
mf = fismf(type,parameters,"Name",name):设置Type、Parameters和Name属性。
3.3 属性
| 属性 | 描述 | 取值 |
|---|---|---|
| Name | 隶属函数名称 | 字符串或字符向量,默认值为 “mf” |
| Type | 隶属函数类型 | 字符串或字符向量,包含当前工作文件夹或 MATLAB 路径中函数的名称,也可以是函数句柄,默认值为 “trimf” |
| Parameters | 隶属函数参数 | 向量,默认值为 [0 0.5 1] |
3.4 隶属函数类型及说明
| 隶属函数类型 | 描述 | 更多信息 |
|---|---|---|
| “gbellmf” | 广义钟形隶属函数 | gbellmf |
| “gaussmf” | 高斯隶属函数 | gaussmf |
| “gauss2mf” | 高斯组合隶属函数 | gauss2mf |
| “trimf” | 三角形隶属函数 | trimf |
| “trapmf” | 梯形隶属函数 | trapmf |
| “linsmf” | 线性 s 形饱和隶属函数 | linsmf |
| “linzmf” | 线性 z 形饱和隶属函数 | linzmf |
| “sigmf” | S 形隶属函数 | sigmf |
| “dsigmf” | 两个 S 形隶属函数的差 | dsigmf |
| “psigmf” | 两个 S 形隶属函数的积 | psigmf |
| “zmf” | Z 形隶属函数 | zmf |
| “pimf” | Pi 形隶属函数 | pimf |
| “smf” | S 形隶属函数 | smf |
| “constant” | 用于 Sugeno 输出隶属函数的常量隶属函数 | “Sugeno Fuzzy Inference Systems” |
| “linear” | 用于 Sugeno 输出隶属函数的线性隶属函数 | |
| 字符串或字符向量 | 当前工作文件夹或 MATLAB 路径中自定义隶属函数的名称 | “Build Fuzzy Systems Using Custom Functions” |
| 函数句柄 | 当前工作文件夹或 MATLAB 路径中自定义隶属函数的句柄 |
3.5 示例
% 创建具有默认设置的模糊隶属函数
mf = fismf;
% 修改隶属函数设置,指定标准差为 2、均值为 10 的高斯隶属函数
mf.Type = "gaussmf";
mf.Parameters = [2 10];
% 创建具有指定参数的梯形隶属函数
mf = fismf("trapmf",[10 15 20 25]);
% 创建具有指定名称的隶属函数
mf = fismf("Name","large");
4. fismftype2 对象
4.1 概述
使用
fismftype2
对象表示区间类型 2 模糊隶属函数,它为模糊推理系统引入了额外的不确定性。区间类型 2 隶属函数由上隶属函数和下隶属函数表示,上隶属函数的值始终大于或等于相应的下隶属函数值,这两个隶属函数所包围的区域是不确定性足迹(FOU)。
4.2 创建方式
-
mf = fismftype2:创建具有默认名称、类型、上 MF 参数和下 MF 配置的类型 2 模糊隶属函数。 -
mf = fismftype2(type,upperParameters):设置隶属函数的Type和UpperParameters属性。 -
mf = fismftype2( ___ ,Name,Value):使用一个或多个名称 - 值对参数设置隶属函数的Name、LowerScale或LowerLag属性。
4.3 属性
| 属性 | 描述 | 取值 |
|---|---|---|
| Name | 隶属函数名称 | 字符串或字符向量,默认值为 “mf” |
| Type | 上、下隶属函数的类型 | 字符串或字符向量,包含当前工作文件夹或 MATLAB 路径中函数的名称,也可以是函数句柄,默认值为 “trimf” |
| UpperParameters | 上隶属函数参数 | 向量,默认值为 [0 0.5 1] |
| LowerScale | 下隶属函数缩放因子 | 小于或等于 1 的正标量,默认值为 1 |
| LowerLag | 下隶属函数延迟因子 | 0 到 1 之间的标量值或长度为 2 的向量 |
4.4 示例
% 创建具有默认设置的类型 2 隶属函数
mf = fismftype2;
% 修改隶属函数设置,指定标准差为 2、均值为 10 的高斯上隶属函数
mf.Type = "gaussmf";
mf.UpperParameters = [2 10];
% 指定下隶属函数的最大值为 0.8
mf.LowerScale = 0.8;
% 配置下隶属函数在上隶属函数达到 0.3 时开始增加
mf.LowerLag = 0.3;
% 创建具有指定上 MF 参数的梯形类型 2 隶属函数
mf = fismftype2("trapmf",[3 4 6 7]);
% 创建三角形类型 2 隶属函数,指定下 MF 最大值为 0.9 和隶属函数延迟为 0.1
mf = fismftype2("trimf",[1 2 3],'LowerScale',0.9,'LowerLag',0.1);
5. fisrule 对象
5.1 概述
fisrule
对象用于表示模糊 if - then 规则,该规则将输入隶属函数条件与相应的输出隶属函数相关联。模糊规则的 if 部分是前件,指定每个输入变量的隶属函数;then 部分是后件,指定每个输出变量的隶属函数。
5.2 创建方式
使用
fisrule
函数创建模糊规则对象,可以创建单个模糊规则或多个模糊规则的向量。具体语法如下:
-
rule = fisrule
:创建一个具有默认描述 “input1==mf1 => output1=mf1” 的单个模糊规则。
-
rule = fisrule(ruleText)
:使用
ruleText
中的文本描述创建一个或多个模糊规则。
-
rule = fisrule(ruleValues,numInputs)
:使用
ruleValues
中的数字规则值创建一个或多个模糊规则,使用
numInputs
指定规则输入变量的数量。
5.3 输入参数
| 参数 | 描述 | 取值 |
|---|---|---|
| ruleText | 文本规则描述 | 可以是指定单个规则的字符串或字符向量、每个元素对应一个规则的字符串数组、每行对应一个规则的字符数组。规则文本格式有详细的 verbose 和 symbolic 两种 |
| ruleValues | 数字规则描述 | 可以是指定单个模糊规则的行向量,也可以是每行指定一个规则的数组。每行有 M + N + 2 列,M 是输入变量的数量,N 是输出变量的数量 |
| numInputs | 输入变量的数量 |
正整数,当使用
ruleValues
指定规则描述时必须指定
|
5.4 规则文本格式
- Verbose :使用 IF 和 THEN 关键字的语言表达式,格式为 “IF THEN ( )”。在 中使用 IS 或 IS NOT 关键字指定每个输入变量的隶属函数,使用 AND 或 OR 关键字连接条件;在 中使用 IS 或 IS NOT 关键字指定每个输出变量的条件,用逗号分隔。Sugeno 输出不支持 IS NOT 关键字。
-
Symbolic
:使用符号代替关键字的表达式,没有 IF 关键字对应的符号。具体符号对应关系如下:
| 符号 | 关键字 |
| ---- | ---- |
| == | IS (in rule antecedent) |
| ~= | IS NOT |
| & | AND |
| | | OR |
| => | THEN |
| = | IS (in rule consequent) |
5.5 属性
| 属性 | 描述 | 取值 |
|---|---|---|
| Description | 文本规则描述 |
字符串或字符向量,无论如何指定规则,规则描述都以符号表达式的形式存储。使用
ruleValues
指定规则时,需使用
update
函数更新描述以使用模糊系统的变量和隶属函数名称
|
| Antecedent | 规则前件 |
长度为 M 的数值向量,M 是输入变量的数量。元素取值为正整数表示 IS 条件,负整数表示 IS NOT 条件,0 表示不关心条件。使用
ruleText
创建规则时,需使用
update
函数填充该属性
|
| Consequent | 规则后件 |
长度为 N 的数值向量,N 是输出变量的数量。元素取值为正整数表示 IS 条件,负整数表示 IS NOT 条件,0 表示不关心条件。使用
ruleText
创建规则时,需使用
update
函数填充该属性
|
| Weight | 规则权重 |
范围在 [0 1] 的正数值标量,默认值为 1。使用点符号更新规则权重时,
Description
属性文本中的权重值也会更新
|
| Connection | 规则前件连接 |
1 表示使用 AND 运算符评估规则前件,2 表示使用 OR 运算符评估规则前件。使用点符号更新规则连接时,
Description
属性文本中的前件运算符也会更新
|
5.6 对象函数
update
:使用模糊推理系统更新模糊规则。
5.7 示例
% 创建默认模糊规则
rule = fisrule;
rule.Weight = 0.5;
% 使用 verbose 文本描述创建模糊规则
rule = fisrule("if service is poor and food is delicious then tip is average (1)");
% 使用 symbolic 文本描述创建模糊规则
rule = fisrule("service==poor & food==delicious => tip=average");
fis = readfis("tipper");
rule = update(rule,fis);
% 使用数字描述创建模糊规则
rule = fisrule([1 2 2 0.5 1],2);
rule = update(rule,fis);
% 创建多个模糊规则
rules1 = ["if service is poor or food is rancid then tip is cheap (0.5)", "if service is excellent and food is not rancid then tip is generous (0.75)"];
fuzzyRules1 = fisrule(rules1);
rules2 = [1 1 1 0.5 2; 2 -1 3 0.75 1];
fuzzyRules2 = fisrule(rules2,2);
5.8 模糊规则创建流程 mermaid 图
graph TD;
A[开始] --> B{选择创建方式};
B -->|fisrule| C[创建默认规则];
B -->|fisrule(ruleText)| D{选择规则文本格式};
D -->|Verbose| E[按 Verbose 格式创建规则];
D -->|Symbolic| F[按 Symbolic 格式创建规则];
B -->|fisrule(ruleValues,numInputs)| G[按数字规则值创建规则];
C --> H[可修改规则属性];
E --> I[使用 update 函数填充 Antecedent 和 Consequent];
F --> I;
G --> J[使用 update 函数更新 Description];
H --> K[结束];
I --> K;
J --> K;
总结
本文详细介绍了模糊系统中的多个重要对象和函数,包括
ClauseParameters
、
evalfisOptions
、
fismf
、
fismftype2
和
fisrule
。这些对象和函数在模糊推理系统的构建、规则设置、隶属函数定义以及系统评估等方面都发挥着关键作用。通过具体的示例代码和详细的属性说明,我们可以更深入地理解它们的使用方法和应用场景。在实际应用中,我们可以根据具体需求灵活运用这些对象和函数,构建出符合要求的模糊推理系统。例如,在需要引入额外不确定性的场景中可以使用
fismftype2
对象;在设置规则的可调参数时可以使用
ClauseParameters
对象。希望本文能为读者在模糊系统的学习和应用中提供有价值的参考。
超级会员免费看
30

被折叠的 条评论
为什么被折叠?



