29、模糊推理系统相关函数详解

模糊推理系统核心函数详解

模糊推理系统相关函数详解

1. getTunableValues 函数

1.1 功能概述

getTunableValues 函数用于从模糊推理系统中获取可调参数的值。

1.2 语法

paramvals = getTunableValues(fis,paramset)

1.3 详细描述

该函数返回模糊推理系统 fis 的可调参数值。要指定返回的参数值,需使用 paramset

1.4 输入参数

参数 描述
fis 模糊推理系统,可以是 mamfis 对象、 sugfis 对象、 mamfistype2 对象、 sugfistype2 对象或 fistree 对象。
paramset 可调参数设置,是输入 FIS 中输入、输出和规则参数设置的数组。可使用 getTunableSettings 函数获取这些参数设置。 paramset 可以是输入、输出或规则参数设置,也可以是这些设置的任意组合。

1.5 输出参数

参数 描述
paramvals 可调参数值,以数组形式返回。 paramvals 中值的顺序与 paramset 中参数的顺序相匹配。你可以修改这些参数值,然后使用 setTunableValues 函数将其设置到你的 FIS 中。

1.6 示例

% 创建模糊推理系统,并定义输入、输出和规则的可调参数设置
fis = mamfis('NumInputs',2,'NumOutputs',1);
[in,out,rule] = getTunableSettings(fis);

% 获取模糊推理系统的输入、输出和规则的可调参数值
paramVals = getTunableValues(fis,[in;out;rule]);

1.7 流程图

graph TD;
    A[创建模糊推理系统 fis] --> B[获取可调参数设置 paramset];
    B --> C[调用 getTunableValues 函数];
    C --> D[返回可调参数值 paramvals];

2. linsmf 函数

2.1 功能概述

linsmf 函数用于使用线性 S 形饱和隶属度函数计算模糊隶属度值。

2.2 语法

y = linsmf(x,params)

2.3 详细描述

该函数使用线性 S 形隶属度函数计算模糊隶属度值。也可以使用 fismf 对象来计算此隶属度函数。

2.4 输入参数

参数 描述
x 输入值,以标量或向量形式指定,用于计算隶属度值。
params 隶属度函数参数,指定为向量 [a b] 。参数 a 定义隶属度函数的起点, b 定义其终点。当 a 等于 b 时,会产生一个清晰的隶属度函数。

2.5 输出参数

参数 描述
y 隶属度值,以标量或向量形式返回。 y 的维度与 x 的维度相匹配。 y 的每个元素是为 x 的相应元素计算的隶属度值。

2.6 示例

% 指定输入值
x = 0:0.1:10;

% 计算线性 S 形隶属度函数
y = linsmf(x,[4 6]);

% 绘制隶属度函数
plot(x,y)
xlabel('linsmf, P = [4 6]')
ylabel('Membership')
ylim([-0.05 1.05])

2.7 替代功能

可以创建并评估一个实现 linsmf 隶属度函数的 fismf 对象。

mf = fismf("linsmf",P);
Y = evalmf(mf,X);

这里, X P Y 分别对应于 linsmf x params y 参数。

2.8 扩展功能

可以使用 MATLAB® Coder™ 生成 C 和 C++ 代码。

2.9 流程图

graph TD;
    A[指定输入值 x] --> B[指定隶属度函数参数 params];
    B --> C[调用 linsmf 函数];
    C --> D[返回隶属度值 y];
    D --> E[绘制隶属度函数];

3. linzmf 函数

3.1 功能概述

linzmf 函数用于使用线性 Z 形饱和隶属度函数计算模糊隶属度值。

3.2 语法

y = linzmf(x,params)

3.3 详细描述

该函数使用线性 Z 形隶属度函数计算模糊隶属度值。也可以使用 fismf 对象来计算此隶属度函数。

3.4 输入参数

参数 描述
x 输入值,以标量或向量形式指定,用于计算隶属度值。
params 隶属度函数参数,指定为向量 [a b] 。参数 a 定义隶属度函数的起点, b 定义其终点。当 a 等于 b 时,会产生一个清晰的隶属度函数。

