模糊推理系统———python

  • 原理及说明
  • 设计洗衣洗涤时间模糊控制
  • 题目分析
  • 做题步骤及相应代码
  • 面积重心法解模糊
  • 总结

原理及说明

模糊推理所处理的事物自身是模糊的,概念本身没有明确的外延,一个对象是否符合这个概念难以明确地确定模糊推理是对这种不确定性,即模糊性的表示与处理。模糊逻辑推理是基于模糊性知识(模糊规则)的一种近似推理,一般采用Zadeh提出的语言变量、语言值、模糊集和模糊关系合成的方法进行推理。

设计洗衣洗涤时间模糊控制

已知人的操作经验为:
“污泥越多,油脂越多,洗涤时间越长”;
“污泥适中,油脂适中,洗涤时间适中”;
“污泥越少,油脂越少,洗涤时间越短”。

模糊控制规则:
1、if(x is SD)and(y is NG)then(z is VS)(1)
2、if(x is SD)and(y is MG)then(z is M)(1)
3、if(x is SD)and(y is LG)then(z is L)(1)
4、if(x is MD)and(y is NG)then(z is S)(1)
5、if(x is MD)and(y is MG)then(z is M)(1)
6、if(x is MD)and(y is LG)then(z is L)(1)
7、if(x is LD)and(y is MG)then(z is M)(1)
8、if(x is LD)and(y is MG)then(z is L)(1)
9、if(x is LD)and(y is LG)then(z is VL)(1)
其中SD(污泥少)、MD(污泥中)、LD(污泥多)、NG(油脂少)、MG(油脂中)、LG(油脂多)、VS(洗涤时间很短)、S(洗涤时间短)、M(洗涤时间中等)、L(洗涤时间长)、VL(洗涤时间很长)。

题目分析

控制对象是洗衣机的洗涤时间,论域:[0, 60] 。
输入是被洗衣物的污泥和油脂,论域:[0, 100]
1.污泥隶属函数

2.油脂隶属函数

ps:此处函数下标有误,应该是NG,MG,LG(表示自己很懒,所以没改)

3.洗涤时间隶属函数


4.规则表

污泥度\油脂度 NG MG LG
SD VS M L
MD S M L
LD M L VL

做题步骤及相应代码

1.定义污泥及油脂隶属函数求对应属性值下的隶属度。
分别定义一个一维三列的数组依次对应少中多。

def Sludge(a):#污泥sludge=[0,0,0]#默认隶属度为0,依次对应SD,MD,LDif a<0 or a>100:return (print("输入值有误"))elif 0<=a<=50:sludge[0]=(50-a)/50sludge[1]=a/50elif 50<a<=100:sludge[1]=(100-a)/50sludge[2]=(a-50)/50return sludgedef Grease(a):#油脂grease=[0,0,0]#默认隶属度为0,依次对应NG,MG,LGif a<0 or a>100:return (print("输入值有误"))elif 0<=a<=50:grease[0]=(50-a)/50grease[1]=a/50elif 50<a<=100:grease[1]=(100-a)/50grease[2]=(a-50)/50return grease

2.规则匹配与激活及规则前件隶属度聚集
将上得到污泥及油脂的隶属度值参考规则表,然后求取最小值。我这里的代码思路是按照规则选择最简单的if条件句,判断得到相应属性值的隶属度。一共会得到1个VS,1个S,3个M,3个L,1个VL的隶属度值。所以需要在得到的M和L的隶属度中先去除0再取最小值。这样就可以得到所有洗涤时间的属性值对应的隶属度了

