30、模糊逻辑工具箱函数解析与应用

模糊逻辑工具箱函数解析与应用

1. parsrule 函数

parsrule 函数用于解析模糊规则,但在未来版本中将被移除,建议使用 addRule 函数替代。

1.1 语法
  • outFIS = parsrule(inFIS,ruleList)
  • outFIS = parsrule(inFIS,ruleList,Name,Value)
1.2 描述
  • outFIS = parsrule(inFIS,ruleList) 返回一个模糊推理系统 outFIS ,它与输入的模糊系统 inFIS 等效,但模糊规则被 ruleList 中指定的规则所取代。
  • outFIS = parsrule(inFIS,ruleList,Name,Value) 使用一个或多个名称 - 值对参数指定的选项来解析 ruleList 中的规则。
1.3 示例

以下是不同规则格式和语言下添加规则的示例:

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

% 使用默认 'verbose' 格式指定规则
rule1 = "If service is poor or food is rancid then tip is cheap";
rule2 = "If service is excellent and food is not rancid then tip is generous";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules);

% 使用符号表达式指定规则
rule1 = "service==poor | food==rancid => tip=cheap";
rule2 = "service==excellent & food~=rancid => tip=generous";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules,'Format','symbolic');

% 使用隶属函数索引指定规则
fis = readfis('mam22.fis');
rule1 = "1 2, 1 4 (1) : 1";
rule2 = "-1 1, 3 2 (1) : 1";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules,'Format','indexed');

% 使用法语指定规则
fis = readfis('tipper');
rule1 = "Si service est poor ou food est rancid alors tip est cheap";
rule2 = "Si service est excellent et food n'est_pas rancid alors tip est generous";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules,'Language','francais');

% 添加单条规则
a = readfis('tipper');
ruleTxt = 'If service is poor then tip is cheap';
a2 = parsrule(a,ruleTxt,'verbose');
1.4 输入参数
  • inFIS :模糊推理系统,指定为 FIS 结构, parsrule 不会修改 inFIS
  • ruleList :模糊规则,可以是字符数组、字符串数组、字符向量或字符串。具体形式如下:
  • 字符数组,每行对应一条规则。
  • 字符串数组,每个元素对应一条规则。
  • 字符向量或字符串指定单条规则。
1.5 名称 - 值对参数
  • Format :规则格式,可选值为 'verbose' (默认)、 'symbolic' 'indexed'
  • 'verbose' :使用语言表达式,规则权重可在规则文本末尾指定,默认值为 1。
  • 'symbolic' :使用与语言无关的符号表达式,规则权重同样可在末尾指定。
  • 'indexed' :使用输入和输出隶属函数(MF)索引,格式为 <input MFs>, <output MFs>, (<weight>) : <logical operator - 1(AND), 2(OR)>
  • Language :规则语言,可选值为 'english' (默认)、 'francais' 'deutsch'
规则组件 英语 法语 德语
前件开始 if si wenn
AND and et und
OR or ou oder
后件开始(蕴含) then alors dann
IS is est ist
IS NOT is not n’est_pas ist nicht
1.6 输出参数

outFIS :输出模糊推理系统,返回为 FIS 结构,与 inFIS 相同,只是规则列表仅包含 ruleList 中指定的规则。

1.7 兼容性考虑

parsrule 将在未来版本中移除,建议使用 addRule 替代。代码更新如下:

% 之前使用 parsrule 添加规则
rule1 = "1 2, 1 4 (1) : 1";
rule2 = "-1 1, 3 2 (1) : 1";
rules = [rule1 rule2];
fis = parsrule(fis,rules,'Format','indexed');

% 现在使用 addRule
rule1 = [1 2 1 4 1 1];
rule2 = [-1 1 3 2 1 1];
rules = [rule1; rule2];
fis = addRule(fis,rules);
2. pimf 函数

pimf 函数用于计算基于样条的 π 形隶属函数的模糊隶属度值。

2.1 语法

y = pimf(x,params)

2.2 描述

该函数返回使用基于样条的 π 形隶属函数计算的模糊隶属度值。隶属函数由 smf 函数和 zmf 函数的乘积给出:
[
f(x; a, b, c, d) =
\begin{cases}
0, & x \leq a \
2(\frac{x - a}{b - a})^2, & a \leq x \leq \frac{a + b}{2} \
1 - 2(\frac{x - b}{b - a})^2, & \frac{a + b}{2} \leq x \leq b \
1, & b \leq x \leq c \
1 - 2(\frac{x - c}{d - c})^2, & c \leq x \leq \frac{c + d}{2} \
2(\frac{x - d}{d - c})^2, & \frac{c + d}{2} \leq x \leq d \
0, & x \geq d
\end{cases}
]
参数 params 应指定为向量 [a b c d]

