Z型隶属函数(Z-shaped Membership Function)的详细介绍及python示例
Z型隶属函数是模糊逻辑中常用的一种隶属函数,其形状类似于字母“Z”,呈现从1逐渐下降到0的平滑过渡。之前我们已经了解了S型隶属函数,而Z型通常和S型相关,它是S型隶属函数的反向形式,Z型是递减的,而S型是递增的。适用于描述变量从“完全隶属”到“完全不隶属”的递减过程,例如“低温”或“低风险”等模糊概念。
图1 S型隶属函数效果图
有关S型隶属函数的内容可以看我的CSDN文章:https://lzm07.blog.csdn.net/article/details/146439053
1. 数学定义
跟S型隶属函数一样,Z型隶属函数也通常由两个参数定义:
(1)c:中心点,隶属度开始快速下降的位置。
(2)s:斜率参数,控制下降的陡峭程度。
其数学表达式可以表示为:
或简化为基于Sigmoid的反向函数:
其中:
(1)a:控制曲线的陡峭程度(负值表示递减)。
(2)c:隶属度下降到0.5的位置(中点)。
2. 特点
(1)平滑递减:隶属度从1平滑过渡到0,避免突变。
(2)参数灵活:
c 控制中点位置(隶属度0.5对应的输入值)。
a 或 s 控制下降速度(绝对值越大,过渡越陡峭)。
(3)单边性:仅描述从“完全隶属”到“完全不隶属”的单向变化。
3. 应用场景
(1)模糊控制:描述“低温”随温度升高的隶属度递减。
(2)风险评估:定义“低风险”随风险值增加的隶属度下降。
(3)分类系统:判定“非目标类别”的隶属度逐渐降低。
(4)自然语言处理:表示“不满足条件”的渐变过程。
4. Python实现与可视化
(1)Z型隶属函数python代码
以下是生成Z型隶属函数图的Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
def z_shaped_mf(x, c, s):
"""
基于分段二次函数的Z型隶属函数
:param x: 输入值
:param c: 中心点(隶属度开始快速下降的位置)
:param s: 控制下降区间的宽度
:return: 隶属度
"""
if x <= c - s:
return 1.0
elif c - s < x <= c:
return 1 - 2 * ((x - (c - s)) ** 2 / (2 * s)) ** 2
elif c < x <= c + s:
return 2 * (((c + s - x) ** 2) / (2 * s)) ** 2
else:
return 0.0
# 定义参数
c = 5.0 # 中心点
s = 2.0 # 控制下降区间宽度
# 生成输入值
x_values = np.linspace(0, 10, 1000)
# 计算隶属度
y_values = [z_shaped_mf(x, c, s) for x in x_values]
# 绘制图形
plt.figure(figsize=(8, 4))
plt.plot(x_values, y_values, label=f'Z-shaped MF: c={c}, s={s}')
plt.title('Z-shaped Membership Function')
plt.xlabel('x')
plt.ylabel('Membership Degree (μ)')
plt.legend()
plt.grid(True)
plt.show()
(2)代码说明
1)函数定义:
z_shaped_mf函数使用分段二次函数实现Z型曲线,参数 c 和 s 控制形状。
当 x≤c-s 时,隶属度为1;当x>c+s 时,隶属度为0;中间区间平滑过渡。
2)参数设置:
c = 5.0:隶属度从1开始下降的中心点。
s = 2.0:控制下降区间宽度([c-s,c+s] 为过渡区间)。
(3)运行结果:
图形在x=3(即c-s=5-2)之前隶属度为1,之后逐渐下降,在x=7(即c+s=5+2)之后为0。
图2 c = 5.0和s = 2.0时Z型隶属函数效果图
6. 参数调整示例
(1)调整中心点c:
c = 6.0 # 隶属度下降中心右移
隶属度在x=4 到x=8 之间下降。s = 2.0时,效果图如下:
图3 c = 6.0和s = 2.0时Z型隶属函数效果图
(2)调整宽度 s:
s = 1.0 # 下降区间变窄
隶属度在x=4 到x=6之间快速下降。c = 5.0时,效果图如下:
图4 c = 5.0和s = 1.0时Z型隶属函数效果图
7. 与S型隶属函数的对比
(1)Z型:隶属度从1递减到0,适合描述“非”或“低”概念。
(2)S型:隶属度从0递增到1,适合描述“是”或“高”概念。
两者可结合使用,构建对称或互补的模糊集合(例如“低温”和“高温”)。
特征 | Z型隶属函数 | S型隶属函数 |
形状 | 递减曲线(从1到0,类似字母“Z”) | 递增曲线(从0到1,类似字母“S”) |
数学表达式 | ![]() | ![]() |
参数意义 | - c:隶属度0.5的位置 - a:负值控制下降速度 | - c:隶属度0.5的位置 - a:正值控制上升速度 |
适用场景 | 描述“低值”或“否定”概念(如低温、低风险) | 描述“高值”或“肯定”概念(如高温、高风险) |
计算复杂度 | 中等(涉及指数运算) | 中等(与Z型相同) |
平滑性 | 平滑递减,无突变 | 平滑递增,无突变 |
组合使用 | 与S型结合可覆盖全范围(如低温+高温) | 与Z型结合可实现对称逻辑(如低风险+高风险) |
8. 优缺点分析
(1)优点:平滑过渡,避免隶属度突变。参数直观,易于调整形状。
(2)缺点:计算复杂度略高于三角形/梯形函数。无法直接描述多峰或对称集合。
9. 实际应用案例
Z型案例:空调控制系统中的“低温”判定
(1)输入变量:温度T(范围:0°C 到 30°C)。
(2)Z型隶属函数参数:c=15°C,s=5°C。
1)当T≤10°C 时,隶属度为1(完全属于“低温”)。
2)当T 在10°C 到20°C 之间时,隶属度逐渐下降。
3)当T>20°C 时,隶属度为0(不属于“低温”)。
Z型+S型结合案例:温度控制系统
(1)目标:根据温度T 控制冷气阀门开度 Y。
(2)输入变量:温度T(范围:0°C 到 40°C)。
(3)模糊集合:
低温(Z型):隶属度从1递减到0,中心点c=15°C,斜率a=-0.5。
高温(S型):隶属度从0递增到1,中心点c=25°C,斜率a=0.5。
(4)输出逻辑:
若温度“低温”隶属度高,则减少阀门开度。
若温度“高温”隶属度高,则增加阀门开度。
(5)Z型与S型结合使的Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
def sigmoid_mf(x, a, c, is_increasing=True):
"""S型或Z型隶属函数"""
sigmoid = 1 / (1 + np.exp(-a * (x - c)))
return sigmoid if is_increasing else 1 - sigmoid
# 参数设置
x = np.linspace(0, 40, 1000) # 温度范围:0°C 到 40°C
# Z型(低温):中心点15°C,斜率-0.5
z_low = [sigmoid_mf(t, a=-0.5, c=15, is_increasing=False) for t in x]
# S型(高温):中心点25°C,斜率0.5
s_high = [sigmoid_mf(t, a=0.5, c=25, is_increasing=True) for t in x]
# 绘制Z型和S型曲线
plt.figure(figsize=(10, 5))
plt.plot(x, z_low, 'b', label='Z-shaped (Low Temperature: c=15, a=-0.5)')
plt.plot(x, s_high, 'r', label='S-shaped (High Temperature: c=25, a=0.5)')
plt.title('Combined Z-shaped and S-shaped Membership Functions')
plt.xlabel('Temperature (°C)')
plt.ylabel('Membership Degree')
plt.legend()
plt.grid(True)
plt.show()
# 结合使用:计算阀门的建议开度(示例逻辑)
valve_opening = np.maximum(np.array(z_low), np.array(s_high))
# 绘制阀门开度建议
plt.figure(figsize=(10, 5))
plt.plot(x, valve_opening, 'g', label='Valve Opening Suggestion (Max of Z & S)')
plt.title('Valve Opening Based on Combined Membership')
plt.xlabel('Temperature (°C)')
plt.ylabel('Valve Opening Degree')
plt.legend()
plt.grid(True)
plt.show()
代码说明与输出结果
1)参数定义:
·Z型(低温):中心点c=15°C,斜率a=-0.5,表示温度低于15°C时隶属度高,逐渐递减。
·S型(高温):中心点c=25°C,斜率a=0.5,表示温度高于25°C时隶属度高,逐渐递增。
2)图形输出:
·第一张图:展示Z型(蓝色)和S型(红色)隶属函数曲线,低温在左侧隶属度高,高温在右侧隶属度高。
图5 Z型和S型结合隶属函数对输入变量转换效果图
·第二张图:基于两者隶属度的最大值生成阀门开度建议,温度在15°C到25°C之间时,开度由两者的较高值决定。
图6 Z型和S型结合隶属函数对输出变量控制效果图
3)逻辑解释:
当温度低于15°C时,Z型隶属度高,阀门开度低(减少制冷)。
当温度高于25°C时,S型隶属度高,阀门开度高(增强制冷)。
在15°C到25°C之间,阀门开度由两者中较高的隶属度决定,实现平滑过渡。
4)结合使用的优势
·覆盖全范围:Z型和S型组合可描述从“低温”到“高温”的全温度范围。
·平滑过渡:中间区域的隶属度由两者共同决定,避免控制突变。
·灵活调整:通过修改参数 a 和 c,可精确控制过渡区间和陡峭程度。
10. 总结
Z型隶属函数通过平滑递减的特性,为模糊系统提供了描述“否定”或“低值”概念的有效工具。结合S型函数,可构建覆盖全范围的模糊逻辑系统,适用于控制、分类和风险评估等场景。通过调整参数c 和 s,可灵活适应不同需求。