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)改进的重传机制,早期重…

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

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

10、chrome拓展程序的实现

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

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

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

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

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(九) 下一篇: SQLiteC/C接口详细介绍sqlite3_stmt类(十一) 38、sqlite3_column_value sqlite3_column_valu…

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

1、云计算服务模式与控制范围关系 参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图,主要是云计算系统安全保护责任分担原则和云服务模式适用性原则,指导后续的测评对象和指标选取。 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表格的主要作用 表格主要用于显示、展示数据,因为它可以让数据显示的非常的规整,可读性非常好。特别是后台展示数据的时候,能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 1.2 表格的…

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

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

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

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

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

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

TS + Vue3 elementUI 表格列表中如何方便的标识不同类型的内容,颜色区分 enum

TS Vue3 elementUI 表格列表中如何方便的标识不同类型的内容,颜色区分 enum 本文内容为 TypeScript 一、基础知识 在展示列表的时候,列表中的某个数据可能是一个类别,比如: enum EnumOrderStatus{"未受理" 1,"…

【LeetCode-74.搜索二维矩阵】

题目详情: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则&am…

Csharp学习Linq

Linq的学习 这里继续使用之前文章创建的学生类,首先简单介绍一下linq的使用。 Student.cs public class Student{public int Id { get; set; }public int ClassId { get; set; }public string Name { get; set; }public int Age { get; set; }public string Descr…

基于python+vue 的一加剧场管理系统的设计与实现flask-django-nodejs-php

二十一世纪我们的社会进入了信息时代,信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

Kubernetes自动化配置部署

在新建工程中,使用k8s的devops服务,自动化部署项目 1、在搭建好k8s的集群中,确认已开启devops服务; 2、新建Maven项目之后,创建dockerfile、deploy和Jenkins文件 例如: Dockerfile FROM bairong.k8s.m…

【思维】第十四届蓝桥杯省赛C++ C组/研究生组 Python A组/C组《翻转》(C++)

【题目描述】 小蓝用黑白棋的 n 个棋子排成了一行,他在脑海里想象出了一个长度为 n 的 01 串 T,他发现如果把黑棋当做 1,白棋当做 0,这一行棋子也是一个长度为 n 的 01 串 S。 小蓝决定,如果在 S 中发现一个棋子和它…

C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序

1 图的广度优先遍历 图的广度优先遍历(或搜索)类似于树的广度优先遍历(参见本文的方法2)。这里唯一需要注意的是,与树不同,图可能包含循环,因此我们可能再次来到同一个节点。为了避免多次处理节点,我们使用布尔访问数组。为简单起见,假设所有顶点都可以从起始顶点到达…

ideaSSM 学员信息管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 学员信息管理系统是一套完善的信息管理系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库&#xff…