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,可灵活适应不同需求。

### 模糊控制系统的隶属度函数 #### 定义与基本概念 隶属度函数是模糊集合中用于衡量元素属于某一集合的程度的工具。传统集合中的指示函数仅能取0或1两个值,表明元素完全属于或完全不属于该集合;而在模糊集合中,隶属度函数允许连续变化,在\[0, 1\]区间内取值,以此表达成员资格的真实程度[^3]。 #### 类及其特点 在MATLAB环境中实现了多种类的隶属度函数供研究者选用,具体如下: - **高斯(Gaussian)**:状呈钟状曲线分布,适用于平滑过渡场景。 - **三角(Triangular)**:由三个参数决定顶点位置及宽度,适合简单线性关系建模。 - **梯(Trapezoidal)**:四边结构,两端水平部分代表绝对肯定区域,中间斜坡区则体现不确定性范围。 - **Sigmoidal(S-shaped)**:类似于逻辑回归曲线,可用于描述渐变过程。 - **Z-shaped** 和 **Pi-shaped (π-shaped)**:分别呈现左偏态和双峰特性,适应不同应用场景需求。 上述每一种式都有各自独特的数学表达方式以及适用场合,通过调整相应参数可灵活改变图特征以贴合实际问题背景[^1]。 #### 实现方法示例 下面给出一段Python代码片段展示如何创建并绘制简单的三角隶属度函数图像: ```python import numpy as np import matplotlib.pyplot as plt def triangular_membership(x, a, b, c): """计算给定点x对于指定参数[a,b,c]所定义的三角隶属度""" if x <= a or x >= c: return 0 elif a < x <= b: return (x - a) / (b - a) else: # when b<x<c return (c - x) / (c - b) # 参数设置 a, b, c = 2, 5, 8 x_values = np.linspace(-1, 10, 400) y_values = [triangular_membership(xi, a, b, c) for xi in x_values] plt.plot(x_values, y_values) plt.title('Triangular Membership Function') plt.xlabel('Input Value') plt.ylabel('Membership Degree') plt.grid(True) plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搏博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值