Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例

news2025/3/25 14:40:27

        我们前文已经深度解读了三角形、梯形、高斯、S型和Z型隶属函数,现在转向Pi型。当然我们先简要回顾不同隶属函数的特点和曲线效果。了解每种隶属函数的特性是为了更好的应用。

一、回顾五种隶属函数的特点

        1.从每种隶属函数的结构和特点角度对比。三角形隶属函数,结构简单,计算效率高,但可能不够平滑。梯形则扩展了三角形,有更宽的顶部,适用于更广的区间,但同样可能有突变的问题。高斯函数基于正态分布,平滑且对称,适合自然现象,但计算复杂一些。S型和Z型是互补的,S型递增,Z型递减,适合单边变化,但不能处理对称或多峰的情况。

        2.从优缺点角度对比。三角形需要提到简单高效,但不够灵活;梯形覆盖更广但不够平滑;高斯平滑但计算量大;S型适合单边但参数敏感;Z型类似但方向相反。以下是五种隶属函数优缺点的简单总结:

(1)三角形隶属函数

·优点:计算高效、简单直观,适合快速建模;

·缺点:隶属度变化不够平滑,无法描述宽泛区间。

详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146400949

(2)梯形隶属函数

·优点:支持更宽的隶属区间,灵活性略高于三角形;

·缺点:过渡区域仍有突变,不适用于自然渐变场景。

详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146400949

(3)高斯隶属函数

·优点:平滑对称,适合自然现象建模;

·缺点:计算复杂度较高,参数(标准差)物理意义不够直观。

详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146400949

(4)S型隶属函数

·优点:单边平滑递增,适合描述“高值”渐变;

·缺点:无法描述对称或多峰集合,参数调整敏感。

详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146439053

(5)Z型隶属函数

·优点:单边平滑递减,适合描述“低值”渐变;

·缺点:与S型类似,是S型的反向,无法覆盖对称逻辑,需结合其他函数使用。

详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146443321

        3.从如何选择适合的隶属函数角度对比。实时系统可能需要计算效率高的三角形或梯形,而需要平滑处理的情况可能用高斯或S/Z型。

        4.从参数调整的难易程度角度对比。三角形只能调整三个点,而梯形可以调整四个点。高斯函数的参数虽不如梯形直观,但通过标准差和均值调整比梯形灵活。S型Z型通过斜率和中心点调整,但需要处理正负参数,可能对新手不够直观。

二、对比五种隶属函数的图形

        接下来,对比三角形、梯形、高斯、S型和Z型隶属函数的图形,并将它们放在同一张图中展示,可以更直观的了解各隶属函数的不同。当然,由于这几种隶属函数的定义和参数不同,所以我们需要先确定每个函数的参数,三角形的a、b、c,梯形的a、b、c、d,高斯的中心和标准差,S型和Z型的斜率和中心点。为了图形美观,可能需要调整参数,使得各个函数在同一个x范围内(比如0到10)有部分重叠,便于比较。

        例如,设定x从0到10,三角形函数的参数是a=2, b=5, c=8,梯形是a=1, b=3, c=7, d=9,高斯中心在5,标准差1.5,S型中心在3,斜率2,Z型中心在7,斜率-2。这样各个函数在图形中分布合理,不会重叠太多,又能展示各自特点。

        以下是使用Python绘制三角形、梯形、高斯、S型和Z型隶属函数的综合图形代码,所有曲线在同一坐标系中展示:

import numpy as np

import matplotlib.pyplot as plt



# ========================

# 隶属函数定义

# ========================

def triangular_mf(x, a, b, c):

    """三角形隶属函数"""

    return np.where(x <= a, 0,

           np.where(x <= b, (x - a)/(b - a),

           np.where(x <= c, (c - x)/(c - b), 0)))



def trapezoidal_mf(x, a, b, c, d):

    """梯形隶属函数"""

    return np.where(x <= a, 0,

           np.where(x <= b, (x - a)/(b - a),

           np.where(x <= c, 1,

           np.where(x <= d, (d - x)/(d - c), 0))))



def gaussian_mf(x, center, sigma):

    """高斯隶属函数"""

    return np.exp(-(x - center)**2 / (2 * sigma**2))



def sigmoid_mf(x, slope, center):

    """S型隶属函数"""

    return 1 / (1 + np.exp(-slope * (x - center)))



def z_mf(x, slope, center):

    """Z型隶属函数(S型的反向)"""

    return 1 - sigmoid_mf(x, slope, center)



# ========================

# 参数设置与计算

# ========================

x = np.linspace(0, 10, 1000)  # X轴范围



# 参数配置

tri_params = (2, 5, 8)           # 三角形参数 (a, b, c)

trap_params = (1, 3, 7, 9)        # 梯形参数 (a, b, c, d)

