【人工智能】实验二: 洗衣机模糊推理系统实验与基础知识

您所在的位置:网站首页 智能fuzzy洗衣机怎么使用 【人工智能】实验二: 洗衣机模糊推理系统实验与基础知识

【人工智能】实验二: 洗衣机模糊推理系统实验与基础知识

2024-07-04 00:11| 来源: 网络整理| 查看: 265

实验二: 洗衣机模糊推理系统实验 实验目的

理解模糊逻辑推理的原理及特点,熟练应用模糊推理。

实验内容

设计洗衣机洗涤时间的模糊控制。

实验要求

已知人的操作经验为:

“污泥越多,油脂越多,洗涤时间越长”;“污泥适中,油脂适中,洗涤时间适中”;“污泥越少,油脂越少,洗涤时间越短”。

模糊控制规则如表1所示:

xyzSDNGVSSDMGMSDLGLMDNGSMDMGMMDLGLLDNGMLDMGLLDLGVL

其中:

SD(污泥少)、MD(污泥中)、LD(污泥多)、NG(油脂少)、MG(油脂中)、LG(油脂多)、VS(洗涤时间很短)、S(洗涤时间短)、M(洗涤时间中等)、L(洗涤时间长)、VL(洗涤时间很长)。 1. 污泥隶属函数 # 污泥隶属函数 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])

在这里插入图片描述 在这里插入图片描述

2. 油脂隶属函数 # 油脂隶属函数 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])

在这里插入图片描述 在这里插入图片描述

3. 洗涤时间隶属度函数 # 洗涤时间隶属度函数 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])

在这里插入图片描述 在这里插入图片描述

import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl import matplotlib.pyplot as plt # 创建输入变量和输出变量 sludge = ctrl.Antecedent(np.arange(0, 101, 1), 'sludge') grease = ctrl.Antecedent(np.arange(0, 101, 1), 'grease') washing_time = ctrl.Consequent(np.arange(0, 121, 1), 'washing_time') # 定义隶属函数 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]) # 定义模糊控制规则 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['M']) rule8 = ctrl.Rule(sludge['LD'] & grease['LG'], washing_time['L']) rule9 = ctrl.Rule(sludge['LD'] & grease['LG'], washing_time['VL']) # 创建控制系统 washing_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9]) washing = ctrl.ControlSystemSimulation(washing_ctrl) # 输入污泥和油脂值 washing.input['sludge'] = 70 washing.input['grease'] = 60 # 进行模糊推理 washing.compute() # 获取洗涤时间的输出 washing_time.view(sim=washing) # 打印输出洗涤时间 print("洗涤时间:", washing.output['washing_time']) # 绘制隶属度函数 sludge.view() grease.view() washing_time.view() plt.show() 4. 模糊控制规则表

在这里插入图片描述

注:SD(污泥少)、MD(污泥中)、LD(污泥多)、NG(油脂少)、MG(油脂中)、LG(油脂多)、VS(洗涤时间很短)、S(洗涤时间短)、M(洗涤时间中等)、L(洗涤时间长)、VL(洗涤时间很长)。

推论结果立体图 在这里插入图片描述

import numpy as np import skfuzzy as fuzz import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt from skfuzzy import control as ctrl #定义输入输出的取值范围 # 污泥和油脂范围为[0,100] # 洗涤时间范围为[0,120] x_stain = np.arange(0, 101, 1) x_oil = np.arange(0, 101, 1) x_time = np.arange(0, 121, 1) # 定义模糊控制变量 stain = ctrl.Antecedent(x_stain, 'stain') oil = ctrl.Antecedent(x_oil, 'oil') time = ctrl.Consequent(x_time, 'time') # 生成模糊隶属函数 #函数中的三元变量,第一个代表折线的起点,第二是最大值,第三是终点 stain['SD'] = fuzz.trimf(x_stain, [0, 0, 50]) #定义污渍的三角隶属度函数横坐标 stain['MD'] = fuzz.trimf(x_stain, [0, 50, 100]) stain['LD'] = fuzz.trimf(x_stain, [50, 100, 100]) oil['NG'] = fuzz.trimf(x_oil, [0, 0, 50]) #定义油污的三角隶属度函数横坐标 oil['MG'] = fuzz.trimf(x_oil, [0, 50, 100]) oil['LG'] = fuzz.trimf(x_oil, [50, 100, 100]) time['VS'] = fuzz.trimf(x_time, [0, 0, 20]) #定义洗涤时间的三角隶属度函数横坐标 time['S'] = fuzz.trimf(x_time, [0, 20, 50]) time['M'] = fuzz.trimf(x_time, [20, 50, 80]) time['L'] = fuzz.trimf(x_time, [50, 80, 120]) time['VL'] = fuzz.trimf(x_time, [80, 120, 120]) #采用解模糊方法——质心解模糊方式 time.defuzzify_method='centroid' #规则 rule1=ctrl.Rule(antecedent=((stain['SD'] & oil['NG'])),consequent=time['VS'],label='time=VS') rule2=ctrl.Rule(antecedent=((stain['SD'] & oil['MG'])|(stain['MD'] & oil['MG'])|(stain['LD'] & oil['NG'])),consequent=time['M'],label='time=M') rule3=ctrl.Rule(antecedent=((stain['SD'] & oil['LG'])|(stain['MD'] & oil['LG'])|(stain['LD'] & oil['MG'])),consequent=time['L'],label='time=L') rule4=ctrl.Rule(antecedent=((stain['MD'] & oil['NG'])),consequent=time['S'],label='time=S') rule5=ctrl.Rule(antecedent=((stain['LD'] & oil['LG'])),consequent=time['VL'],label='time=VL') # 系统和运行环境初始化 rule=[rule1, rule2, rule3,rule4,rule5] time_ctrl = ctrl.ControlSystem(rule) wash_time = ctrl.ControlSystemSimulation(time_ctrl) #规则中带一些奇怪的规则,处理后输出 for i in range(len(rule)): print("rule",i,end=":") for item in str(rule[i]): if(item!='\n'): print(item,end="") else: break print('\t') #画图 stain.view() oil.view() time.view() #time.view() plt.show() #绘制3D图 upsampled=np.linspace(0,101,21)#步距参数 x,y=np.meshgrid(upsampled,upsampled) z=np.zeros_like(x) pp=[] for i in range(0,21): for j in range(0,21): wash_time.input['stain']=x[i,j] wash_time.input['oil']=y[i,j] wash_time.compute() z[i,j]=wash_time.output['time'] pp.append(z[i,j]) print('max:',max(pp)) print('min:',min(pp)) from mpl_toolkits.mplot3d import Axes3D fig=plt.figure(figsize=(8,8))#画布大小 ax=fig.add_subplot(111,projection='3d') surf=ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap='viridis',linewidth=0.1,antialiased=True) ax.view_init(30,250)#观察角度 plt.title('3D results') ax.set_xlabel('stain') ax.set_ylabel('oil') ax.set_zlabel('time') plt.show()

(2)假定当前传感器测得的信息为x0(污泥)=60,y0(油脂)=70,采用模糊决策,给出模糊推理结果,并观察模糊推理的动态仿真环境,给出其动态仿真环境图。

import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 导入NumPy库用于数学运算 import numpy as np # 在Sludge函数和Grease函数中添加输入值检查 def Sludge(a): sludge = [0, 0, 0] # 默认隶属度为0,依次对应SD, MD, LD if a 100: a = 100 if 0


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3