3.5 输出参数

参数 描述
y 隶属度值,以标量或向量形式返回。 y 的维度与 x 的维度相匹配。 y 的每个元素是为 x 的相应元素计算的隶属度值。

3.6 示例

% 指定输入值
x = 0:0.1:10;

% 计算线性 Z 形隶属度函数
y = linzmf(x,[4 6]);

% 绘制隶属度函数
plot(x,y)
xlabel('linzmf, P = [4 6]')
ylabel('Membership')
ylim([-0.05 1.05])

3.7 替代功能

可以创建并评估一个实现 linzmf 隶属度函数的 fismf 对象。

mf = fismf("linzmf",P);
Y = evalmf(mf,X);

这里, X P Y 分别对应于 linzmf x params y 参数。

3.8 扩展功能

可以使用 MATLAB® Coder™ 生成 C 和 C++ 代码。

3.9 流程图

graph TD;
    A[指定输入值 x] --> B[指定隶属度函数参数 params];
    B --> C[调用 linzmf 函数];
    C --> D[返回隶属度值 y];
    D --> E[绘制隶属度函数];

4. mam2sug 函数

4.1 功能概述

mam2sug 函数用于将 Mamdani 模糊推理系统转换为 Sugeno 模糊推理系统。不过,该函数将在未来版本中被移除,建议使用 convertToSugeno 函数代替。

4.2 语法

sugFIS = mam2sug(mamFIS)

4.3 详细描述

该函数将 Mamdani 模糊推理系统转换为 Sugeno 模糊推理系统。

4.4 输入参数

参数 描述
mamFIS Mamdani 模糊推理系统,以结构形式指定。可以在命令行或使用模糊逻辑设计器构建 mamFIS

4.5 输出参数

参数 描述
sugFIS Sugeno 模糊推理系统,以结构形式返回。 sugFIS 具有以下特点:
- 具有常量输出隶属度函数,其值对应于 mamFIS 中输出隶属度函数的质心。
- 使用加权平均去模糊化方法。
- 使用乘积蕴含方法。
- 使用求和聚合方法。
sugFIS 的其余属性,包括输入隶属度函数和规则定义,与 mamFIS 保持不变。

4.6 示例

% 加载 Mamdani 模糊推理系统
mam_fismat = readfis('mam22.fis');

% 将该系统转换为 Sugeno 模糊推理系统
sug_fismat = mam2sug(mam_fismat);

% 绘制两个模糊系统的输出曲面
subplot(2,2,1)
gensurf(mam_fismat)
title('Mamdani system (Output 1)')
subplot(2,2,2)
gensurf(sug_fismat)
title('Sugeno system (Output 1)')
subplot(2,2,3)
gensurf(mam_fismat,gensurfOptions('OutputIndex',2))
title('Mamdani system (Output 2)')
subplot(2,2,4)
gensurf(sug_fismat,gensurfOptions('OutputIndex',2))
title('Sugeno system (Output 2)')

4.7 提示

  • 如果你有一个运行良好的 Mamdani 模糊推理系统,可以考虑使用 mam2sug 函数将其转换为计算效率更高的 Sugeno 结构,以提高性能。
  • 如果 sugFIS 有一个单一的输出变量,并且你有适当的测量输入/输出训练数据,可以使用 anfis 函数调整 sugFIS 的隶属度函数参数。

4.8 兼容性考虑

mam2sug 函数将在未来版本中被移除,从 R2018b 开始不建议使用。要更新代码,将函数名从 mam2sug 改为 convertToSugeno ,语法是等效的。

4.9 流程图

graph TD;
    A[加载 Mamdani 模糊推理系统 mamFIS] --> B[调用 mam2sug 函数];
    B --> C[返回 Sugeno 模糊推理系统 sugFIS];
    C --> D[绘制输出曲面];

5. mf2mf 函数

5.1 功能概述

