模糊推理系统参数可调设置全解析
在模糊推理系统(FIS)的应用中,对参数进行灵活的可调设置是优化系统性能、适应不同场景的关键。本文将详细介绍模糊推理系统中多种参数可调设置对象,包括 MembershipFunctionSettings、MembershipFunctionSettingsType2、NumericParameters、RuleSettings 以及 sugfis 对象,帮助你深入理解并掌握这些对象的使用方法。
1. MembershipFunctionSettings:类型 1 隶属函数参数可调设置
1.1 概述
MembershipFunctionSettings 对象用于存储类型 1 隶属函数的可调参数设置。通过该对象,你可以为相应隶属函数的参数指定可调性设置。
1.2 创建方法
使用
getTunableSettings
函数结合
mamfis
、
sugfis
或
fistree
对象来创建
MembershipFunctionSettings
对象。
getTunableSettings
的第一个和第二个输出分别包含输入和输出变量的
VariableSettings
对象。如果
VariableSettings
对象对应具有类型 1 隶属函数的变量,那么其
MembershipFunctions
属性将包含
MembershipFunctionSettings
对象。
1.3 属性
-
Parameters
:隶属函数参数的可调设置,以
NumericParameters对象的形式指定。
1.4 对象函数
- setTunable :将指定的参数设置为可调或不可调。
1.5 示例
以下是一个获取模糊推理系统输入和输出变量可调设置的示例:
% 创建两个模糊推理系统并定义连接
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);
% 获取模糊推理系统输入和输出变量的可调设置
[in,out] = getTunableSettings(tree);
% 设置输入 1 的第一个隶属函数的第一个和第三个参数为可调
in(1).MembershipFunctions(1).Parameters.Free = [1 0 1];
% 设置输入 2 的第一个隶属函数的最小参数范围为 0
in(2).MembershipFunctions(1).Parameters.Minimum = 0;
% 设置输出 2 的第一个隶属函数的最大参数范围为 1
out(2).MembershipFunctions(1).Parameters.Maximum = 1;
2. MembershipFunctionSettingsType2:类型 2 隶属函数参数可调设置
2.1 概述
MembershipFunctionSettingsType2
对象用于存储类型 2 隶属函数的可调参数设置。通过该对象,你可以为相应隶属函数指定可调性设置,包括上隶属函数参数、下隶属函数尺度和下隶属函数滞后。
2.2 创建方法
使用
getTunableSettings
函数结合
mamfistype2
、
sugfistype2
或
fistree
对象来创建
MembershipFunctionSettingsType2
对象。
getTunableSettings
的第一个和第二个输出分别包含输入和输出变量的
VariableSettings
对象。如果
VariableSettings
对象对应具有类型 2 隶属函数的变量,那么其
MembershipFunctions
属性将包含
MembershipFunctionSettingsType2
对象。
2.3 属性
-
UpperParameters
:上隶属函数参数的可调设置,以
NumericParameters对象的形式指定。 -
LowerScale
:下隶属函数尺度的可调设置,以
NumericParameters对象的形式指定。 -
LowerLag
:下隶属函数滞后的可调设置,以
NumericParameters对象的形式指定。
2.4 对象函数
- setTunable :将指定的参数设置为可调或不可调。
2.5 示例
以下是一个获取类型 2 模糊推理系统输入和输出变量可调设置的示例:
% 创建类型 2 模糊推理系统
fis = mamfistype2('Name','fis1','NumInputs',2,'NumOutputs',1);
% 获取模糊推理系统输入和输出变量的可调设置
[in,out] = getTunableSettings(fis);
% 设置输入 1 的第一个隶属函数的第一个和第三个上隶属函数参数为可调
in(1).MembershipFunctions(1).UpperParameters.Free = [1 0 1];
% 设置输入 2 的第一个隶属函数的下隶属函数尺度的可调范围为 0.7 到 0.9
in(2).MembershipFunctions(1).LowerScale.Minimum = 0.7;
in(2).MembershipFunctions(1).LowerScale.Maximum = 0.9;
% 设置输出 1 的第一个隶属函数的下隶属函数滞后的可调范围为 0.1 到 0.4
in(2).MembershipFunctions(1).LowerLag.Minimum = 0.1;
in(2).MembershipFunctions(1).LowerLag.Maximum = 0.4;
3. NumericParameters:隶属函数的可调数值参数设置
3.1 概述
NumericParameters
对象用于存储模糊隶属函数数值属性的可调设置。
3.2 创建方法
使用
getTunableSettings
函数创建
NumericParameters
对象。
getTunableSettings
的第一个和第二个输出分别包含输入和输出变量的
VariableSettings
对象。每个
VariableSettings
对象的
MembershipFunctions
属性包含用于指定隶属函数属性可调设置的
NumericParameters
对象。
3.3 属性
-
Free
:可用于调整的参数值,根据不同情况指定为逻辑值向量、1 或 0。
-
当
NumericParameters包含类型 1 隶属函数的Parameters属性或类型 2 隶属函数的UpperParameters属性的可调设置时,为逻辑值向量。 -
当
NumericParameters对象包含类型 2 隶属函数的LowerScale或LowerLag属性的可调设置时,为逻辑 1 或 0。
-
当
-
Minimum
:最小参数值,根据不同情况指定为向量或标量。
-
当
NumericParameters包含类型 1 隶属函数的Parameters属性或类型 2 隶属函数的UpperParameters属性的可调设置时,为向量。 -
当
NumericParameters对象包含类型 2 隶属函数的LowerScale或LowerLag属性的可调设置时,为标量值。
-
当
-
Maximum
:最大参数值,根据不同情况指定为向量或标量。
-
当
NumericParameters包含类型 1 隶属函数的Parameters属性或类型 2 隶属函数的UpperParameters属性的可调设置时,为向量。 -
当
NumericParameters对象包含类型 2 隶属函数的LowerScale或LowerLag属性的可调设置时,为标量值。
-
当
3.4 示例
以下是一个获取模糊推理系统输入和输出变量可调设置并使用
NumericParameters
对象进行设置的示例:
% 创建两个模糊推理系统并定义连接
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);
% 获取模糊推理系统输入和输出变量的可调设置
[in,out] = getTunableSettings(tree);
% 设置输入 1 的第一个隶属函数的第一个和第三个参数为可调
in(1).MembershipFunctions(1).Parameters.Free = [1 0 1];
% 设置输入 2 的第一个隶属函数的最小参数范围为 0
in(2).MembershipFunctions(1).Parameters.Minimum = 0;
% 设置输出 2 的第一个隶属函数的最大参数范围为 1
out(2).MembershipFunctions(1).Parameters.Maximum = 1;
4. RuleSettings:模糊规则的可调参数设置
4.1 概述
RuleSettings
对象用于存储模糊规则的可调参数设置。
4.2 创建方法
使用
getTunableSettings
函数并指定三个输出创建
RuleSettings
对象。当指定第三个输出时,
getTunableSettings
返回模糊规则的可调参数设置。
4.3 属性
- FISName :模糊推理系统的名称,为只读属性,以字符串形式指定。
- Index :规则在模糊推理系统中的索引,为只读属性,以整数形式指定。
-
Antecedent
:规则的前件参数设置,以
ClauseParameters对象的形式指定。每个前件参数由AllowNot、AllowEmpty和Free属性组成,你可以指定这些属性。 -
Consequent
:规则的后件参数设置,以
ClauseParameters对象的形式指定。每个后件参数由AllowNot、AllowEmpty和Free属性组成,你可以指定这些属性。
4.4 对象函数
- setTunable :将指定的参数设置为可调或不可调。
4.5 示例
以下是一个获取模糊推理系统规则可调设置的示例:
% 创建两个模糊推理系统并定义连接
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;
5. sugfis:Sugeno 模糊推理系统
5.1 概述
sugfis
对象用于表示类型 1 的 Sugeno 模糊推理系统(FIS)。除了类型 1 的 Sugeno 系统,你还可以使用
mamfis
对象创建类型 1 的 Mamdani 系统,使用
sugfistype2
对象创建类型 2 的 Sugeno 系统,使用
mamfistype2
对象创建类型 2 的 Mamdani 系统。
5.2 创建方法
可以使用以下方法创建 Sugeno FIS 对象:
- 使用
sugfis
函数。
- 如果你有输入/输出数据,可以使用
genfis
函数。
- 如果你有 Sugeno 系统的
.fis
文件,可以使用
readfis
函数。
- 使用
convertToSugeno
将现有的 Mamdani FIS 转换为 Sugeno FIS。
5.3 语法
fis = sugfis
fis = sugfis(Name,Value)
-
fis = sugfis:创建具有默认属性值的 Sugeno FIS。要修改模糊系统的属性,使用点表示法。 -
fis = sugfis(Name,Value):使用名称 - 值对参数指定 FIS 配置信息或设置对象属性。你可以指定多个名称 - 值对,名称用引号括起来。
5.4 输入参数
以下是一些常用的名称 - 值对参数:
| 参数名称 | 描述 | 默认值 |
| ---- | ---- | ---- |
|
NumInputs
| 模糊系统的输入变量数量 | 0 |
|
NumInputMFs
| 每个输入变量的隶属函数数量 | 3 |
|
NumOutputs
| 模糊系统的输出变量数量 | 0 |
|
NumOutputMFs
| 每个输出变量的隶属函数数量 | 3 |
|
MFType
| 输入变量的隶属函数类型,可选 “trimf”(三角隶属函数)或 “gaussmf”(高斯隶属函数) | “trimf” |
|
AddRules
| 自动添加规则的标志,可选 “allcombinations” 或 “none” | “allcombinations” |
5.5 属性
- Name :模糊推理系统的名称,默认值为 “fis”,可以指定为字符串或字符向量。
- AndMethod :模糊规则前件中组合模糊化输入值的 AND 运算符方法,可选 “prod”(模糊化输入值的乘积)、”min”(模糊化输入值的最小值)、自定义 AND 函数的名称或函数句柄。
- OrMethod :模糊规则前件中组合模糊化输入值的 OR 运算符方法,可选 “probor”(模糊化输入值的概率 OR)、”max”(模糊化输入值的最大值)、自定义 OR 函数的名称或函数句柄。
- ImplicationMethod :计算后件模糊集的蕴含方法,Sugeno 系统始终使用 “prod” 方法,即通过前件结果值缩放后件隶属函数。
- AggregationMethod :组合规则后件的聚合方法,Sugeno 系统始终使用 “sum” 方法,即后件模糊集的总和。
- DefuzzificationMethod :从聚合的输出模糊集计算清晰输出值的去模糊化方法,可选 “wtaver”(所有规则输出的加权平均值)或 “wtsum”(所有规则输出的加权总和)。
-
Inputs
:模糊系统的输入变量,以
fisvar对象的向量形式指定。可以使用addInput和removeInput函数添加和删除输入变量,使用点表示法修改输入变量的属性,使用addMF函数为输入变量添加隶属函数。 -
Outputs
:模糊系统的输出变量,以
fisvar对象的向量形式指定。可以使用addOutput和removeOutput函数添加和删除输出变量,使用点表示法修改输出变量的属性,使用addMF函数为输出变量添加隶属函数。 -
Rules
:模糊系统的规则,以
fisrule对象的向量形式指定。可以使用addRule函数添加模糊规则,使用点表示法将规则向量赋值给Rules属性,通过将规则向量元素设置为[]来删除规则。 -
DisableStructuralChecks
:禁用属性值更改时一致性检查的标志,默认值为
false。设置为true可以加快 FIS 构建速度,但可能导致无效的sugfis对象。
5.6 对象函数
- addInput :向模糊推理系统添加输入变量。
- removeInput :从模糊推理系统中删除输入变量。
- addOutput :向模糊推理系统添加输出变量。
- removeOutput :从模糊推理系统中删除输出变量。
- addRule :向模糊推理系统添加规则。
- addMF :向模糊变量添加隶属函数。
- removeMF :从模糊变量中删除隶属函数。
- evalfis :评估模糊推理系统。
- writeFIS :将模糊推理系统保存到文件。
- convertToType2 :将类型 1 的模糊推理系统转换为类型 2 的模糊推理系统。
5.7 示例
以下是一些创建和使用 Sugeno FIS 的示例:
% 创建具有默认属性值的 Sugeno 模糊推理系统
fis = sugfis;
% 修改系统属性,例如配置 fis 使用加权和去模糊化
fis.DefuzzificationMethod = "wtsum";
% 创建具有指定 AND 和 OR 方法的 Sugeno 模糊系统
fis = sugfis("AndMethod","min","OrMethod","max");
% 创建具有三个输入和一个输出的 Sugeno 模糊推理系统
fis = sugfis("NumInputs",3,"NumOutputs",1);
% 从文件加载 Sugeno FIS
fis = readfis('sugeno1');
% 查看输出变量的第一个隶属函数的属性
fis.Outputs(1).MembershipFunctions(1)
% 查看输出变量的第二个隶属函数的属性
fis.Outputs(1).MembershipFunctions(2)
% 查看规则
fis.Rules
% 绘制输入隶属函数
plotmf(fis,'input',1)
% 绘制输出表面
gensurf(fis)
总结
通过本文的介绍,你了解了模糊推理系统中多种参数可调设置对象的使用方法,包括类型 1 和类型 2 隶属函数的参数可调设置、隶属函数的可调数值参数设置、模糊规则的可调参数设置以及 Sugeno fuzzy inference system 的创建和使用。这些对象和方法为你在模糊推理系统的设计和优化中提供了强大的工具,帮助你根据不同的需求灵活调整系统参数,提高系统性能。在实际应用中,你可以根据具体情况选择合适的方法和参数设置,以实现最佳的模糊推理效果。
模糊推理系统参数可调设置全解析(续)
6. 各对象之间的关系与工作流程
为了更好地理解上述各个对象在模糊推理系统中的作用,我们来看一下它们之间的关系和工作流程。以下是一个 mermaid 流程图,展示了从创建模糊推理系统到设置参数可调性的主要步骤:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(创建模糊推理系统):::process --> B(使用 getTunableSettings 函数):::process
B --> C{变量类型}:::process
C -->|类型 1 隶属函数| D(获取 VariableSettings 对象):::process
C -->|类型 2 隶属函数| E(获取 VariableSettings 对象):::process
D --> F(VariableSettings.MembershipFunctions 包含 MembershipFunctionSettings):::process
E --> G(VariableSettings.MembershipFunctions 包含 MembershipFunctionSettingsType2):::process
F --> H(MembershipFunctionSettings.Parameters 为 NumericParameters):::process
G --> I(MembershipFunctionSettingsType2.UpperParameters 为 NumericParameters):::process
G --> J(MembershipFunctionSettingsType2.LowerScale 为 NumericParameters):::process
G --> K(MembershipFunctionSettingsType2.LowerLag 为 NumericParameters):::process
B --> L(获取 RuleSettings 对象):::process
从这个流程图可以看出,首先需要创建模糊推理系统,然后使用
getTunableSettings
函数来获取可调设置。根据变量的隶属函数类型(类型 1 或类型 2),会得到不同的
VariableSettings
对象,进而获取相应的隶属函数设置对象。同时,也可以获取规则的可调设置对象
RuleSettings
。而
NumericParameters
对象则在隶属函数参数设置中起到关键作用,用于指定参数的可调性和取值范围。
7. 实际应用场景与操作建议
在实际应用中,我们可以根据不同的需求来灵活运用这些对象和方法。以下是一些常见的应用场景及具体操作建议:
7.1 系统性能优化
当需要优化模糊推理系统的性能时,可以通过调整隶属函数的参数来实现。例如,在一个温度控制系统中,我们希望系统能够更精确地响应不同的温度变化。
操作步骤
:
1. 创建模糊推理系统:
fis = sugfis('Name','TemperatureControl','NumInputs',1,'NumOutputs',1);
- 获取可调设置:
[in,out] = getTunableSettings(fis);
-
调整隶属函数参数:
假设输入变量的第一个隶属函数有三个参数,我们可以将第一个和第三个参数设置为可调,以更好地适应不同的温度范围。
in(1).MembershipFunctions(1).Parameters.Free = [1 0 1];
-
进行系统评估和调整:
使用evalfis函数评估系统性能,并根据评估结果进一步调整参数。
output = evalfis(input,fis);
7.2 规则调整
在某些情况下,可能需要调整模糊规则的参数,以改变系统的推理逻辑。例如,在一个决策系统中,我们希望某些规则的前件或后件更加灵活。
操作步骤
:
1. 创建模糊推理系统并获取规则可调设置:
fis1 = mamfis('Name','DecisionSystem1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','DecisionSystem2','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;
-
重新评估系统:
使用evalfis函数重新评估系统,观察规则调整后的效果。
output = evalfis(input,tree);
8. 注意事项与常见问题解答
在使用这些对象和方法时,还需要注意一些事项,以下是一些常见问题及解答:
8.1 关于 DisableStructuralChecks 属性
在创建和更新模糊系统时,
DisableStructuralChecks
属性可以影响系统的性能。当设置为
true
时,虽然可以加快 FIS 构建速度,但可能会导致无效的
sugfis
对象。
建议
:
- 在开发和调试阶段,建议保持
DisableStructuralChecks
为
false
,以便及时发现和解决属性值不一致的问题。
- 在大规模系统的构建过程中,如果性能是关键因素,可以将
DisableStructuralChecks
设置为
true
,但在完成构建后,一定要确保系统的一致性,并将其重新设置为
false
。
8.2 自定义函数的使用
在
AndMethod
和
OrMethod
等属性中,可以使用自定义函数。但需要注意的是,自定义函数必须位于当前工作文件夹或 MATLAB 路径中。
操作步骤
:
1. 创建自定义函数:
例如,创建一个自定义的 AND 函数
myAndFunction.m
:
function result = myAndFunction(input1, input2)
result = input1 * input2; % 这里只是一个简单示例
end
- 在模糊推理系统中使用自定义函数:
fis = sugfis('AndMethod',@myAndFunction);
8.3 规则索引与参数设置
在使用
RuleSettings
对象设置规则参数时,要注意规则的索引是从 1 开始的,并且要确保参数设置的有效性。
示例
:
如果规则列表中有 10 条规则,要调整第 5 条规则的前件参数:
rule(5).Antecedent.Free(1) = true;
9. 总结与展望
通过前面的介绍,我们详细了解了模糊推理系统中多种参数可调设置对象的使用方法,包括
MembershipFunctionSettings
、
MembershipFunctionSettingsType2
、
NumericParameters
、
RuleSettings
以及
sugfis
对象。这些对象为我们在模糊推理系统的设计、优化和调整提供了丰富的手段。
在未来的应用中,随着模糊推理技术的不断发展,这些参数可调设置将在更多领域发挥重要作用,如智能控制、数据分析、决策支持等。同时,我们也可以进一步探索如何结合机器学习和深度学习技术,实现更加智能化的模糊推理系统。例如,可以使用机器学习算法自动调整隶属函数的参数,以适应不同的数据分布和任务需求。
总之,掌握这些参数可调设置的方法和技巧,将有助于我们更好地构建和优化模糊推理系统,提高系统的性能和适应性,为实际应用带来更多的价值。希望本文能够为你在模糊推理系统的学习和实践中提供有益的参考。
超级会员免费看
33

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