gauss_params = (5, 1.2)           # 高斯参数 (μ, σ)

s_params = (2, 3)                 # S型参数 (k, x₀)

z_params = (-2, 7)                # Z型参数 (k, x₀)



# 计算所有隶属度

y_tri = triangular_mf(x, *tri_params)

y_trap = trapezoidal_mf(x, *trap_params)

y_gauss = gaussian_mf(x, *gauss_params)

y_s = sigmoid_mf(x, *s_params)

y_z = z_mf(x, *z_params)



# ========================

# 可视化设置

# ========================

plt.figure(figsize=(10, 6), dpi=100)



# 启用数学文本渲染

plt.rcParams.update({

    "text.usetex": False,          # 不使用LaTeX(避免依赖)

    "mathtext.default": "regular", # 普通数学字体

    "font.family": "serif",        # 衬线字体

    "font.serif": ["Times New Roman"],

    "axes.unicode_minus": False    # 解决负号显示问题

})



# 绘制所有曲线(使用LaTeX语法)

plt.plot(x, y_tri, lw=3,

         label=r'Triangular $(a=2,\ b=5,\ c=8)$')

plt.plot(x, y_trap, lw=3,

         label=r'Trapezoidal $(a=1,\ b=3,\ c=7,\ d=9)$')

plt.plot(x, y_gauss, lw=3,

         label=r'Gaussian $(\mu=5,\ \sigma=1.2)$')

plt.plot(x, y_s, '--', lw=3,

         label=r'S-shaped $(k=2,\ x_0=3)$')

plt.plot(x, y_z, ':', lw=3,

         label=r'Z-shaped $(k=-2,\ x_0=7)$')



# 图形装饰

plt.title('Membership Function Comparison', fontsize=14, pad=20)

plt.xlabel(r'Input Value $(x)$', fontsize=12)

plt.ylabel(r'Membership Degree $(\mu)$', fontsize=12)

plt.legend(loc='upper right', framealpha=0.9)

plt.grid(True, alpha=0.3)

plt.xlim(0, 10)

plt.ylim(-0.05, 1.05)



# 添加辅助线

plt.axhline(0, color='black', lw=0.5)

plt.axhline(1, color='black', lw=0.5)



plt.tight_layout()

plt.show()

输出图形说明:

(1)实线:三角形(蓝色)、梯形(橙色)、高斯(绿色)

(2)虚线:S型(红色)

(3)点线:Z型(紫色)

参数设置特点:

(1)三角形(2,5,8):Triangular (a=2, b=5, c=8),展示标准对称三角形

(2)梯形(1,3,7,9):Trapezoidal (a=1, b=3, c=7, d=9),展示宽平台特性

(3)高斯(5,1.2):Gaussian (μ=5, σ=1.2),中心对称平滑曲线

(4)S型(斜率2, 中心3):S-shaped (k=2, x₀=3),左侧快速上升

(5)Z型(斜率-2, 中心7):Z-shaped (k=-2, x₀=7),右侧快速下降

三、Pi型隶属函数

        经以上对比分析,我们了解到每一种隶属函数都有优缺点。接下来学习Pi型隶属函数。

        Pi型隶属函数(Π-shaped Membership Function)是一种对称的隶属函数,其形状类似于希腊字母“Π”,中间区域隶属度为1,两侧通过S型或Z型函数平滑过渡到0。它常用于描述“中等范围”或“接近目标值”的模糊概念,例如“适中温度”或“正常风险”。

1. 数学定义

Pi型隶属函数通常由两个S型函数组合而成

·左侧:递增S型函数(从0到1)。

·右侧:递减Z型函数(从1到0)。

其数学表达式为:

其中:

S(x,a,c) 是S型函数:

c:中心点,隶属度为1的区间中心。

w:控制隶属度为1的区间宽度(半宽)。

a1 ,a2:分别控制左侧和右侧曲线的陡峭程度。

2. 特点

(1)对称性:关于中心点c 对称

(2)平滑过渡:两侧通过S型函数平滑下降到0

(3)灵活调整:w 控制中间平坦区域的宽度。a1 ,a2控制左右两侧的陡峭程度(|a|越大,过渡越陡峭)

(4)应用场景:适合描述对称且需要中间高隶属度的模糊集合。

3. 应用场景

(1)温度控制:定义“适中温度”区间。

(2)风险评估:描述“正常风险”范围。

(3)工业控制:设定设备运行的“理想转速区间”。

(4)图像处理:识别“中等亮度”像素。

4. Python实现与可视化

以下是生成Pi型隶属函数图的Python代码示例:

import numpy as np

import matplotlib.pyplot as plt



def sigmoid(x, a, c):

    """S型函数"""

    return 1 / (1 + np.exp(-a * (x - c)))



