赞
踩
设计洗衣机洗涤时间的模糊控制。
已知规则:
模糊控制规则如表1所示。
表 1 洗衣机模糊控制规则表
NG
MG
LG
SD
VS
M
L
MD
S
M
L
LD
M
L
VL
其中,污泥:{SD(污泥少), MD(中等污泥), LD(污泥多)};油脂:{NG(无油脂), MG(中等油脂), LG(油脂多)};洗涤时间:{VS(很短), S(短), M(中等), L(长), VL(很长)}。
假设污泥、油脂、洗衣机洗涤时间的论域分别是[0, 100]、[0, 100]和 [0, 120]。
假定当前传感器测得的信息为(污泥)x0=60,(油脂) y0=70,采用模糊决策,给出模糊推理结果。
- def triangle(x, a, b, c):
- if x <= a or x >= c:
- return 0
- elif a < x <= b:
- return (x - a) / (b - a)
- else:
- return (c - x) / (c - b)
-
- # 定义模糊集合
- f_SD = lambda x: triangle(x, 0, 0, 40) # SD(污泥少)
- f_MD = lambda x: triangle(x, 30, 50, 70) # MD(中等污泥)
- f_LD = lambda x: triangle(x, 60, 100, 100) # LD(污泥多)
-
- f_NG = lambda x: triangle(x, 0, 0, 40) # NG(无油脂)
- f_MG = lambda x: triangle(x, 30, 50, 70) # MG(中等油脂)
- f_LG = lambda x: triangle(x, 60, 100, 100) # LG(油脂多)
-
- f_VS = lambda x: triangle(x, 0, 0, 20) # VS(很短)
- f_S = lambda x: triangle(x, 10, 30, 50) # S(短)
- f_M = lambda x: triangle(x, 40, 60, 80) # M(中等)
- f_L = lambda x: triangle(x, 60, 80, 100) # L(长)
- f_VL = lambda x: triangle(x, 80, 100, 120) # VL(很长)
-
- # 定义模糊控制规则
- rule1 = lambda x, y: min(f_LD(x), f_LG(y)) # 如果污泥多,油脂多,则洗涤时间长
- rule2 = lambda x, y: min(f_MD(x), f_MG(y)) # 如果污泥适中,油脂适中,则洗涤时间适中
- rule3 = lambda x, y: min(f_SD(x), f_NG(y)) # 如果污泥少,油脂少,则洗涤时间适中
-
- # 计算隶属度
- x0, y0 = 60, 70
- mu_SD, mu_MD, mu_LD = f_SD(x0), f_MD(x0), f_LD(x0)
- mu_NG, mu_MG, mu_LG = f_NG(y0), f_MG(y0), f_LG(y0)
-
- mu_VS = min(mu_SD, mu_NG, f_VS(x0))
- mu_S = max(min(mu_SD, mu_MG), min(mu_MD, mu_NG), f_S(x0))
- mu_M = max(min(mu_MD, mu_MG), min(mu_LD, mu_NG), min(mu_SD, mu_NG), f_M(x0))
- mu_L = max(min(mu_LD, mu_MG), min(mu_MD, mu_LG), f_L(x0))
- mu_VL = min(mu_LD, mu_LG, f_VL(x0))
-
- # 根据最大值原则计算输出
- T_max = max(mu_VS, mu_S, mu_M, mu_L, mu_VL)
-
- # 输出结果
- print("VS(很短):", mu_VS)
- print("S(短):", mu_S)
- print("M(中等):", mu_M)
- print("L(长):", mu_L)
- print("VL(很长):", mu_VL)
-
- print("模糊推理结果: 洗涤时间为 ", end="")
- if T_max == mu_VS:
- print("很短")
- elif T_max == mu_S:
- print("短")
- elif T_max == mu_M:
- print("中等")
- elif T_max == mu_L:
- print("长")
- else:
- print("很长")
这段代码主要包括三个部分:定义模糊集合、定义模糊控制规则和进行推理计算。
在定义模糊集合中,我们首先定义了三个输入变量:污泥的含量、油脂的含量和洗涤时间的隶属度。其中,我们使用了三角形函数(即"triangle")来表示模糊集合,并将每个模糊集合命名为f_SD、f_MD和f_LD(分别代表"污泥少"、"中等污泥"和"污泥多"),以及f_NG、f_MG和f_LG(分别代表"无油脂"、"中等油脂"和"油脂多")和f_VS、f_S、f_M、f_L和f_VL(分别代表"很短"、"短"、"中等"、"长"和"很长")。
在定义模糊控制规则中,我们定义了三个规则:当污泥多且油脂多时,洗涤时间长;当污泥适中且油脂适中时,洗涤时间适中;当污泥少且油脂少时,洗涤时间适中。这些规则使用 lambda 函数的形式进行定义,并命名为 rule1、rule2 和 rule3。
在推理计算中,我们首先针对输入值进行隶属度计算,根据定义的函数和规则分别计算出各个模糊集合的隶属度。同时,我们还使用了 min 和 max 函数来计算出每个输出变量对应的隶属度。最终,使用最大值原则(即选取隶属度最高的结果作为输出)计算出系统的输出(即洗涤时间),并将其打印到控制台上。
通过定义模糊集合、模糊控制规则和隶属度计算,该系统能够自适应地根据输入信息(污泥含量和油脂含量)调整洗涤时间,以达到最佳的洗涤效果。
我们需要根据实际问题的特点来选择模糊集合的定义、隶属函数的设计和模糊规则库的建立。在洗涤机的例子中,我们将污泥和油脂的多少、洗涤时间的长短都定义为模糊集合,并通过模糊控制规则来推导出洗涤时间的连续值,再根据最大值原则计算出洗涤时间的模糊输出。
在模糊推理中,隶属度用于计算对象对于某个模糊概念的归属程度,模糊关系用于对多个模糊集合进行运算得到新的模糊集合,模糊规则用于描述条件和结果之间的模糊关系
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。