Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果
参考资料:https: // blog.csdn.net / shelgi / article / details / 126908418
————通过下面这个例子,终于能理解一点模糊理论的应用了,感谢原作。
熟悉简单的skfuzzy构建接近生活事件的模糊控制器
假设下面这样的场景, 我们希望构建一套模糊控制系统, 通过室外温度和风的大小来判断穿几件衣服
室外温度的范围设置为0 - 40度, 虽然今年夏天超过40度在我们这边很平常, 但是我们这里还是以40度为最高界限
风的大小范围0 - 10, 这里不是风的级数, 而是我自己构建的大小.模糊理论奥妙就在于不需要精确的逻辑值,
可以模糊描述.比如小风我设置为1 - 3, 然后有点大的风等等, 都是比较抽象的描述, 但是经过隶属函数可以看出, 往往某个值是在多个状态叠加.
衣服的件数我设置为1 - 6(不能一件衣服不穿), 如果按照本人自己的爱好, 我最多也只穿三件.不过考虑到实际还是设一个大点的范围
常见模糊隶属度函数
import matplotlib.pyplot as plt
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt"""scikit-fuzzy模块,它可以实现模糊控制系统1.选择输入输出模糊集2.定义输入输出隶属度函数(不同的隶属度函数,会导致不同的控制特性)3.建立模糊控制表4.建立模糊控制规则5.模糊推理6.反模糊化7.输出结果绘制结果3D图
"""""" 方式一: 调用库函数 """
if 0:temp = ctrl.Antecedent(np.arange(0, 41, 1), 'temp')wind = ctrl.Antecedent(np.arange(0, 11, 1), 'wind')clothes = ctrl.Consequent(np.arange(1, 7, 1), 'clothes')# 自动找成员函数,分为三类temp.automf(3)wind.automf(3)# 设置目标的模糊规则clothes['low'] = fuzz.trimf(clothes.universe, [1, 1, 3])clothes['medium'] = fuzz.trimf(clothes.universe, [1, 3, 6])clothes['high'] = fuzz.trimf(clothes.universe, [3, 6, 6])rule1 = ctrl.Rule(temp['good'] | wind['poor'], clothes['low'])rule2 = ctrl.Rule(temp['average'], clothes['medium'])rule3 = ctrl.Rule(temp['poor'] | wind['good'], clothes['high'])rule1.view()rule2.view()rule3.view()# 创建控制系统,应用编写好的规则cloth_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])# 创建控制仿真器cloth_num = ctrl.ControlSystemSimulation(cloth_ctrl)# 输入测试数据cloth_num.input['temp'] = 20cloth_num.input['wind'] = 2# 设置去模糊方法clothes.defuzzify_method = 'mom'# 计算结果cloth_num.compute()cloth_num_res = cloth_num.output['clothes']print(f"The result of clothes: {cloth_num_res}")# 可视化clothes.view(sim=cloth_num)plt.show()else:""" 方式二: 手动实现模糊规则 """plt.rcParams['font.family'] = 'simhei'x_temp = np.arange(0, 41, 1)x_wind = np.arange(0, 11, 1)x_clothes = np.arange(1, 7, 1)# 将三角隶属度函数对各个量进行隶属度映射temp_cold = fuzz.trimf(x_temp, [0, 0, 15])temp_warm = fuzz.trimf(x_temp, [5, 25, 35])temp_hot = fuzz.trimf(x_temp, [25, 40, 40])plt.figure()plt.title("Temperature")plt.plot(x_temp, temp_cold, 'b', label='cold')plt.plot(x_temp, temp_warm, 'y', label='warm')plt.plot(x_temp, temp_hot, 'r', label='hot')plt.legend()# plt.show()wind_low = fuzz.trimf(x_wind, [0, 0, 5])wind_medium = fuzz.trimf(x_wind, [0, 5, 10])wind_high = fuzz.trimf(x_wind, [5, 10, 10])plt.figure()plt.title("Wind")plt.plot(x_wind, wind_low, 'b', label='low')plt.plot(x_wind, wind_medium, 'y', label='medium')plt.plot(x_wind, wind_high, 'r', label='high')plt.legend()# plt.show()cloth_low = fuzz.trimf(x_clothes, [1, 1, 3])cloth_medium = fuzz.trimf(x_clothes, [1, 3, 6])cloth_high = fuzz.trimf(x_clothes, [3, 6, 6])plt.figure()plt.title("clothes")plt.plot(x_clothes, cloth_low, 'b', label='low')plt.plot(x_clothes, cloth_medium, 'y', label='medium')plt.plot(x_clothes, cloth_high, 'r', label='high')plt.legend()# plt.show()temp_test = 30wind_test = 5temp_level_cold = fuzz.interp_membership(x_temp, temp_cold, temp_test)temp_level_warm = fuzz.interp_membership(x_temp, temp_warm, temp_test)temp_level_hot = fuzz.interp_membership(x_temp, temp_hot, temp_test)wind_level_low = fuzz.interp_membership(x_wind, wind_low, wind_test)wind_level_medium = fuzz.interp_membership(x_wind, wind_medium, wind_test)wind_level_high = fuzz.interp_membership(x_wind, wind_high, wind_test)# 模糊规则# 当风小或者温度高的时候我们穿很少的衣服# 当温度中等, 比较温暖的时候我们穿得稍微多点# 当温度很低或者风很大的时候, 那我们就需要穿很多衣服了rule1 = np.fmax(temp_level_hot, wind_level_low)cloth_res_low = np.fmin(rule1, cloth_low)cloth_res_medium = np.fmin(temp_level_warm, cloth_medium)rule2 = np.fmax(temp_level_cold, wind_level_high)cloth_res_high = np.fmin(rule2, cloth_high)clothes = np.zeros_like(x_clothes)# visplt.figure(figsize=(8, 3))plt.title("结果")plt.plot(x_clothes, cloth_low, 'b')plt.fill_between(x_clothes, 0, cloth_res_low)plt.plot(x_clothes, cloth_medium, 'g')plt.fill_between(x_clothes, 0, cloth_res_medium)plt.plot(x_clothes, cloth_high, 'r')plt.fill_between(x_clothes, 0, cloth_res_high)# plt.show()# 去模糊aggregated = np.fmax(cloth_res_low, np.fmax(cloth_res_medium, cloth_res_high))# 去模糊方法:# 反模糊化方法有很多# centroid面积重心法# bisector面积等分法# mom最大隶属度平均法# som最大隶属度取最小法# lom最大隶属度取最大法cloth = fuzz.defuzz(x_clothes, aggregated, 'mom')cloth_res = fuzz.interp_membership(x_clothes, aggregated, cloth)plt.figure(figsize=(8, 3))plt.title(f"去模糊化结果cloth:{cloth}")plt.plot(x_clothes, cloth_low, 'b')plt.plot(x_clothes, cloth_medium, 'g')plt.plot(x_clothes, cloth_high, 'r')plt.fill_between(x_clothes, 0, aggregated, facecolor='orange')plt.plot([cloth, cloth], [0, cloth_res], 'k')plt.show()
- 测试温度:temp_test = 30;测试风速:wind_test = 5
- 测试温度:temp_test = 10;测试风速:wind_test = 8
- 测试温度:temp_test = 40;测试风速:wind_test = 2
相关文章:
Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果
参考资料:https: // blog.csdn.net / shelgi / article / details / 126908418 ————通过下面这个例子,终于能理解一点模糊理论的应用了,感谢原作。 熟悉简单的skfuzzy构建接近生活事件的模糊控制器 假设下面这样的场景, 我们希望构建一套…...
opencv函数使用查找
opencv官方文档地址:https://docs.opencv.org/4.x/index.html 先选对应的版本opencv-python 以这个函数为例子 model cv2.face.LBPHFaceRecognizer.create() 点开后找face类的LBP里面就有create函数的用法...
使用 pypdf 快速切分 PDF 文件
categories: [Python] tags: Python MacOS 写在前面 最近有小伙伴问我怎么把 PDF 文档切分成两个大小相近的 PDF文档, 要是在 mac 上, 直接无脑预览就行了, 但是这样不够跨平台, 之后我也尝试过 pymupdf, 但是奈何不支持 arm 架构, 后来还是用 Python 原生的 pypdf 了. 有 AI…...
Avalonia(11.0.2)+.NET6 打包运行到银河麒麟V10桌面系统
操作系统配置 项目结构 .net版本 这次我们是在银河麒麟V10系统上打包运行Avalonia(11.0.2)+.NET6.0的程序 开始打包 准备Linux下的桌面快捷方式以及图标 调整AvaloniaApplication2.Desktop.csproj的配置项,重点看下图红色线圈出来的部分,里面涉及到了LinuxPath的设置。完整的配…...
Mac nvm install failed python: not found
报错 $>./configure --prefix/Users/xxx/.nvm/versions/node/v12.22.12 < ./configure: line 3: exec: python: not found nvm: install v12.22.12 failed!解决方法 到 App 文件夹,并且打开 cd /System/Applications/Utilities/ open .记得改完 Rosetta 之…...
C语言基础知识复习(考研)
(1)C语言文件操作 1 什么是文件 文件有不同的类型,在程序设计中,主要用到两种文件: (1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行这种文件的内容是程序代码。 (2)数据文件。文件的内容不是…...
Prometheus Grafana 配置仪表板
#grafana# 其实grafana提供了丰富的Prometheus数据源的仪表板,基本上主流的都有,通过下面官方地址可查阅 Dashboards | Grafana Labs 这里举例说明,配置node_exporter仪表板 首先,在上面的网站搜索 node 可以查到蛮多的仪表板…...
docker 哲学 - 网络桥接器、容器网络接口 、容器间的通信方式
1、解释 docker0 veth eth 2、vethXX 和 ethXX 是肯定一一对应吗 比如 eth1 对应 veth1 3、如果 A容器使用 默认创建方式 。定义他内部网络为 eth0,容器B使用 --network 连上 已创建的网络 172.89.2.1 。此时假设 B的 ip是 172.89.2.2 ,容器网络接口是 e…...
Python 将HTML转为PDF、图片、XML、XPS格式
网页内容是信息传播的主要形式之一。在Web开发中,有时候我们需要将HTML文件以不同的格式保存或分享,比如PDF、图片(如PNG或JPEG)、XML或XPS等。这些格式各有优势,适合不同的用途。在这篇文章中,我们将介绍如…...
排序算法记录(冒泡+快排+归并)
文章目录 前言冒泡排序快速排序归并排序 前言 冒泡 快排 归并,这三种排序算法太过经典,但又很容易忘了。虽然一开始接触雀氏这些算法雀氏有些头大,但时间长了也还好。主要是回忆这些算法干了啥很耗时间。 如果在笔试时要写一个o(nlogn)的…...
简单聊聊如何更优雅地初始化对象:构造函数、Builder模式和静态工厂方法比较
大家好,我是G探险者。 在平时的java编程中,你肯定会有过对一些实体对象进行初始化的set操作,有的对象的属性较少可能还好点,当一个对象拥有许多属性时,通常的初始化方式可能显得笨拙而不直观,代码写的很不…...
跳过mysql权限验证来修改密码-GPT纯享版
建议重新配置一遍,弄成功好多次了,每次都出bug,又要重新弄,不是过期就是又登不进去了,我服了 电脑配置MySQL环境(详细)这个哥们的10min配完,轻轻松松, 旧方法ÿ…...
Vue3快速上手(十七)Vue3之状态管理Pinia
一、简介 Pinia官网:https://pinia.vuejs.org/zh/ 从官网截图里可以直接看到,pinia是一个vuejs的状态(数据)管理工具。功能性同vuex。logo是小菠萝。它是一个集中式状态管理工具。就是将多个组件共用的数据管理起来,重复利用。有点类似缓存的意思。 二、Pinia环境搭建 …...
时序预测 | Matlab实现BiTCN-GRU双向时间卷积神经网络结合门控循环单元时间序列预测
时序预测 | Matlab实现BiTCN-GRU双向时间卷积神经网络结合门控循环单元时间序列预测 目录 时序预测 | Matlab实现BiTCN-GRU双向时间卷积神经网络结合门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现BiTCN-GRU双向时间卷积神经网络结…...
学习笔记Day14:Linux下软件安装
软件安装 Anaconda 所有语言的包(package)、依赖(dependency)和环境(environment)管理器,类似应用商店 Conda < Miniconda < Anaconda(有交互界面) Linux下Miniconda即可 安装Miniconda 搜索北外/清华miniconda镜像网站ÿ…...
【CXL协议-事务层之CXL.io(3)】
3.1 CXL.io CXL.io 为 I/O 设备提供非一致的加载/存储接口。 图 14 显示了 CXL.io 事务层在 Flex Bus 分层结构中的位置。 交易类型、交易数据包格式、基于信用的流量控制、虚拟通道管理和交易排序规则遵循PCIe定义; 请参阅 有关详细信息,请参阅 PCI Ex…...
如何自己构建 Ollama 模型
如何自己构建 Ollama 模型 0. 引言1. 下载原始模型2. 创建 Modelfile 文件3. 构建 Ollama 模型4. 运行自构建的 Ollama 模型 0. 引言 针对模型新出的大模型,可能 Ollama Models Library 不提供,或者会在今后的某个时点提供。还有可能 Ollama Models Lib…...
5.84 BCC工具之tcpretrans.py解读
一,工具简介 tcpretrans工具追踪内核TCP重传函数,以显示这些重传的详细信息。 它专门用于追踪TCP重传事件。在网络通信中,重传是由于数据包丢失、损坏或延迟到达而需要重新发送的情况。tcpretrans通过利用Linux内核中的BPF(Berkeley Packet Filter)机制,能够实时捕获和…...
从0到1实现RPC | 03 重载方法和参数类型转换
一、存在的问题 1.重载方法在当前的实现中还不支持,调用了会报错。 2.类型转换也还存在问题。 假设定义的接口如下,参数是float类型。 在Provider端接受到的是一个Double类型,这是因为web应用接收的请求后处理的类型。 在反射调用的时候就会…...
Matlab之已知2点绘制长度可定义的射线
目的:在笛卡尔坐标系中,已知两个点的位置,绘制过这两点的射线。同时射线的长度可以自定义。 一、函数的参数说明 输入参数: PointA:射线的起点; PointB:射线过的零一点; Length&…...
2026中大型组织人事管理痛点剖析及数字化解决方案,有没有值得推荐的人事管理软件?
在数字化转型深化的当下,中大型组织(集团企业、多业态公司等)因组织架构复杂、人员规模庞大、业务场景多元,人事管理面临诸多瓶颈,严重制约组织效能提升与人才战略落地。本文聚焦中大型组织人事管理核心痛点࿰…...
从Kubernetes到KubeLLM:AI原生栈告警体系迁移实录(含TensorRT-LLM GPU显存泄漏自动定位脚本)
第一章:AI原生软件研发监控告警体系搭建 2026奇点智能技术大会(https://ml-summit.org) AI原生软件具备动态推理路径、模型权重热更新、多模态输入响应等特性,传统基于静态服务拓扑的监控体系难以捕获其运行时语义异常。构建面向AI原生应用的监控告警体…...
终极指南:如何快速解决AI绘图中的维度冲突:3种实用方案指南
终极指南:如何快速解决AI绘图中的维度冲突:3种实用方案指南 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet 在AI图像生成领域,ComfyUI BrushNet作为一款强…...
OpenClaw技能扩展:基于千问3.5-9B的内容处理自动化实践
OpenClaw技能扩展:基于千问3.5-9B的内容处理自动化实践 1. 为什么需要内容处理自动化 作为一个经常需要产出技术文档的开发者,我发现自己每天要重复处理大量内容相关的琐碎工作:从收集资料、整理笔记到生成初稿、调整格式,最后还…...
LinkSwift:八大网盘直链解析引擎,开源智能下载加速方案
LinkSwift:八大网盘直链解析引擎,开源智能下载加速方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动…...
突破Cursor API限制:cursor-free-vip架构解密与设备指纹重构技术深度解析
突破Cursor API限制:cursor-free-vip架构解密与设备指纹重构技术深度解析 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youv…...
终极指南:5步掌握UE5专业角色动画系统ALS-Community
终极指南:5步掌握UE5专业角色动画系统ALS-Community 【免费下载链接】ALS-Community Replicated and optimized community version of Advanced Locomotion System V4 for Unreal Engine 5.4 with additional features & bug fixes 项目地址: https://gitcode…...
JAVA集合—ArrayList源码深度解析
前言ArrayList 可能是每个 Java 开发者最早接触、使用最频繁的集合类。但你是否真正理解过它的内部实现?比如:扩容机制是什么?为什么扩容是 1.5 倍?add() 和 remove() 的时间复杂度分别是多少?本文基于 JDK 21 源码&am…...
Windows 11终极清理指南:Win11Debloat一键优化你的系统体验
Windows 11终极清理指南:Win11Debloat一键优化你的系统体验 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...
LangChain揭秘:AI“大脑”+“手脚”+“记忆”,OpenClaw如何轻松打造智能助手?
LangChain是一个Python开发框架,用于定义AI流程、集成RAG(知识库)和Skills(工具箱),控制逻辑。RAG提供信息,Skills执行任务。OpenClaw是集成RAG和Skills的完整AI助手框架,具备记忆和…...


