当前位置: 首页 > article >正文

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实现与可视化

1Z型隶属函数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,可灵活适应不同需求。


http://www.kler.cn/a/596731.html

相关文章:

  • 1996-2023年各省公路里程数据(无缺失)
  • DL学习笔记:穿戴设备上的轻量级人体活动识别方法
  • python替换html中所有字体大小
  • C++实现求解24点游戏
  • Matlab:二维绘图篇——不同坐标系下的绘图命令
  • OSCP准备靶场联系-Kioptrix 1
  • Docker逃逸
  • SAP Commerce(Hybris)PCM模块(一):商品批量导入导出
  • 【视频】OrinNX+Ubuntu20.04:移植OpenCV-4.11.0 with CUDA(含opencv_contrib )
  • 解决MySQL 5.6升5.7之后,非空有默认值的字段,报cannot be null Column ‘xxx‘的问题
  • 客户端通过域名访问,dns解析,nfs共享,访问nginx服务首页内容
  • 基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
  • 数据库设计-笔记2
  • 私有云(一)私有云基础架构
  • 蓝桥杯12届 砝码称重
  • C++中的stoi和to_string函数详解:字符串与数值的高效转换工具
  • tauri2程序单例模式实现,二次点击桌面图标显示之前最小化的程序并聚焦
  • Java多线程与高并发专题——为何每次用完 ThreadLocal 都要调用 remove()?
  • 使用 pnpm 安装依赖包后,如果将依赖包直接复制内网环境中,可能会出现无法使用的情况,且不能联网下载,如何解决?
  • 《Python深度学习》第七讲:生成式深度学习