前文我们已经了解了多种隶属函数,如三角形、梯形、高斯型、S型和Z型,并且讨论了模糊推理的基本过程,包括模糊化、规则评估、聚合和解模糊化。我们还了解了如何生成模糊规则的方法,比如专家经验、聚类分析、决策树、遗传算法和ANFIS。所以现在到了深入探讨模糊推理的具体步骤,特别是规则激活部分的时候。
文章:
1.模糊推理规则生成方法详解:https://lzm07.blog.csdn.net/article/details/146468868
2.图解模糊推理过程(超详细步骤):图解模糊推理过程(超详细步骤)-CSDN博客
3.Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例:Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例-CSDN博客
4.Z型隶属函数(Z-shaped Membership Function)的详细介绍及python示例:Z型隶属函数(Z-shaped Membership Function)的详细介绍及python示例-CSDN博客
5.S型隶属函数(Sigmoid Membership Function)的详细介绍及python示例:S型隶属函数(Sigmoid Membership Function)的详细介绍及python示例-CSDN博客
更多请看我博客。
规则激活(Rule Activation)指的是根据输入变量的隶属度确定每条规则对输出的影响程度。常见的激活方法包括最小-蕴含法、乘积-蕴含法、有界积法、 drastic积法等。这些方法各有特点,适用于不同的场景。
在模糊推理过程中,规则激活是确定每条模糊规则对最终输出的贡献程度的关键步骤。其核心是通过输入变量的隶属度计算规则的激活强度(Firing Strength),并将该强度作用于输出隶属函数。以下对常见的激活方法及其详细说明:
一、最小-蕴含法(Min-Implication,Mamdani方法)
1.原理:
激活强度:取所有前件条件隶属度的最小值。
输出隶属度:将激活强度作为截断阈值,对输出隶属函数进行裁剪(即取隶属度与激活强度的最小值)。
2.数学表达式:
3.示例:
(1)规则:“如果温度高(μT=0.8)且湿度高(μH=0.6),则阀门全开”。
(2)激活强度:min(0.8,0.6)=0.6。
(3)输出隶属度:将“全开”隶属函数在高度0.6处截断。
4.特点:
(1)优点:计算简单,直观易实现。
(2)缺点:可能丢失部分信息,输出隶属函数被过度裁剪。
(3)适用场景:实时控制系统(如空调、洗衣机)。
总结:最小-蕴含法(Mamdani方法)是取前件隶属度的最小值作为规则的激活强度,然后用这个值去裁剪后件的隶属函数。这种方法计算简单,但可能导致输出信息损失。乘积法则将前件隶属度相乘,保持更多的信息,但计算量稍大。
二、乘积-蕴含法(Product-Implication,Takagi-Sugeno方法)
1.原理:
激活强度:取所有前件条件隶属度的乘积。
输出隶属度:将激活强度与输出隶属函数相乘。
2.数学表达式:
3.示例:
(1)规则:“如果温度高(μT =0.8)且湿度高(μH =0.6),则阀门开度Y=0.8×0.6×100%=48%”。
(2)激活强度:0.8×0.6=0.48。
(3)输出隶属度:将“全开”隶属函数按比例0.48缩放。
4.特点:
(1)优点:保留更多信息,输出更平滑。
(2)缺点:计算复杂度略高。
(3)适用场景:高精度控制(如机器人轨迹跟踪)。
三、Larsen乘积法(Larsen Product)
1.原理:与乘积-蕴含法类似,但输出隶属函数的缩放方式不同。
2.数学表达式:
3.特点:
(1)优点:输出隶属度形状保留更完整。
(2)缺点:需归一化处理。
(3)适用场景:需保持输出曲线形状的系统(如语音识别)。
四、有界积法(Bounded Product)
1.原理:激活强度与前件隶属度的有界积()。
2.数学表达式:
3.特点:
(1)优点:抑制低激活强度的规则。
(2)缺点:可能过度抑制弱规则。
(3)适用场景:需严格过滤弱响应的系统(如安全关键控制)。
五、Drastic积法(Drastic Product)
1.原理:极端情况下的激活强度计算,仅当所有前件隶属度为1时激活。
2.数学表达式:
3.特点:
(1)优点:严格匹配规则条件。
(2)缺点:灵活性差,极少实际应用。
六、加权平均法(Weighted Average,用于Takagi-Sugeno模型)
1.原理:每条规则的激活强度作为权重,对输出值加权平均。
2.数学表达式:
3.示例:
规则1:激活强度0.6 → 输出80%。
规则2:激活强度0.4 → 输出50%。
最终输出:Y=(0.6×80+0.4×50)/(0.6+0.4)=68%。
4.特点:
(1)优点:输出为精确值,无需解模糊化。
(2)缺点:仅适用于Takagi-Sugeno模型。
(3)适用场景:实时性要求高的系统(如汽车ABS控制)。
七、方法对比与选择建议
方法 | 计算复杂度 | 输出平滑性 | 信息保留 | 适用场景 |
最小-蕴含法 | 低 | 差 | 低 | 简单实时控制(Mamdani) |
乘积-蕴含法 | 中 | 高 | 高 | 高精度控制(Takagi-Sugeno) |
Larsen乘积法 | 中 | 高 | 高 | 需保持输出形状 |
有界积法 | 低 | 中 | 中 | 安全关键系统 |
加权平均法 | 低 | - | - | 实时输出(TS模型) |
八、Python代码示例,对比规则激活
以下是一个Python示例代码,展示如何实现这些激活方法,并用图形展示不同方法的效果,可以帮助大家更直观地理解。对比原始输出隶属函数(“全开”)、最小-蕴含法结果(隶属度在0.6处截断)和乘积-蕴含法结果(隶属度按0.6比例缩放)的代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 定义输入范围
x = np.linspace(0, 10, 100)
# 后件隶属函数(全开阀门)
def consequent_mf(x):
return np.where(x <= 5, 0,
np.where(x <= 10, (x - 5)/5, 0))
# 激活方法实现
def min_implication(strength, mf):
return np.minimum(strength, mf)
def product_implication(strength, mf):
return strength * mf
# 前件激活强度
firing_strength = 0.6 # 假设规则激活强度为0.6
# 计算输出隶属度
mf = consequent_mf(x)
output_min = min_implication(firing_strength, mf)
output_product = product_implication(firing_strength, mf)
# 可视化
plt.figure(figsize=(10, 4))
plt.plot(x, mf, 'k--', label='Original MF')
plt.plot(x, output_min, 'r', lw=2, label='Min-Implication')
plt.plot(x, output_product, 'b', lw=2, label='Product-Implication')
plt.title('Rule Activation Methods Comparison')
plt.xlabel('Valve Opening (%)')
plt.ylabel('Membership Degree')
plt.legend()
plt.grid(True)
plt.show()
输出说明
(1)黑色虚线:原始输出隶属函数(“全开”)。
(2)红色曲线:最小-蕴含法结果(隶属度在0.6处截断)。
(3)蓝色曲线:乘积-蕴含法结果(隶属度按0.6比例缩放)。
总结
选择激活方法需平衡计算效率、输出平滑性和信息保留需求。
Mamdani模型常用最小或乘积法,适合需模糊输出的场景。
Takagi-Sugeno模型多用加权平均法,适合实时精确控制。
实际系统中可通过实验对比不同方法的效果,选择最优策略。