当前位置:   article > 正文

模糊逻辑——洗衣机模糊推理系统

洗衣机模糊推理系统
要求:

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

已知规则:

  1. 如果污泥多,油脂多,则洗涤时间长;
  2. 如果污泥适中,油脂适中,则洗涤时间适中;
  3. 如果污泥少,油脂少,则洗涤时间适中。

模糊控制规则如表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,采用模糊决策,给出模糊推理结果。

 代码实现及运行结果:
  1. def triangle(x, a, b, c):
  2. if x <= a or x >= c:
  3. return 0
  4. elif a < x <= b:
  5. return (x - a) / (b - a)
  6. else:
  7. return (c - x) / (c - b)
  8. # 定义模糊集合
  9. f_SD = lambda x: triangle(x, 0, 0, 40) # SD(污泥少)
  10. f_MD = lambda x: triangle(x, 30, 50, 70) # MD(中等污泥)
  11. f_LD = lambda x: triangle(x, 60, 100, 100) # LD(污泥多)
  12. f_NG = lambda x: triangle(x, 0, 0, 40) # NG(无油脂)
  13. f_MG = lambda x: triangle(x, 30, 50, 70) # MG(中等油脂)
  14. f_LG = lambda x: triangle(x, 60, 100, 100) # LG(油脂多)
  15. f_VS = lambda x: triangle(x, 0, 0, 20) # VS(很短)
  16. f_S = lambda x: triangle(x, 10, 30, 50) # S(短)
  17. f_M = lambda x: triangle(x, 40, 60, 80) # M(中等)
  18. f_L = lambda x: triangle(x, 60, 80, 100) # L(长)
  19. f_VL = lambda x: triangle(x, 80, 100, 120) # VL(很长)
  20. # 定义模糊控制规则
  21. rule1 = lambda x, y: min(f_LD(x), f_LG(y)) # 如果污泥多,油脂多,则洗涤时间长
  22. rule2 = lambda x, y: min(f_MD(x), f_MG(y)) # 如果污泥适中,油脂适中,则洗涤时间适中
  23. rule3 = lambda x, y: min(f_SD(x), f_NG(y)) # 如果污泥少,油脂少,则洗涤时间适中
  24. # 计算隶属度
  25. x0, y0 = 60, 70
  26. mu_SD, mu_MD, mu_LD = f_SD(x0), f_MD(x0), f_LD(x0)
  27. mu_NG, mu_MG, mu_LG = f_NG(y0), f_MG(y0), f_LG(y0)
  28. mu_VS = min(mu_SD, mu_NG, f_VS(x0))
  29. mu_S = max(min(mu_SD, mu_MG), min(mu_MD, mu_NG), f_S(x0))
  30. mu_M = max(min(mu_MD, mu_MG), min(mu_LD, mu_NG), min(mu_SD, mu_NG), f_M(x0))
  31. mu_L = max(min(mu_LD, mu_MG), min(mu_MD, mu_LG), f_L(x0))
  32. mu_VL = min(mu_LD, mu_LG, f_VL(x0))
  33. # 根据最大值原则计算输出
  34. T_max = max(mu_VS, mu_S, mu_M, mu_L, mu_VL)
  35. # 输出结果
  36. print("VS(很短):", mu_VS)
  37. print("S(短):", mu_S)
  38. print("M(中等):", mu_M)
  39. print("L(长):", mu_L)
  40. print("VL(很长):", mu_VL)
  41. print("模糊推理结果: 洗涤时间为 ", end="")
  42. if T_max == mu_VS:
  43. print("很短")
  44. elif T_max == mu_S:
  45. print("短")
  46. elif T_max == mu_M:
  47. print("中等")
  48. elif T_max == mu_L:
  49. print("长")
  50. else:
  51. 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 函数来计算出每个输出变量对应的隶属度。最终,使用最大值原则(即选取隶属度最高的结果作为输出)计算出系统的输出(即洗涤时间),并将其打印到控制台上。

        通过定义模糊集合、模糊控制规则和隶属度计算,该系统能够自适应地根据输入信息(污泥含量和油脂含量)调整洗涤时间,以达到最佳的洗涤效果。

小结:

        我们需要根据实际问题的特点来选择模糊集合的定义、隶属函数的设计和模糊规则库的建立。在洗涤机的例子中,我们将污泥和油脂的多少、洗涤时间的长短都定义为模糊集合,并通过模糊控制规则来推导出洗涤时间的连续值,再根据最大值原则计算出洗涤时间的模糊输出。 

        在模糊推理中,隶属度用于计算对象对于某个模糊概念的归属程度,模糊关系用于对多个模糊集合进行运算得到新的模糊集合,模糊规则用于描述条件和结果之间的模糊关系 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/522445
推荐阅读
相关标签
  

闽ICP备14008679号