mf2mf 函数用于在隶属度函数之间转换参数。不过,该函数将在未来版本中被移除,建议使用 fismf 对象的点表示法来转换隶属度函数。

5.2 语法

outParams = mf2mf(inParams,inType,outType)

5.3 详细描述

该函数将一种类型的隶属度函数的参数转换为另一种隶属度函数的参数。有时这种转换会导致信息丢失,即如果将输出参数转换回原始隶属度函数类型,转换后的隶属度函数可能与原始函数不同。

5.4 输入参数

参数 描述
inParams 初始隶属度函数参数,以向量形式指定。
inType 初始隶属度函数类型,可以是以下隶属度函数之一: 'gbellmf' 'gaussmf' 'gauss2mf' 'trimf' 'trapmf' 'sigmf' 'dsigmf' 'psigmf' 'zmf' 'pimf' 'smf'
outType 最终隶属度函数类型,可以是以下隶属度函数之一: 'gbellmf' 'gaussmf' 'gauss2mf' 'trimf' 'trapmf' 'sigmf' 'dsigmf' 'psigmf' 'zmf' 'pimf' 'smf'

5.5 输出参数

参数 描述
outParams 最终隶属度函数参数,以向量形式返回。

5.6 示例

% 创建广义钟形隶属度函数的参数
x = 0:0.1:5;
mf1 = [1 2 3];

% 将参数转换为三角形隶属度函数的参数
mf2 = mf2mf(mf1,'gbellmf','trimf');

% 绘制两个函数进行比较
plot(x,gbellmf(x,mf1),x,trimf(x,mf2))
legend('Generalized bell-shaped','Triangle-shaped','Location','South')
ylim([-0.05 1.05])

5.7 兼容性考虑

mf2mf 函数将在未来版本中被移除,从 R2018b 开始不建议使用。现在,当更改隶属度函数类型时,参数会自动转换。

% 旧方法
fis = readfis('tipper');
oldType = fis.input(1).mf(1).type;
oldParams = fis.input(1).mf(1).params;
fis.input(1).mf(1).type = newType;
fis.input(1).mf(1).params = mf2mf(oldParams,oldType,newType);

% 新方法
fis = readfis('tipper');
fis.Inputs(1).MembershipFunctions(1).Type = newType;

5.8 流程图

graph TD;
    A[指定初始隶属度函数参数 inParams 和类型 inType] --> B[指定最终隶属度函数类型 outType];
    B --> C[调用 mf2mf 函数];
    C --> D[返回最终隶属度函数参数 outParams];
    D --> E[绘制函数进行比较];

6. mfedit 函数

6.1 功能概述

mfedit 函数用于打开隶属度函数编辑器。

6.2 语法

mfedit
mfedit(fis)
mfedit(fileName)

6.3 详细描述

使用隶属度函数编辑器,你可以指定每个输入和输出变量的范围。然后,对于每个变量,你可以定义隶属度函数的数量、每个隶属度函数的类型以及隶属度函数参数。

6.4 输入参数

参数 描述
fis 模糊推理系统,可以是 mamfis sugfis 对象,在 MATLAB 工作区中指定。
fileName 文件名,以字符串或字符向量形式指定,可以包含或不包含 .fis 扩展名。该文件必须在当前工作目录或 MATLAB 路径中。

6.5 示例

% 加载模糊推理系统
fis = readfis('tipper');

% 打开隶属度函数编辑器并加载该模糊系统
mfedit(fis)

6.6 兼容性考虑

对将模糊推理系统表示为结构的支持将在未来版本中被移除,建议使用 mamfis sugfis 对象代替。可以使用 convertfis 函数将现有的模糊推理系统结构转换为对象。

6.7 流程图

graph TD;
    A[加载或创建模糊推理系统 fis] --> B[调用 mfedit 函数];
    B --> C[打开隶属度函数编辑器];

7. newfis 函数

7.1 功能概述

newfis 函数用于创建新的模糊推理系统。不过,该函数将在未来版本中被移除,建议使用 mamfis sugfis 函数代替。