def pi_shaped_mf(x, c, w, a_left, a_right):

    """Pi型隶属函数"""

    left = sigmoid(x, a_left, c - w)

    right = 1 - sigmoid(x, a_right, c + w)

    return left * right



# 定义参数

c = 5.0    # 中心点

w = 2.0    # 半宽(隶属度为1的区间为 [c - w, c + w])

a_left = 3.0  # 左侧S型斜率

a_right = 3.0  # 右侧Z型斜率



# 生成输入值

x = np.linspace(0, 10, 1000)



# 计算隶属度

y = [pi_shaped_mf(t, c, w, a_left, a_right) for t in x]



# 绘制图形

plt.figure(figsize=(8, 4))

plt.plot(x, y, label=f'Π-shaped MF: c={c}, w={w}, a_left={a_left}, a_right={a_right}')

plt.title('Π-shaped Membership Function')

plt.xlabel('x')

plt.ylabel('Membership Degree (μ)')

plt.legend()

plt.grid(True)

plt.show()

 代码说明

(1)函数定义:

·sigmoid:实现S型函数,用于构建Pi型函数的左侧和右侧。

·pi_shaped_mf:通过左侧S型函数和右侧Z型函数的乘积生成Pi型隶属度。

(2)参数设置:

·c = 5.0:中心点,隶属度为1的区间中心为x=5。

·w = 2.0:半宽,隶属度为1的区间为[5-2,5+2]=[3,7]。

·a_left = 3.0和a_right = 3.0:控制左右两侧的陡峭程度。

(3)运行结果:

图形在x=3到x=7之间隶属度接近1,两侧平滑下降至0。

5. 参数调整示例

(1)调整半宽w:

w = 1.0  # 隶属度为1的区间变窄([4, 6])

中间高隶属度区域缩小,两侧过渡更快。

(2)调整斜率a:

a_left = 5.0  # 左侧更陡峭

a_right = 1.0  # 右侧更平缓

左侧从0到1的过渡更陡,右侧从1到0的过渡更平缓。

6. 与高斯隶属函数的对比

特征

Pi型隶属函数

高斯隶属函数

数学形式

S型函数组合

指数函数

对称性

对称

对称

计算复杂度

中等(涉及多个指数运算)

中等(单指数运算)

参数意义

中心点c、半宽w、斜率a

中心点c、标准差σ

适用场景

需明确平坦区间的对称模糊集合

自然现象中的对称模糊集合

7. 优缺点分析

优点:明确控制中间平坦区间的宽度(w)。两侧过渡陡峭程度可独立调整(aleft,aright)。

缺点:计算复杂度略高于高斯函数。参数较多,调整需要更多经验。

8. 实际应用案例

案例:空调系统的“适中温度”控制

(1)输入变量:温度T(范围:10°C到30°C)。

(2)Pi型参数:c=20°C,w=5°C,aleft=aright=2.0。

(3)逻辑说明:

当温度在15°C 到25°C 之间时,隶属度为1(完全属于“适中温度”)。

温度低于15°C 或高于25°C 时,隶属度平滑下降。

9. 总结

        Pi型隶属函数通过组合S型和Z型函数,提供了对对称中间区域的灵活描述能力。它特别适用于需要明确平坦区间且两侧需平滑过渡的场景(如控制系统的“理想范围”)。通过调整参数c,w,a,可快速适配不同需求,是模糊逻辑工具箱中的重要组成部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 入门大全:常用函数

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)

目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) &#xff08;1&#xff09;安装axios。(vue工程目录) &#xff08;2&#xff09;封装请求工具类。(request.js) <1&…

JVM垃圾回收笔记02-垃圾回收器

文章目录 前言1.串行(Serial 收集器/Serial Old 收集器)Serial 收集器Serial Old 收集器相关参数-XX:UseSerialGC 2.吞吐量优先(Parallel Scavenge 收集器/Parallel Old 收集器)Parallel Scavenge 收集器Parallel Old 收集器相关参数-XX:UseParallelGC ~ -XX:UseParallelOldGC-…

Linux上位机开发实战(编写API库)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们自己编写linux上位机软件的时候&#xff0c;尽量都是通过框架库的形式来开发。这就是所谓的低耦合&#xff0c;高内聚。相似的功能、模块和算法…

器件功耗模型原理

器件功耗模型原理 谷歌提供了一套通用的器件耗电模型和配置方案&#xff0c;先对器件进行耗电因子拆解&#xff0c;建立器件功耗模型&#xff0c;得到一个器件耗电的计算公式。通过运行时统计器件的使用数据&#xff0c;代入功耗模型&#xff0c;就可以计算出器件的功耗。例如…

拥抱成长型思维:解锁持续进步的人生密码

