跳至内容

模糊推理

模糊推理 (Fuzzy Inference) 是模糊系统的核心计算流程,负责将精确输入通过模糊规则库转化为精确输出。整个过程分为三个阶段:模糊化规则推理去模糊化

推理流水线

精确输入 → [模糊化] → 模糊隶属度 → [推理引擎 + 规则库] → 模糊输出 → [去模糊化] → 精确输出

这条流水线是模糊系统的"脊柱",所有类型的模糊系统(Mamdani、T-S、ANFIS)都遵循这一基本结构,只是在各步骤的具体实现上有所不同。

第一步:模糊化

模糊化 (Fuzzification) 将精确的输入值映射为各模糊集上的隶属度。

例如,输入温度 x=28°Cx = 28°C,系统中定义了三个语言值"低"“中"“高”,分别有各自的隶属函数。模糊化的过程就是计算 μ(28)\mu_{\text{低}}(28)μ(28)\mu_{\text{中}}(28)μ(28)\mu_{\text{高}}(28) 的值。

假设结果为 μ=0\mu_{\text{低}} = 0μ=0.6\mu_{\text{中}} = 0.6μ=0.4\mu_{\text{高}} = 0.4,表示 28°C “主要属于中等温度,部分属于高温”。

对于多输入系统,每个输入变量独立进行模糊化。

第二步:规则推理

规则推理 (Rule Evaluation) 将模糊化后的隶属度与模糊规则库进行匹配和计算。

规则激活强度

每条规则的激活强度 (Firing Strength) 由前件条件的隶属度决定。对于 AND 连接的规则:

αk=min(μA1(x1),μA2(x2),) \alpha_k = \min(\mu_{A_1}(x_1), \mu_{A_2}(x_2), \dots)

例如规则"IF 温度 is 高 AND 湿度 is 大 THEN …",如果 μ(28)=0.4\mu_{\text{高}}(28) = 0.4μ(75)=0.7\mu_{\text{大}}(75) = 0.7,则该规则的激活强度为 α=min(0.4,0.7)=0.4\alpha = \min(0.4, 0.7) = 0.4

输出推理

对于 Mamdani 系统:用激活强度"截断"后件模糊集。如果后件是"风扇转速 is 快”,对应的隶属函数被截取到 α\alpha 的水平。最终将所有规则截取后的输出模糊集叠加(取 max 或求和)。

对于 T-S 系统:直接用后件函数计算输出值 yk=fk(x1,x2,)y_k = f_k(x_1, x_2, \dots),然后用激活强度加权平均:

y=kαkykkαk y = \frac{\sum_k \alpha_k \cdot y_k}{\sum_k \alpha_k}

T-S 系统直接得到精确输出,不需要去模糊化步骤。

第三步:去模糊化

去模糊化 (Defuzzification) 将 Mamdani 系统的模糊输出集合转化为一个精确数值。

常用去模糊化方法

方法公式说明优先级
重心法 (Centroid)y=yμ(y)dyμ(y)dyy^* = \frac{\int y \cdot \mu(y) dy}{\int \mu(y) dy}输出模糊集的"质心"位置,最常用⭐⭐⭐⭐⭐
最大隶属度法y=argmaxyμ(y)y^* = \arg\max_y \mu(y)取隶属度最高的点,计算简单⭐⭐⭐⭐
加权平均法y=αkckαky^* = \frac{\sum \alpha_k \cdot c_k}{\sum \alpha_k}对各规则中心的加权平均⭐⭐⭐⭐
平均最大值法取所有最大隶属度点的平均值⭐⭐⭐

重心法是默认选择,因为它考虑了输出模糊集的完整形状,产生的输出最平滑。最大隶属度法在实时性要求高的场景中更有优势。

II 型系统的额外步骤

对于 II 型模糊系统,由于隶属度本身是模糊的(用 FOU 表示),在去模糊化之前需要先做类型约简 (Type Reduction)

推理

与 I 型类似,但输出是一个 II 型模糊集(区间形式)。

类型约简

将 II 型输出降维为 I 型(或精确区间)。常用的 Karnik-Mendel (KM) 算法通过迭代计算左右端点。

去模糊化

对约简后的 I 型结果进行去模糊化,输出精确值。

类型约简是 II 型模糊系统计算复杂度高于 I 型的主要原因。区间 II 型模糊集 (IT2FS) 的类型约简比一般 II 型要简单得多,这也是 IT2FS 成为主流 II 型形式的原因。

完整示例

以一个温度控制器为例说明 Mamdani 系统的完整推理过程:

规则库

  • Rule 1: IF 温度 is 低 THEN 加热 is 强
  • Rule 2: IF 温度 is 中 THEN 加热 is 中
  • Rule 3: IF 温度 is 高 THEN 加热 is 弱

输入:温度 = 28°C

模糊化μ(28)=0\mu_{\text{低}}(28) = 0μ(28)=0.6\mu_{\text{中}}(28) = 0.6μ(28)=0.4\mu_{\text{高}}(28) = 0.4

激活:Rule 1 激活强度 0,Rule 2 激活强度 0.6,Rule 3 激活强度 0.4

输出合成:将"加热 is 中"截取到 0.6、“加热 is 弱"截取到 0.4,叠加后得到输出模糊集

去模糊化:对叠加后的输出模糊集用重心法计算精确输出值