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()
  1. 测试温度:temp_test = 30;测试风速:wind_test = 5
    在这里插入图片描述
  1. 测试温度:temp_test = 10;测试风速:wind_test = 8
    在这里插入图片描述
  1. 测试温度:temp_test = 40;测试风速:wind_test = 2
    在这里插入图片描述

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

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

相关文章

互联网思维:息共享、开放性、创新和快速反应、网络化、平台化、数据驱动和用户体验 人工智能思维:模拟人、解放劳动力、人工智能解决方案和服务

互联网思维:信息共享、开放性、创新和快速反应、网络化、平台化、数据驱动和用户体验 互联网思维是指一种以互联网为基础的思考方式,强调信息共享、开放性、创新和快速反应的特点。这种思维方式注重网络化、平台化、数据驱动和用户体验,以适…

TCP重传机制详解——01概述

文章目录 TCP重传机制详解——01概述什么是TCP重传?TCP为什么要重传?TCP如何做到重传?TCP重传方式有哪些超时重传(timeout or timer-based retransmission)快速重传(fast retransmission或者fast retransmit)改进的重传机制,早期重…

ECS Fargate 上部署 SkyWalking UI 并通过 ALB 提供服务

在本篇文章中,我们将演示如何使用 AWS CLI 在 ECS Fargate 上部署 SkyWalking UI,并通过 Application Load Balancer (ALB) 提供公网访问入口,同时确保容器无法直接从公网访问。以下是详细步骤: 1. 创建 ALB aws elbv2 create-load-balancer \--name skywalking-ui-alb \…

蓝桥集训之格子游戏

蓝桥集训之格子游戏 核心思想&#xff1a;并查集 将二维坐标转化为一维坐标 x*ny每次将两个点合并 同时判断两点是否在同一集合内若在 则本次连接可以成环 #include<iostream>#include<cstring>using namespace std;const int N 40010; //原本的n 的平方int p…

Avalonia(11.0.2)+.NET6 打包运行到银河麒麟V10桌面系统

操作系统配置 项目结构 .net版本 这次我们是在银河麒麟V10系统上打包运行Avalonia(11.0.2)+.NET6.0的程序 开始打包 准备Linux下的桌面快捷方式以及图标 调整AvaloniaApplication2.Desktop.csproj的配置项,重点看下图红色线圈出来的部分,里面涉及到了LinuxPath的设置。完整的配…

突破编程_C++_C++11新特性(type_traits的概念以及核心类型特性)

1 type_traits 的概述 type_traits 是 C 标准模板库&#xff08;STL&#xff09;中的一个头文件&#xff0c;它定义了一系列模板类&#xff0c;这些模板类在编译期获取某一参数、某一变量、某一个类等的类型信息&#xff0c;主要用于进行静态检查。通过使用 type_traits&#…

k8s-多容器Pod、容器保护策略、宽限期、最大生命周期、嵌入式脚本、多容器Pod、资源监控工具

资源对象文件 一、模板与帮助信息 1、资源对象文件优势 命令无法实现高级复杂的功能某些资源对象使用命令无法创建方便管理、保存、追溯历史 2、如何生成资源对象模板 资源对象 Pod 模板使用 run 生成 [rootmaster ~]# kubectl run myweb --imagemyos:nginx --dry-runcli…

10、chrome拓展程序的实现

一、拓展程序的实现 拓展程序项目的构成 和前端项目一样&#xff0c;拓展程序也是有Html、CSS、JS文件实现的&#xff0c;现在看来它就是一个静态的前端页面。但是不同的是&#xff0c;拓展程序中还需要额外的一个清单文件&#xff0c;就是manifest.json&#xff0c;清单文件可…

Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性

Prompt进阶系列5:LangGPT(提示链Prompt Chain)–提升模型鲁棒性 随着对大模型的应用实践的深入&#xff0c;许多大模型的使用者&#xff0c; Prompt 创作者对大模型的应用越来越得心应手。和 Prompt 有关的各种学习资料&#xff0c;各种优质内容也不断涌现。关于 Prompt 的实践…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;九&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十一&#xff09; 38、sqlite3_column_value sqlite3_column_valu…

云计算系统等保测评对象和指标选取

1、云计算服务模式与控制范围关系 参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图&#xff0c;主要是云计算系统安全保护责任分担原则和云服务模式适用性原则&#xff0c;指导后续的测评对象和指标选取。 2、测评对象选择 测评对象 IaaS模式 PaaS模式…

Python Flask 返回json类型数据

from flask import Flask, make_responseapp Flask(__name__)app.route("/") def hello():data {"name": "张三"}return make_response(data)if __name__ __main__:app.run(debugTrue)如果像返回字符串那么可以用 return make_response(json.…

HTML(二)

一、表格标签 1.1表格的主要作用 表格主要用于显示、展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 1.2 表格的…

工作量证明机制

引言 区块链是一几年极其火爆的技术概念,因为比特币的超高价格引起了公众对区块链技术的关注。犹记得当年各类区块链包装的应用游戏层出不穷,区块链所到之处,投资流量唾手可得,真可谓占尽天时,那种勃勃生机,万物竞发的境界,犹在眼前。短短十年之后,热度不在。不过也很…

鸿蒙一次开发,多端部署(十一)交互归一

对于不同类型的智能设备&#xff0c;用户可能有不同的交互方式&#xff0c;如通过触摸屏、鼠标、触控板等。如果针对不同的交互方式单独做适配&#xff0c;会增加开发工作量同时产生大量重复代码。为解决这一问题&#xff0c;我们统一了各种交互方式的API&#xff0c;即实现了交…

Spring Boot集成chronicle queue快速入门demo

1.chronicle queue介绍 Chronicle Queue使用一个内存映射文件来持久化每一条消息。这使我们能够在进程之间共享消息。它直接将数据存储到堆外内存&#xff0c;因此&#xff0c;使其没有GC开销。它被设计用来为高性能应用程序提供低延迟的消息框架。使用开源的Chronicle Queue可…

【SQL】1407. 排名靠前的旅行者

题目描述 leetcode题目&#xff1a;1407. 排名靠前的旅行者 Code 写法一 先过滤&#xff0c;再连表 -- 写法一&#xff1a;先过滤再连表 select name, ifnull(summ, 0) as travelled_distance from Users left join(select user_id, sum(distance) as summfrom Ridesgroup …

kubernetes K8s的监控系统Prometheus安装使用(一)

简单介绍 Prometheus 是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做…

网络安全知识核心之RIP的工作原理

RIP 动态路由选择协议&#xff08;网络层协议&#xff09; RIP 是一种基于距离矢量&#xff08;Distance-Vector&#xff09;算法的协议&#xff0c;它使用跳数&#xff08;Hop Count&#xff09;作为度量来衡量到达目的网络的路由距离。RIP 通过 UDP 报文进行路由信息的交换&…

前端工程化的理解

简单来说&#xff0c;前端工程化是对前端开发流程的改良&#xff0c;是效率工具。 可以通过一下四个块来理解前端工程化 模块化&#xff1a; 就是将代码拆分&#xff0c;分成独立的单独的相互依赖的片段 首先说JS&#xff0c;CommonJS和ES Module都是JS模块化的一种表现形式&a…