2.3 示例
% 指定输入值
x = 0:0.1:10;
% 计算隶属度值
y = pimf(x,[1 4 5 10]);
% 绘制隶属函数
plot(x,y)
title('pimf, P = [1 4 5 10]')
xlabel('x')
ylabel('Degree of Membership')
ylim([-0.05 1.05])
2.4 输入参数
  • x :输入值,指定为标量或向量。
  • params :隶属函数参数,指定为长度为 4 的向量 [a b c d]
2.5 输出参数

y :隶属度值,返回为标量或向量,其维度与 x 匹配。

2.6 替代功能

可以使用 fismf 对象来创建和评估 pimf 隶属函数:

mf = fismf("pimf",P);
Y = evalmf(mf,X);
3. plotfis 函数

plotfis 函数用于显示模糊推理系统。

3.1 语法
  • plotfis(fis)
  • plotfis(tree)
  • plotfis(tree,Legend="on")
3.2 描述
  • plotfis(fis) 显示类型 1 或类型 2 模糊推理系统(FIS)的高级图。
  • plotfis(tree) 显示相互连接的 FIS 对象树的高级图。
  • plotfis(tree,Legend="on") 通过添加图例显示指定 fistree 对象的输入、输出和连接信息。
3.3 示例
% 显示模糊推理系统
fis = readfis('tipper');
plotfis(fis);

% 显示模糊推理系统树
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','fis2','NumInputs',2,'NumOutputs',2);
fis3 = sugfis('Name','fis3','NumInputs',3,'NumOutputs',1);
con1 = ["fis1/output1" "fis3/input1"];
con2 = ["fis2/output1" "fis3/input2"];
con3 = ["fis1/input2" "fis2/input1"];
tree = fistree([fis1 fis2 fis3],[con1; con2; con3]);
plotfis(tree,Legend="on");
3.4 输入参数
  • fis :模糊推理系统,可以是 mamfis 对象、 sugfis 对象、 mamfistype2 对象或 sugfistype2 对象。
  • tree :相互连接的模糊推理系统树,指定为 fistree 对象。
3.5 兼容性考虑
  • 从 R2021b 开始, plotfis 函数显示 FIS 树的可视化表示,之前在 MATLAB 命令窗口中显示 FIS 树属性摘要。
  • 从 R2019b 开始警告,未来版本将移除对将模糊推理系统表示为结构的支持,建议使用 mamfis sugfis 对象。
4. plotmf 函数

plotmf 函数用于绘制输入或输出变量的隶属函数。

4.1 语法
  • plotmf(fis,variableType,variableIndex)
  • plotmf( ___ ,numPoints)
  • [xOut,mfOut] = plotmf( ___ )
  • [xOut,umfOut,lmfOut] = plotmf( ___ )
4.2 描述
  • plotmf(fis,variableType,variableIndex) 绘制模糊推理系统 fis 中输入或输出变量的隶属函数。
  • plotmf( ___ ,numPoints) 指定每个隶属函数要绘制的数据点数。
  • [xOut,mfOut] = plotmf( ___ ) 返回论域( xOut )和隶属函数( mfOut )值,不进行绘制,适用于类型 1 模糊推理系统。
  • [xOut,umfOut,lmfOut] = plotmf( ___ ) 返回论域( xOut )、上隶属函数( umfOut )和下隶属函数( lmfOut )值,不进行绘制,适用于类型 2 模糊推理系统。
4.3 示例
% 绘制输入变量的隶属函数
fis = readfis('tipper');
plotmf(fis,'input',1);

% 指定绘制点数
plotmf(fis,'output',1,101);

% 获取隶属函数绘制数据
[xOut,yOut] = plotmf(fis,'input',2);
plot(xOut(:,2),yOut(:,2))
xlabel('food')
ylabel('delicious membership')

% 绘制类型 2 FIS 的隶属函数
fis = mamfistype2('NumInputs',3,'NumOutputs',1);
plotmf(fis,'input',1);
4.4 输入参数
  • fis :模糊推理系统,可以是 mamfis 对象、 sugfis 对象、 mamfistype2 对象或 sugfistype2 对象。
  • variableType :变量类型,可选值为 'input' 'output'
  • variableIndex :变量索引,指定为正整数。
  • numPoints :要绘制的数据点数,默认值为 181。