def Rules(a,b):#a为污泥隶属度,b为油脂隶属度rules_value=[0,0,0,0,0,0,0,0,0]#依次对应9条规则结果VS,M,L,S,M,L,M,L,VLif a[0]!=0 and b[0]!=0:rules_value[0]=min(a[0],b[0])#返回规则下最小值if a[0]!=0 and b[1]!=0:rules_value[1]=min(a[0],b[1])if a[0]!=0 and b[2]!=0:rules_value[2]=min(a[0],b[2])if a[1]!=0 and b[0]!=0:rules_value[3]=min(a[1],b[0])if a[1]!=0 and b[1]!=0:rules_value[4]=min(a[1],b[1])if a[1]!=0 and b[2]!=0:rules_value[5]=min(a[1],b[2])if a[2]!=0 and b[0]!=0:rules_value[6]=min(a[2],b[0])if a[2]!=0 and b[1]!=0:rules_value[7]=min(a[2],b[1])if a[2]!=0 and b[2]!=0:rules_value[8]=min(a[2],b[2])return rules_value#每条规则推理输出
def Inference(a):#a为9条规则下的结果隶属度time_level=[0,0,0,0,0]#默认时间隶属值为0,依次对应VS,S,M,L,VLtime_level[0]=a[0]time_level[1]=a[3]if(a[1]!=0 or a[4]!=0 or a[6]!= 0):#去零值然后取剩下的最小值list_1=[a[1],a[4],a[6]]for i in range(len(list_1)-1,-1,-1):if list_1[i]==0:list_1.remove(0)time_level[2]=min(list_1)if(a[2]!=0 or a[5]!=0 or a[7]!= 0):list_2=[a[2],a[5],a[7]]for i in range(len(list_2)-1,-1,-1):if list_2[i]==0:list_2.remove(0)time_level[3]=min(list_2)time_level[4]=a[8]return time_level

面积重心法解模糊

面积重心法公式

根据公式知道需要根据时间隶属函数的反函数用相应的隶属度求出时间论域中对应的值,最后再根据公式求出最后结果。

def Area_gravity(a):#a为时间隶属度time=[0,0,0,0,0,0,0,0]#时间隶属函数八个区间分别对应的时间值time[0]=10-10*a[0]time[1]=10*a[1]time[2]=25-15*a[1]time[3]=15*a[2]+10time[4]=40-15*a[2]time[5]=15*a[3]+25time[6]=60-20*a[3]time[7]=20*a[4]+40sum_1=time[0]*a[0]+time[1]*a[1]+time[2]*a[1]+time[3]*a[2]+time[4]*a[2]+time[5]*a[3]+time[6]*a[3]+time[7]*a[4]sum_2=a[0]+2*a[1]+2*a[2]+2*a[3]+a[4]result=sum_1/sum_2return result#最后返回预测时间

至此可以算是结束了,不过我最后还添加了通过时间值求属性值(时间长短),使用最大隶属度法
下面我使用的是用上面预测出的时间,代入时间隶属函数求属性值,也可以直接通过上面求出的时间隶属度来求时间属性值,同样用最大隶属度法。

def Maximum(a):#a为时间值if 0<=a<=10:u1=(10-a)/10u2=a/10if(u1>u2):time_level='VS'else:time_level='S'if 10<a<=25:u3=(25-a)/15u4=(a-10)/15if(u3>u4):time_level='S'else:time_level='M'if 25<a<=40:u5=(40-a)/15u6=(a-25)/15if(u5>u6):time_level='M'else:time_level='L'if 40<a<=60:u7=(60-a)/20u8=(a-40)/20if(u7>u8):time_level='L'else:time_level='VL'return time_level

总结

简单的依次调用上面的函数即可

if __name__ == '__main__':sludge =int(input("输入污泥指数:"))grease =int(input("输入油脂指数:"))rules_value=Rules(Sludge(sludge),Grease(grease))time_level=Inference(rules_value)#时间隶属度result_1=Area_gravity(time_level)#面积重心法求得的预测时间result_2=Maximum(result_1)#最大隶属度法求得的预测时间长短result_3={'VS':'很短','S':'短','M':'中等','L':'长','VL':'很长'}print("模糊推理系统预测洗涤时间{},预计洗涤时间{}".format(result_3[result_2],int(result_1+0.5)))

运行结果

输入污泥指数:60
输入油脂指数:70
模糊推理系统预测洗涤时间中等,预计洗涤时间31

ps:至此结束,本人写代码不习惯写注释,同样也不喜欢写报告,所以说同仁们看着费解勿怪,在此只希望通过写博客来改变这些习惯,以后一定会越来越认真,努力地去写地详细一点。同时也留点东西,搞得自己像学过一些东西,不是一直在玩,哈哈哈。最后此篇代码纯原创,应该不会触犯到谁,不足也没办法,因为python也没怎么学,代码行里间还是c里c气的。

