别再死记硬背了!用‘洗衣机洗衣服’这个例子,5分钟搞懂模糊推理(附Python代码)

news2026/5/3 9:32:47
洗衣机里的智慧用生活案例轻松掌握模糊推理技术每次把衣服扔进洗衣机时我们都会面临一个看似简单却充满不确定性的问题该洗多久这件日常小事背后隐藏着人类思维处理模糊信息的精妙机制——而这正是模糊逻辑技术试图模拟的过程。传统计算机只能处理是或否的二元判断但现实世界充满了有点脏、比较油这类模糊概念。本文将用洗衣机这个生活案例带你理解模糊推理的核心思想并亲手用Python构建一个智能洗衣决策系统。1. 模糊逻辑当计算机学会差不多思考1965年加州大学伯克利分校的Lotfi Zadeh教授提出了模糊集合理论彻底改变了计算机处理不确定性的方式。与传统的布尔逻辑非黑即白不同模糊逻辑允许灰色地带存在——就像我们判断衣服脏污程度时很少会说绝对干净或完全肮脏而是使用有点脏、中等脏、非常脏等程度描述。模糊推理的三个核心概念隶属度函数量化某个值属于某个模糊集合的程度。比如60%脏的衣服可能属于中等脏的隶属度为0.7属于非常脏的隶属度为0.3模糊规则库存储人类经验形成的如果...那么...规则例如如果衣服中等脏且油脂较多那么洗涤时间较长去模糊化将模糊推理结果转换为具体的操作值如将较长洗涤时间转换为具体的85分钟import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl # 定义输入输出变量范围 sludge ctrl.Antecedent(np.arange(0, 101, 1), sludge) # 污泥程度0-100% grease ctrl.Antecedent(np.arange(0, 101, 1), grease) # 油脂程度0-100% washing_time ctrl.Consequent(np.arange(0, 121, 1), washing_time) # 洗涤时间0-120分钟这个基础代码框架建立了我们的模糊推理系统所需的变量空间。接下来我们需要为每个变量定义其模糊集合和对应的隶属度函数。2. 构建洗衣机的感官系统隶属度函数设计隶属度函数是模糊系统的感官神经它将精确的输入值(如污泥指数65)转换为对各个模糊概念(如中等脏、比较脏)的隶属程度。设计合理的隶属度函数是模糊系统能否准确模拟人类判断的关键。污泥程度的模糊分类模糊标签描述三角函数参数典型场景SD污泥少[0, 0, 50]只穿过一次的衬衫MD污泥中等[0, 50, 100]日常穿着的T恤LD污泥多[50, 100,100]运动后的运动服# 污泥隶属函数 sludge[SD] fuzz.trimf(sludge.universe, [0, 0, 50]) sludge[MD] fuzz.trimf(sludge.universe, [0, 50, 100]) sludge[LD] fuzz.trimf(sludge.universe, [50, 100, 100]) # 油脂隶属函数 grease[NG] fuzz.trimf(grease.universe, [0, 0, 50]) grease[MG] fuzz.trimf(grease.universe, [0, 50, 100]) grease[LG] fuzz.trimf(grease.universe, [50, 100, 100]) # 洗涤时间隶属函数 washing_time[VS] fuzz.trimf(washing_time.universe, [0, 0, 30]) washing_time[S] fuzz.trimf(washing_time.universe, [0, 30, 60]) washing_time[M] fuzz.trimf(washing_time.universe, [30, 60, 90]) washing_time[L] fuzz.trimf(washing_time.universe, [60, 90, 120]) washing_time[VL] fuzz.trimf(washing_time.universe, [90, 120, 120])提示trimf是三角隶属函数三个参数分别代表三角形左顶点、顶点和右顶点的位置。你也可以尝试使用trapmf(梯形隶属函数)或gaussmf(高斯隶属函数)来获得不同的模糊化效果。3. 让洗衣机拥有经验模糊规则库构建模糊规则库相当于设备的经验知识库存储着从人类操作经验中提炼出的决策规则。在我们的洗衣案例中这些规则通常遵循如果污泥程度是X且油脂程度是Y那么洗涤时间是Z的形式。洗衣规则矩阵油脂\污泥SD(少)MD(中)LD(多)NG(少)VS(很短)S(短)M(中等)MG(中)M(中等)M(中等)L(长)LG(多)L(长)L(长)VL(很长)# 定义模糊控制规则 rule1 ctrl.Rule(sludge[SD] grease[NG], washing_time[VS]) rule2 ctrl.Rule(sludge[SD] grease[MG], washing_time[M]) rule3 ctrl.Rule(sludge[SD] grease[LG], washing_time[L]) rule4 ctrl.Rule(sludge[MD] grease[NG], washing_time[S]) rule5 ctrl.Rule(sludge[MD] grease[MG], washing_time[M]) rule6 ctrl.Rule(sludge[MD] grease[LG], washing_time[L]) rule7 ctrl.Rule(sludge[LD] grease[MG], washing_time[L]) rule8 ctrl.Rule(sludge[LD] grease[LG], washing_time[VL]) # 创建控制系统 washing_ctrl ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8]) washing ctrl.ControlSystemSimulation(washing_ctrl)这些规则捕捉了人类洗衣时的直觉判断当污渍和油脂都很少时洗涤时间可以非常短随着污渍或油脂的增加洗涤时间需要相应延长当两者都很严重时则需要很长的洗涤时间。4. 从模糊到精确完整推理过程实践现在让我们用这个系统实际处理几个洗衣场景观察模糊推理的全过程。假设我们有一件运动后沾满汗渍和体油的T恤传感器测得污泥指数为70油脂指数为60。# 输入传感器数据 washing.input[sludge] 70 washing.input[grease] 60 # 执行模糊推理 washing.compute() # 输出结果 print(推荐洗涤时间:, washing.output[washing_time], 分钟) # 可视化推理过程 sludge.view(simwashing) grease.view(simwashing) washing_time.view(simwashing)推理过程分解模糊化阶段污泥指数70属于MD(中)的隶属度0.6属于LD(多)的隶属度0.4油脂指数60属于MG(中)的隶属度0.8属于LG(多)的隶属度0.2规则激活Rule5: IF MD AND MG THEN M → 激活强度min(0.6,0.8)0.6Rule6: IF MD AND LG THEN L → 激活强度min(0.6,0.2)0.2Rule7: IF LD AND MG THEN L → 激活强度min(0.4,0.8)0.4Rule8: IF LD AND LG THEN VL → 激活强度min(0.4,0.2)0.2结果聚合与去模糊化各规则结果加权平均最终得到洗涤时间约78分钟这个结果符合我们的日常经验——对于比较脏但油脂不算特别多的衣服适中的长时间洗涤是合理的选择。模糊推理系统的优势在于它不需要我们明确设定污泥超过多少就是脏的硬性阈值而是通过平滑的隶属度函数和灵活的规则组合模拟人类处理模糊概念时的思维方式。5. 超越洗衣机模糊推理的广泛应用虽然我们以洗衣机为例但模糊推理技术的应用远不止于此。这项技术特别适合那些难以用精确数学模型描述但人类凭经验能很好处理的复杂系统。典型应用场景对比应用领域输入变量示例输出决策优势体现家电控制温度偏差、变化率加热功率调节处理非线性和时滞汽车自动驾驶距离、相对速度刹车力度模仿人类驾驶的平滑决策医疗诊断症状程度、检验指标疾病可能性处理医学中的不确定性金融风险评估市场波动、信用历史风险等级综合多种模糊因素工业控制压力、流量、温度阀门开度复杂工况下的稳定控制# 扩展案例空调温度模糊控制系统框架 temperature ctrl.Antecedent(np.arange(15, 31, 1), temperature) humidity ctrl.Antecedent(np.arange(30, 91, 1), humidity) cooling_power ctrl.Consequent(np.arange(0, 101, 1), cooling_power) # 定义隶属函数... # 定义规则如如果温度高且湿度大则制冷功率高... # 构建控制系统...模糊推理之所以在这些领域表现优异是因为它具备几个关键特性能够处理不精确的传感器数据、可以整合人类专家的经验规则、对系统参数变化具有较强的鲁棒性。当系统复杂性增加时传统的精确数学模型往往变得难以建立和维护而基于规则的模糊系统却能通过添加新的规则来扩展功能保持可管理性。6. 优化与进阶提升模糊系统性能基础模糊系统虽然简单有效但在实际应用中可能需要进一步优化。以下是几种常见的改进方向1. 隶属函数优化尝试不同的隶属函数形状三角形、梯形、高斯型调整重叠区域以获得更平滑的过渡使用非对称函数处理特殊范围# 示例使用梯形隶属函数 washing_time[L] fuzz.trapmf(washing_time.universe, [60, 75, 90, 120])2. 规则库优化添加更多中间状态提高精度引入权重区分规则重要性使用机器学习自动提取规则3. 去模糊化方法选择质心法(常用)计算整个模糊集合的质心最大隶属度法选择隶属度最大的点平均最大法取所有最大点的平均值注意不同的去模糊化方法会导致不同的系统行为。质心法通常产生最平滑的输出但计算量较大最大隶属度法实现简单但可能不够精确。4. 与其它AI技术结合神经模糊系统用神经网络学习隶属函数参数遗传算法优化自动寻找最优规则组合模糊认知地图处理更复杂的因果关系# 神经模糊系统示例框架 from sklearn.neural_network import MLPRegressor from skfuzzy import membership # 使用神经网络优化隶属函数参数 X_train [...] # 训练输入 y_train [...] # 期望输出 model MLPRegressor().fit(X_train, y_train) # 调整后的隶属函数参数 optimized_params model.predict(...) sludge[MD] fuzz.trimf(sludge.universe, optimized_params)在实际项目中模糊系统往往不是孤立使用的。将模糊逻辑与其它AI技术结合可以发挥各自优势构建更强大的智能系统。例如模糊系统擅长处理知识和规则而神经网络擅长从数据中学习模式两者结合可以创建既有专家知识又能自适应学习的混合智能系统。7. 开发实践构建完整的洗衣模糊控制系统让我们将前面介绍的各个部分整合起来构建一个完整的洗衣机模糊控制程序。这个程序将包括用户界面、模糊推理引擎和结果可视化功能。import numpy as np import matplotlib.pyplot as plt import skfuzzy as fuzz from skfuzzy import control as ctrl class FuzzyWashingSystem: def __init__(self): # 初始化模糊变量 self.sludge ctrl.Antecedent(np.arange(0, 101, 1), sludge) self.grease ctrl.Antecedent(np.arange(0, 101, 1), grease) self.washing_time ctrl.Consequent(np.arange(0, 121, 1), washing_time) # 自动配置隶属函数 self._setup_membership_functions() # 自动生成规则 self._generate_rules() # 创建控制系统 self.control_system ctrl.ControlSystem(self.rules) self.simulation ctrl.ControlSystemSimulation(self.control_system) def _setup_membership_functions(self): # 污泥隶属函数 self.sludge[SD] fuzz.trimf(self.sludge.universe, [0, 0, 50]) self.sludge[MD] fuzz.trimf(self.sludge.universe, [0, 50, 100]) self.sludge[LD] fuzz.trimf(self.sludge.universe, [50, 100, 100]) # 油脂隶属函数 self.grease[NG] fuzz.trimf(self.grease.universe, [0, 0, 50]) self.grease[MG] fuzz.trimf(self.grease.universe, [0, 50, 100]) self.grease[LG] fuzz.trimf(self.grease.universe, [50, 100, 100]) # 洗涤时间隶属函数 self.washing_time[VS] fuzz.trimf(self.washing_time.universe, [0, 0, 30]) self.washing_time[S] fuzz.trimf(self.washing_time.universe, [0, 30, 60]) self.washing_time[M] fuzz.trimf(self.washing_time.universe, [30, 60, 90]) self.washing_time[L] fuzz.trimf(self.washing_time.universe, [60, 90, 120]) self.washing_time[VL] fuzz.trimf(self.washing_time.universe, [90, 120, 120]) def _generate_rules(self): self.rules [ ctrl.Rule(self.sludge[SD] self.grease[NG], self.washing_time[VS]), ctrl.Rule(self.sludge[SD] self.grease[MG], self.washing_time[M]), ctrl.Rule(self.sludge[SD] self.grease[LG], self.washing_time[L]), ctrl.Rule(self.sludge[MD] self.grease[NG], self.washing_time[S]), ctrl.Rule(self.sludge[MD] self.grease[MG], self.washing_time[M]), ctrl.Rule(self.sludge[MD] self.grease[LG], self.washing_time[L]), ctrl.Rule(self.sludge[LD] self.grease[MG], self.washing_time[L]), ctrl.Rule(self.sludge[LD] self.grease[LG], self.washing_time[VL]) ] def compute_washing_time(self, sludge_val, grease_val): self.simulation.input[sludge] sludge_val self.simulation.input[grease] grease_val self.simulation.compute() return self.simulation.output[washing_time] def visualize(self): self.sludge.view(simself.simulation) self.grease.view(simself.simulation) self.washing_time.view(simself.simulation) plt.show() # 使用示例 if __name__ __main__: washer FuzzyWashingSystem() # 获取用户输入 sludge_input float(input(请输入污泥指数(0-100): )) grease_input float(input(请输入油脂指数(0-100): )) # 计算并显示结果 time washer.compute_washing_time(sludge_input, grease_input) print(f\n推荐洗涤时间: {time:.1f} 分钟) # 可视化推理过程 washer.visualize()这个完整的实现展示了如何将模糊逻辑应用于实际问题解决。系统封装了所有模糊推理细节提供简单的接口供用户交互。在实际产品中可以进一步扩展这个基础框架例如添加更多输入变量(如衣物材质、颜色)、连接实际传感器、或者增加学习功能自动优化规则。模糊推理技术的魅力在于它让我们能够用相对简单的规则和概念处理现实世界中的复杂性。通过这个洗衣机案例我们不仅学会了一项实用技术更重要的是理解了人类思维与机器推理之间的桥梁是如何搭建的。当你下次面对一个难以用精确规则描述的问题时不妨考虑模糊逻辑这个强大的工具——它可能正是你需要的解决方案。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…