4.5 输出参数
  • xOut :论域数据,返回为 numPoints NMF 列的数组。
  • mfOut :类型 1 隶属函数数据,返回为 numPoints NMF 列的数组。
  • umfOut :类型 2 隶属函数的上隶属函数数据,返回为 numPoints NMF 列的数组。
  • lmfOut :类型 2 隶属函数的下隶属函数数据,返回为 numPoints NMF 列的数组。
4.6 兼容性考虑

从 R2019b 开始警告,未来版本将移除对将模糊推理系统表示为结构的支持,建议使用 mamfis sugfis 对象。

4. probor 函数

probor 函数用于计算概率或(也称为代数和)。

4.1 语法

y = probor(x)

4.2 描述

该函数返回 x 中各列的概率或值。在模糊推理过程中, probor 函数可作为模糊运算符或聚合运算符。

4.3 示例
% 定义论域
x = 0:0.1:10;
% 定义两个高斯隶属函数
y1 = gaussmf(x,[0.5 4]);
y2 = gaussmf(x,[2 7]);
% 计算概率或
y = probor([y1;y2]);
% 绘制结果
plot(x,[y1;y2;y])
legend('y1','y2','y')
ylim([-0.05 1.05])
ylabel('Membership')
xlabel('Input Value')
4.4 输入参数

x :模糊输入值,指定为数组或行向量。

4.5 输出参数

y :概率或值,返回为行向量,列数与 x 相同。

总结

本文详细介绍了模糊逻辑工具箱中的几个重要函数,包括 parsrule pimf plotfis plotmf probor 。这些函数在模糊推理系统的构建、评估和可视化方面发挥着重要作用。在使用这些函数时,需要注意它们的语法、输入输出参数以及兼容性问题。例如, parsrule 函数将在未来版本中被移除,建议使用 addRule 替代;同时,从 R2019b 开始警告,未来将移除对将模糊推理系统表示为结构的支持,应使用 mamfis sugfis 对象。通过合理使用这些函数,可以更高效地开发和分析模糊推理系统。

展望

随着模糊逻辑技术的不断发展,模糊逻辑工具箱可能会引入更多的功能和改进。未来可能会有更强大的隶属函数、更智能的规则解析方法以及更直观的可视化工具。同时,对于模糊推理系统在不同领域的应用,如机器学习、控制理论等,也需要进一步探索和研究,以充分发挥模糊逻辑的优势。

模糊逻辑工具箱函数解析与应用(续)

5. 函数操作流程总结

为了更清晰地展示这些函数的使用流程,下面给出相应的 mermaid 流程图。

5.1 parsrule 函数使用流程
graph LR
    A[加载模糊推理系统 inFIS] --> B[定义规则列表 ruleList]
    B --> C{选择是否使用名称 - 值对参数}
    C -- 是 --> D[指定 Name,Value 参数]
    C -- 否 --> E[调用 parsrule(inFIS,ruleList)]
    D --> F[调用 parsrule(inFIS,ruleList,Name,Value)]
    E --> G[得到输出模糊推理系统 outFIS]
    F --> G
5.2 pimf 函数使用流程
graph LR
    A[指定输入值 x] --> B[指定隶属函数参数 params]
    B --> C[调用 pimf(x,params)]
    C --> D[得到隶属度值 y]
    D --> E{是否绘制隶属函数}
    E -- 是 --> F[绘制隶属函数 plot(x,y)]
    E -- 否 --> G[结束]
5.3 plotfis 函数使用流程
graph LR
    A{选择输入类型} --> B1[选择模糊推理系统 fis]
    A --> B2[选择模糊推理系统树 tree]
    B1 --> C1[调用 plotfis(fis)]
    B2 --> C2{是否显示图例}
    C2 -- 是 --> D[调用 plotfis(tree,Legend="on")]
    C2 -- 否 --> E[调用 plotfis(tree)]
5.4 plotmf 函数使用流程
graph LR
    A[选择模糊推理系统 fis] --> B[选择变量类型 variableType]
    B --> C[选择变量索引 variableIndex]
    C --> D{是否指定绘制点数}
    D -- 是 --> E[指定 numPoints]
    D -- 否 --> F[使用默认 numPoints]
    E --> G[调用 plotmf(fis,variableType,variableIndex,numPoints)]
    F --> G
    G --> H{是否获取数据不绘制}
    H -- 是 --> I[根据系统类型获取相应数据]
    H -- 否 --> J[绘制隶属函数]
5.5 probor 函数使用流程
graph LR
    A[定义模糊输入值 x] --> B[调用 probor(x)]
    B --> C[得到概率或值 y]
    C --> D{是否绘制结果}
    D -- 是 --> E[绘制结果 plot(x,y)]
    D -- 否 --> F[结束]