模糊推理控制系统——python相关推荐

  1. python画锯齿波_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统

    如前篇所介绍,用Shell Lab测试台软件配合之前介绍的任意款实验板,都能方便地实现ADC电压测量,但遇到两个问题: 示例代码虽然众多,但大都默认ShellLab类型的控制器,需要手动改为Mcush ...

  2. python基于模糊推理的智能家居安防系统设计

    这篇是以前写的. 参考论文为黄明明2019年发表在<河南工程学院:自然科学版>. 摘要:为提高家居生活品质和安全,设计了一种基于模糊推理的智能家居安防系统,有效实现了家居生活的防火.防盗和 ...

  3. Python、OpenCV实现的电脑远程拍照控制系统,照片并以web形式发布

    一.题目: 利用OpenCV等,自行Python编程实现一个远程拍照控制系统,该系统包括摄像头端(Server)和用户端(Client).Server端运行.py程序,接受Client控制,实现拍照. ...

  4. python程序语言和机器人控制系统_机器人十大流行编程语言,机器人编程系统以及方法...

    原标题:机器人十大流行编程语言,机器人编程系统以及方法 如果您问"机器人的最佳编程语言是什么? 计算机视觉程序员会给出不同于认知机器人的答案.每个人都不同意什么是"最好的编程语言& ...

  5. 使用python代替matlab仿真线性控制系统(倒立摆)

    matlab可以仿真很多控制系统,其实python也有这种中功能.不仅是基础的自动控制原理所涉及的定理如伯德图,奈奎斯特曲线,pid之类的能够仿真,较为复杂的线性系统理论上面的一些原理也可以仿真. 这 ...

  6. 用python控制硬件_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统...

    如前篇所介绍,用Shell Lab测试台软件配合之前介绍的任意款实验板,都能方便地实现ADC电压测量,但遇到两个问题:示例代码虽然众多,但大都默认ShellLab类型的控制器,需要手动改为Mcush. ...

  7. python 设备采集系统_真实世界的Python仪器监控:数据采集与控制系统自动化

    页数:571页          开本:16开         重量:921g 真实世界的Python仪器监控:数据采集与控制系统自动化,主要探讨如何运用Python 快速构建自动化仪器控制系统,帮助 ...

  8. python开放源代码的版本控制系统_开源点评:源代码版本控制系统介绍

    本文是"每日构建[4]:相关工具介绍 "的第一部分. 由于源代码版本控制系统(Revision Control System,以下简称RCS)属于"每日构建流程 &quo ...

  9. 实验二-洗衣机模糊推理实验-matlab/python

    实验二 洗衣机模糊推理系统实验 一. 实验目的 理解模糊逻辑推理的原理及特点,熟练应用模糊推理. 二. 实验内容 采用Matlad 7.0 的Fuzzy Logic Tool 设计洗衣机洗涤时间的模糊 ...

最新文章

  1. python英语单词大全-使用Python进行英文单词分割
  2. 使用setfacl实现子目录继承父目录权 限
  3. 有了malloc/free,为什么还要new/delete?
  4. 前端学习(2950):webpack目录结构
  5. 一套完整的用户增长系统架构
  6. 《天天数学》连载29:一月二十九日
  7. 菜鸟javascript整理2
  8. css模拟select设置高度在ie67下有效(也可作为去除边框)
  9. hack (浏览器兼容css hack)
  10. 图解python CGI(通用网关接口 )
  11. 急救护理虚拟仿真实验室
  12. VB.NET 强制删除文件
  13. css font-size 失效,css font-size不管用的经解决方法
  14. Python 创建一维数组、二维数组和N维数组
  15. 阿里云一键部署 Hadoop 分布式集群
  16. 用matlab画企鹅代码,CDR绘制超级可爱的QQ企鹅
  17. 数学建模----拟合的实现
  18. 360度全景标定方法_一种用于360°全景泊车辅助系统的标定布及标定场地_2015209958302_说明书_专利查询_专利网_钻瓜专利网...
  19. div,span等标签支持focus/blur事件
  20. ECC-椭圆曲线密码

热门文章

  1. 经皮黄疸仪QL1200B
  2. 南理工计算机考研复试科目,2020南京理工大学计算机考研初试科目、参考书目、复试详情汇总...
  3. 第11节-导航菜单(经典菜单) | 剑雨Axure RP9系列【基础】
  4. 再读苹果《Threading Programming Guide》笔记(一):初识线程
  5. 路径规划算法(0) -路径规划与 Dubins, Reeds-Shepp曲线的python实现
  6. 关于Mysql数据库关键字“describe”
  7. ms08_067复现(windows sever 2003 英文/中文版系统)
  8. cc-150,1.3
  9. 告别linux、vim下讨厌的声音提示
  10. 解放双手玩玩抖音极速版