38、模糊推理系统参数可调设置全解析

模糊推理系统参数可调设置全解析

在模糊推理系统(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);
  1. 获取可调设置:
[in,out] = getTunableSettings(fis);
  1. 调整隶属函数参数:
    假设输入变量的第一个隶属函数有三个参数,我们可以将第一个和第三个参数设置为可调,以更好地适应不同的温度范围。
in(1).MembershipFunctions(1).Parameters.Free = [1 0 1];
  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 隶属函数索引,不忽略输出 1 隶属函数索引。
rule(1).Antecedent.Free(1) = false;
rule(1).Consequent.AllowEmpty(1) = false;
  1. 重新评估系统:
    使用 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
  1. 在模糊推理系统中使用自定义函数:
fis = sugfis('AndMethod',@myAndFunction);
8.3 规则索引与参数设置

在使用 RuleSettings 对象设置规则参数时,要注意规则的索引是从 1 开始的,并且要确保参数设置的有效性。

示例
如果规则列表中有 10 条规则,要调整第 5 条规则的前件参数:

rule(5).Antecedent.Free(1) = true;
9. 总结与展望

通过前面的介绍,我们详细了解了模糊推理系统中多种参数可调设置对象的使用方法,包括 MembershipFunctionSettings MembershipFunctionSettingsType2 NumericParameters RuleSettings 以及 sugfis 对象。这些对象为我们在模糊推理系统的设计、优化和调整提供了丰富的手段。

在未来的应用中,随着模糊推理技术的不断发展,这些参数可调设置将在更多领域发挥重要作用,如智能控制、数据分析、决策支持等。同时,我们也可以进一步探索如何结合机器学习和深度学习技术,实现更加智能化的模糊推理系统。例如,可以使用机器学习算法自动调整隶属函数的参数,以适应不同的数据分布和任务需求。

总之,掌握这些参数可调设置的方法和技巧,将有助于我们更好地构建和优化模糊推理系统,提高系统的性能和适应性,为实际应用带来更多的价值。希望本文能够为你在模糊推理系统的学习和实践中提供有益的参考。

基于matlab建模FOC观测器采用龙贝格观测器+PLL进行无传感器控制(Simulink仿真实现)内容概要:本文档主要介绍基于Matlab/Simulink平台实现的多种科研仿真项目,涵盖电机控制、无人机路径规划、电力系统优化、信号处理、图像处理、故障诊断等多个领域。重点内容之一是“基于Matlab建模FOC观测器,采用龙贝格观测器+PLL进行无传感器控制”的Simulink仿真实现,该方法通过状态观测器估算电机转子位置与速度,结合锁相环(PLL)实现精确控制,适用于永磁同步电机等无位置传感器驱动场景。文档还列举了大量相关科研案例与算法实现,如卡尔曼滤波、粒子群优化、深度学习、多智能体协同等,展示了Matlab在工程仿真与算法验证中的广泛应用。; 适合人群:具备一定Matlab编程基础,从事自动化、电气工程、控制科学、机器人、电力电子等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并掌握FOC矢量控制中无传感器控制的核心原理与实现方法;②理解龙贝格观测器与PLL在状态估计中的作用与仿真建模技巧;③借鉴文中丰富的Matlab/Simulink案例,开展科研复现、算法优化或课程设计;④应用于电机驱动系统、无人机控制、智能电网等实际工程仿真项目。; 阅读建议:建议结合Simulink模型与代码进行实践操作,重点关注观测器设计、参数整定与仿真验证流程。对于复杂算法部分,可先从基础案例入手,逐步深入原理分析与模型改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值