6. 函数应用场景分析

这些函数在不同的场景下有着各自独特的应用价值。

6.1 parsrule 函数应用场景
  • 规则更新 :当需要对现有的模糊推理系统的规则进行更新时,可以使用 parsrule 函数。例如,在一个餐厅小费推荐系统中,随着餐厅服务和菜品质量评估标准的变化,需要更新小费推荐规则。
  • 规则定制 :根据不同的业务需求,可以定制特定的规则。比如在工业控制领域,针对不同的生产环境和设备状态,定制不同的控制规则。
6.2 pimf 函数应用场景
  • 模糊建模 :在模糊系统建模中, pimf 函数可以用于定义模糊集合的隶属函数。例如,在图像识别中,对图像的亮度、颜色等特征进行模糊建模。
  • 数据处理 :在处理具有模糊性的数据时,使用 pimf 函数可以将数据映射到模糊集合中。比如在气象预报中,对温度、湿度等气象数据进行模糊处理。
6.3 plotfis 函数应用场景
  • 系统可视化 :在开发模糊推理系统时,使用 plotfis 函数可以直观地展示系统的结构和规则。例如,在教学过程中,向学生展示模糊推理系统的工作原理。
  • 系统调试 :在调试模糊推理系统时,通过 plotfis 函数可以快速发现系统中可能存在的问题。比如检查输入输出变量和隶属函数的配置是否正确。
6.4 plotmf 函数应用场景
  • 隶属函数分析 :在设计模糊推理系统时,使用 plotmf 函数可以分析输入输出变量的隶属函数。例如,调整隶属函数的参数,观察其对系统性能的影响。
  • 数据验证 :在获取实际数据后,使用 plotmf 函数可以验证数据是否符合预设的隶属函数。比如在传感器数据处理中,验证传感器采集的数据是否在合理的模糊范围内。
6.5 probor 函数应用场景
  • 模糊逻辑运算 :在模糊推理过程中, probor 函数可以作为模糊运算符或聚合运算符。例如,在多传感器融合中,对不同传感器的输出进行模糊逻辑运算。
  • 决策分析 :在决策问题中,使用 probor 函数可以对不同的决策方案进行模糊评估。比如在投资决策中,对不同投资项目的风险和收益进行模糊分析。
7. 函数使用注意事项

在使用这些函数时,还需要注意以下几点:

7.1 版本兼容性
  • 如前面所述, parsrule 函数将在未来版本中被移除,建议尽早使用 addRule 函数替代。
  • 从 R2019b 开始警告,未来将移除对将模糊推理系统表示为结构的支持,应使用 mamfis sugfis 对象。在编写代码时,要考虑到这些兼容性问题,避免在未来版本中出现错误。
7.2 参数设置
  • 不同的函数有不同的输入参数,要确保参数的类型和取值范围正确。例如, parsrule 函数的 ruleList 参数可以是字符数组、字符串数组、字符向量或字符串,要根据实际情况选择合适的形式。
  • 在使用名称 - 值对参数时,要注意参数的名称和取值。比如 parsrule 函数的 Format 参数,可选值为 'verbose' 'symbolic' 'indexed' ,要根据规则的表达方式选择合适的格式。
7.3 性能优化
  • 在处理大规模数据时,要考虑函数的性能问题。例如,在使用 plotmf 函数绘制大量隶属函数时,可以适当调整 numPoints 参数,减少不必要的计算。
  • 对于复杂的模糊推理系统,要合理设计规则和隶属函数,避免规则过多或隶属函数过于复杂导致系统性能下降。

总结与建议

本文全面介绍了模糊逻辑工具箱中的 parsrule pimf plotfis plotmf probor 函数,包括它们的语法、使用示例、输入输出参数、应用场景和注意事项。这些函数为模糊推理系统的开发、分析和可视化提供了强大的工具。

为了更好地使用这些函数,建议开发者:
1. 及时关注函数的版本更新和兼容性问题,避免在未来版本中出现错误。
2. 在实际应用中,根据具体的业务需求选择合适的函数和参数设置,以提高系统的性能和效果。
3. 结合具体的应用场景,对函数进行灵活运用和扩展,开发出更高效、更智能的模糊推理系统。

随着模糊逻辑技术的不断发展,相信这些函数将在更多的领域得到广泛应用,为解决复杂的实际问题提供有力的支持。同时,开发者也应该不断学习和探索新的技术和方法,进一步提升模糊推理系统的性能和应用价值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值