7.2 语法

fis = newfis(name)
fis = newfis(name,Name,Value)

7.3 详细描述

fis = newfis(name) 返回一个具有指定名称的默认 Mamdani 模糊推理系统。 fis = newfis(name,Name,Value) 返回一个具有使用一个或多个名称 - 值对参数指定属性的模糊推理系统。

7.4 输入参数

参数 描述
name 模糊推理系统名称,以字符向量或字符串形式指定。
Name,Value 可选的名称 - 值对参数,用于指定模糊推理系统的属性。例如:
- 'FISType' :模糊推理系统类型,可以是 'mamdani' (默认)或 'sugeno'
- 'AndMethod' :AND 模糊运算符方法,可以是 'min' 'prod' 或自定义函数名称。
- 'OrMethod' :OR 模糊运算符方法,可以是 'max' 'probor' 或自定义函数名称。
- 'ImplicationMethod' :蕴含方法,可以是 'min' 'prod' 或自定义函数名称。
- 'AggregationMethod' :聚合方法,可以是 'max' 'sum' 'probor' 或自定义函数名称。
- 'DefuzzificationMethod' :去模糊化方法,可以是 'centroid' 'bisector' 'mom' 'lom' 'som' 'wtaver' 'wtsum' 或自定义函数名称。

7.5 输出参数

参数 描述
fis 模糊推理系统,以 FIS 结构形式返回。该模糊系统使用指定的名称 - 值对参数进行配置,初始时没有输入变量、输出变量或规则。可以使用 addvar addRule 函数添加变量或规则,也可以使用模糊逻辑设计器编辑该模糊系统。

7.6 示例

% 创建默认 Mamdani 模糊推理系统
sys = newfis('fis')

% 创建默认 Sugeno 模糊推理系统
sys = newfis('fis','FISType','sugeno')

% 创建使用 'bisector' 去模糊化和 'prod' 蕴含的 Mamdani 模糊推理系统
sys = newfis('fis','DefuzzificationMethod','bisector',...
                   'ImplicationMethod','prod');

7.7 兼容性考虑

newfis 函数将在未来版本中被移除,从 R2018b 开始不建议使用。建议使用 mamfis sugfis 函数代替。以下是一些典型的 newfis 使用方式及如何更新代码的示例:
| 旧代码形式 | 新代码形式 |
| ---- | ---- |
| fis = newfis(name) | fis = mamfis('Name',name) |
| fis = newfis(name,'FISType','mamdani') | fis = mamfis('Name',name) |
| fis = newfis(name,'FISType','sugeno') | fis = sugfis('Name',name) |
| fis = newfis(name,'FISType','mamdani','AndMethod','prod') | fis = mamfis('Name',name,'AndMethod','prod') |
| fis = newfis(name,'FISType','sugeno','OrMethod','probor') | fis = sugfis('Name',name,'OrMethod','probor') |

7.8 流程图

graph TD;
    A[指定模糊推理系统名称 name] --> B[指定可选的名称 - 值对参数 Name,Value];
    B --> C[调用 newfis 函数];
    C --> D[返回模糊推理系统 fis];

8. 函数总结与对比

8.1 功能总结

函数名 功能概述 是否移除 替代函数
getTunableValues 从模糊推理系统中获取可调参数的值
linsmf 使用线性 S 形饱和隶属度函数计算模糊隶属度值 可使用 fismf 对象
linzmf 使用线性 Z 形饱和隶属度函数计算模糊隶属度值 可使用 fismf 对象
mam2sug 将 Mamdani 模糊推理系统转换为 Sugeno 模糊推理系统 convertToSugeno
mf2mf 在隶属度函数之间转换参数 使用 fismf 对象的点表示法
mfedit 打开隶属度函数编辑器
newfis 创建新的模糊推理系统 mamfis 或 sugfis

8.2 输入输出参数对比

