35、模糊系统相关对象与函数详解

模糊系统相关对象与函数详解

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 对象。希望本文能为读者在模糊系统的学习和应用中提供有价值的参考。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值