我强烈推荐4本可以改变命运的经典著作&#xff1a; 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 一、什么是成长型思维&#xff1f; 成长型思维&#xff08;Growth Mindset&#xff09;由斯坦福大学心理学家卡…

Ubuntu上查看GPU使用情况并释放内存

先用nvidia-smi查看GPU当前使用情况 再用fuser 命令查找对应显卡上占用 GPU 的进程 最后查到了用kill -9强制杀掉进程&#xff08;PID&#xff09;即可

解决思科交换机无法访问局域网外设备

问题背景 有时&#xff0c;我们需要远程连接来管理一台思科交换机&#xff0c;例如使用SSH协议。然而交换机运作在链路层&#xff0c;这就需要交换机有一个网络层地址&#xff0c;来接纳基于IP协议的远程访问请求。于是&#xff0c;我们依靠设置一个带有IP地址的交换机虚拟接口…

什么是张量计算

以下是对张量计算的详细介绍&#xff0c;结合数学、物理学及计算机科学等多领域视角&#xff1a; 一、张量的基本定义与性质 1. 张量的数学定义 张量是向量空间及其对偶空间的笛卡尔积上的多重线性映射&#xff0c;可视为多维数组或几何对象。其核心特征在于&#xff1a; 坐…

【1】Java 零基础入门学习(小白专用)

【1】Java 零基础入门学习 &#x1f4da;博客主页&#xff1a;代码探秘者 ✨专栏&#xff1a;《JavaSe从入门到精通》 其他更新ing… ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;作者水…

[c语言日寄]枚举类型

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

【氧化镓】​​​​掺杂在β-Ga2O3材料中引入的深能级缺陷

1. 引言 1.1 β-Ga2O3材料的特性与应用前景 β-Ga2O3作为一种新型的宽禁带半导体材料,具有约4.6-4.8 eV的宽带隙、高击穿场强(约8 MV/cm)和优异的热稳定性,适用于高功率和射频电子器件。其独特的物理特性使其在高电压、高频率以及高功率应用场景中具有巨大的潜力。例如,…

仅靠prompt,Agent难以自救

Alexander的观点很明确&#xff1a;未来 AI 智能体的发展方向还得是模型本身&#xff0c;而不是工作流&#xff08;Work Flow&#xff09;。还拿目前很火的 Manus 作为案例&#xff1a;他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体&#xff0c;…

Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!

一、引言&#xff1a;自动化测试的“瓶颈”与MCP的革新 传统自动化测试依赖开发者手动编写脚本&#xff0c;不仅耗时且容易因页面动态变化失效。例如&#xff0c;一个简单的登录流程可能需要开发者手动定位元素、处理等待逻辑&#xff0c;甚至反复调试超时问题。而MCP&#xf…

计算机操作系统(五) 前趋图和程序执行与进程的描述(附带图谱表格更好对比理解))

计算机操作系统&#xff08;五&#xff09; 前趋图和程序执行与进程的描述 前言一、前趋图和程序执行1.1前趋图1.2程序的顺序执行1.3程序的并发执行 二、进程的描述2.1进程的定义与特征2.2进程的基本状态与转换2.3挂起的操作系统和进程的转换2.4进程管理中的数据结构 总结&…

C/C++静态库的理解和制作

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是⼀种可执行代码的二进制形式&#xff0c;可以被操作系统…

【redis】主从复制:单点问题、配置详解、特点详解

文章目录 单点问题什么是主从复制主从模式能解决的问题并发量有限可用性问题 配置建立复制通过配置文件来指定端口配置主从查看集群结构 断开复制 特点安全性只读传输延迟 单点问题 分布式系统中&#xff0c;涉及到一个非常关键的问题&#xff1a;单点问题 某个服务器程序&…

android......

事件源&#xff0c;就是视图对象&#xff0c;先注册一个监听器&#xff0c;等待用户触发了屏幕&#xff0c;一旦触发会立即产生一个事件源&#xff0c;事件源会生成一个用户点击的触发事件&#xff0c;此刻监听器会立马监听到 &#xff0c;然后监听器调用回调方法 UI理解 全称用…

常见中间件漏洞(tomcat)

CVE-2017-12615 当在Tomcat的conf&#xff08;配置目录下&#xff09;/web.xml配置文件中添加readonly设置为false时&#xff0c;将导致该漏洞产生&#xff0c;&#xff08;需要允许put请求&#xff09; , 攻击者可以利用PUT方法通过精心构造的数据包向存在漏洞的服务器里面上传…

计算机网络高频(二)TCP/IP基础

计算机网络高频(二)TCP/IP基础 1.什么是TCP/IP⭐⭐ TCP/IP是一种网络通信协议,它是互联网中最常用的协议之一。TCP/IP有两个基本的协议:TCP(传输控制协议)和IP(互联网协议)。 TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的协议。它负…