函数名 输入参数 输出参数
getTunableValues fis(模糊推理系统对象),paramset(可调参数设置数组) paramvals(可调参数值数组)
linsmf x(输入值),params(隶属度函数参数向量 [a b]) y(隶属度值)
linzmf x(输入值),params(隶属度函数参数向量 [a b]) y(隶属度值)
mam2sug mamFIS(Mamdani 模糊推理系统结构) sugFIS(Sugeno 模糊推理系统结构)
mf2mf inParams(初始隶属度函数参数向量),inType(初始隶属度函数类型),outType(最终隶属度函数类型) outParams(最终隶属度函数参数向量)
mfedit fis(模糊推理系统对象)或 fileName(文件名) 打开隶属度函数编辑器
newfis name(模糊推理系统名称),可选的 Name,Value 对参数 fis(模糊推理系统结构)

8.3 流程图对比

不同函数的流程图虽然具体步骤有所不同,但整体上都有输入、处理和输出的过程,以下是一个通用的流程图表示:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([指定输入参数]):::startend --> B(调用函数):::process
    B --> C([返回输出结果]):::startend

9. 实际应用建议

9.1 隶属度函数的选择

  • 线性 S 形和 Z 形隶属度函数 :当需要表示具有一定斜率变化的隶属关系时,可以选择 linsmf linzmf 函数。例如,在描述温度从低到高的隶属度变化时,线性 S 形函数可以很好地表示这种渐变关系。
  • 其他隶属度函数 :根据具体问题的特点,还可以选择 gbellmf (广义钟形隶属度函数)、 gaussmf (高斯隶属度函数)等。如果问题具有对称性和连续性,高斯隶属度函数可能是一个不错的选择。

9.2 模糊推理系统的转换

  • Mamdani 到 Sugeno 的转换 :如果已经有一个运行良好的 Mamdani 模糊推理系统,并且希望提高计算效率,可以使用 mam2sug (或替代函数 convertToSugeno )将其转换为 Sugeno 模糊推理系统。具体步骤如下:
    1. 加载 Mamdani 模糊推理系统:
mam_fismat = readfis('your_mamdani_fis.fis');
2. 进行转换:
sug_fismat = convertToSugeno(mam_fismat);
3. 验证转换结果:可以绘制两个系统的输出曲面进行比较。
subplot(2,2,1)
gensurf(mam_fismat)
title('Mamdani system (Output 1)')
subplot(2,2,2)
gensurf(sug_fismat)
title('Sugeno system (Output 1)')

9.3 隶属度函数参数的转换

  • 旧方法与新方法 :在更新代码时,应尽量使用新的方法。例如,将隶属度函数类型从 gbellmf 转换为 trimf
    • 旧方法:
fis = readfis('tipper');
oldType = fis.input(1).mf(1).type;
oldParams = fis.input(1).mf(1).params;
fis.input(1).mf(1).type = 'trimf';
fis.input(1).mf(1).params = mf2mf(oldParams,oldType,'trimf');
- 新方法:
fis = readfis('tipper');
fis.Inputs(1).MembershipFunctions(1).Type = 'trimf';

9.4 模糊推理系统的创建

  • 使用新函数 :在创建模糊推理系统时,建议使用 mamfis sugfis 代替 newfis 。例如,创建一个名为 ‘my_fis’ 的 Mamdani 模糊推理系统:
fis = mamfis('Name','my_fis');

10. 总结

本文详细介绍了多个与模糊推理系统相关的函数,包括其功能、语法、输入输出参数、示例以及兼容性考虑。在实际应用中,应根据具体需求选择合适的函数,并注意函数的更新和替代情况。对于即将被移除的函数,应尽快更新代码以保证程序的稳定性和兼容性。同时,通过流程图和示例代码,帮助读者更好地理解和使用这些函数,从而构建和优化模糊推理系统。

通过对这些函数的学习和应用,读者可以更加熟练地进行模糊推理系统的设计、开发和优化,为解决实际问题提供有力的支持。希望本文能够对读者在模糊逻辑领域的学习和实践有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值