当前位置:   article > 正文

模糊推理及其应用

模糊推理及其应用

头歌题目

任务描述

本关任务:设计并实现洗衣机模糊推理系统。依次向系统输入油污与污渍,系统输出清洗时间的长短,具体描述见模糊推理的应用。

相关知识

为了完成本关任务,你需要掌握模糊推理。

模糊推理

说到推理,我们首先想到的就是知识表示,在进行模糊推理时,首先要进行的就是模糊知识表示。在前面的实训中,我们提到由于模糊不确定性,一般采用隶属度来刻画。隶属度是一个命题中所描述的事物的属性、状态和关系等的强度。例如我们用三元组(张三,体型,(胖,0.9))表示命题“张三比较胖”,其中的 0.9 就代替“比较”而刻画了张三“胖”的程度。这种隶属度表示法,一般是一种针对对象的表示法。模糊知识表示一般形式为(<对象>,<属性>,(<属性值>,<隶属度>))。 事实上,这种思想和方法还可广泛用于产生式规则、逻辑规则、谓词逻辑、框架、语义网络等多种表示方法,从而扩充它们的表示范围和能力。一般,人类思维判断的基本形式是

如果 (条件) → 则 (结论)

其中的条件和结论常常是模糊的。 例如,对下列模糊知识 如果 压力较高且温度在缓慢上升 则 阀门略开 其中的条件和结论常常是模糊的。 许多模糊规则实际上是一组多重条件语句,可以表示为从条件论域到结论论域的模糊关系矩阵R。通过条件模糊向量与模糊关系 R 的合成进行模糊推理,得到结论的模糊向量,然后采用清晰化的方法将模糊结论转化精确量。 对于 IF A THEN B 类型的模糊规则的推理,若已知A,则输出为B;若现在已知输出为A′,则输出B′。用合成规则求取B′=A′∘R,其中RAB的模糊关系。

模糊决策

由上述模糊推理得到的结论或者操作是一个模糊向量,不能直接应用,需要先转化为确定值。将模糊推理得到的模糊向量,转化为确定量的过程为“模糊决策”,或者“模糊判决”,“清晰化”,“反模糊化”等。下面介绍几种简单、实用的模糊决策的方法。

1.最大隶属度法

最大隶属度法是在模糊向量中,取隶属度最大的量作为推理结果。例如,当得到的模糊向量为: U’=0.1/2+0.4/3+0.7/4+1.0/5+0.7/6+0.3/7 由于推理结果隶属于等级5的隶属度为最大,所以取结论为U=5,如果有两个以上的元素均为最大(一般依次相邻),则可以取它们的平均值。例如: U’=0.5/−3+0.5/−2+0.5/−1+0.0/0+0.0/1+0.0/2+0.0/3 则U=3−3−2−1​=−2。这种方法的优点就是简单易行,缺点是完全排除了其他隶属度较小的量的影响和作用,没有充分利用推理过程取得的信息。

2.加权平均判决法

为了克服最大隶属度法的缺点,可以采用加权平均判决法,即

U=i=1∑n​μ(ui​)i=1∑n​μ(ui​)ui​​

例如:U’=0.1/2+0.6/3+0.5/4+0.4/5+0.2/6

则U=0.1+0.6+0.5+0.4+0.22×1+3×0.6+4×0.5+5×0.4+6×0.2​=4

3.中位数法

论域上把隶属函数曲线与横坐标围成的面积,分为两部分的元素称为模糊集的中位数。中位数法就是把模糊集的中位数作为系统控制量。当论域为有限离散点时,中位数u∗可以用下列公式求取

u1​∑u⋆​μ(ui​)=u⋆+1∑un​​μ(uj​)

例如,U’=0.1/−4+0.5/−3+0.1/−2+0.0/−1+0.1/0+0.2/1+0.4/2+0.5/3+0.1/4,由于u1​=4,u9​=4,则当u⋆=u6​时,u1​∑u6​​μ(ui​)=u7​∑u9​​μ(ui​)=1,所以中位数 u⋆=u6​=1,则U=1。如果该u⋆=u6​=1点在有限元素之间,可用插值的方法来求取。 例如,U’=0.1/−4+0.5/−3+0.3/−2+0.1/−1+0.1/0+0.4/1+0.5/2+0.1/3+0.2/4,显然u⋆在元素0和1之间。这时,可用线性插值处理,即令Δu=1.2/(1.1+1.2)=0.522,所以取u⋆=u5​+Δu=0.522。实际上,模糊推理不需要很精确,因此也可以不用插值方法,直接取u⋆=0或者u⋆=1

与最大隶属度法相比,这种方法利用了更多的信息,但计算比较复杂,特别是在连续隶属度函数时,需要求解积分方程,因此应用场合要比加权平均法小。加权平均法比中位数法具有更佳的性能,而中位数法的模糊控制器类似于多级继电器控制,加权平均法则类似于 PI 控制器。一般情况下,都优于最大隶属法。

模糊推理的应用

至此,我们已经学习完了关于模糊推理的全部理论,接下来我们将这套理论应用到设计模糊逻辑推理系统中。要设计模糊逻辑推理系统,需要知道以下基本步骤: 1.确定输入/输出的模糊子集及其论域; 2.选择控制规则; 3.规则的关系运算(蕴含,合成); 4.精确化过程。

接下来,我选择了一个模糊洗衣机控制系统的模拟。 1.确定输入/输出的模糊子集以及论域 该系统中,设计了一个衣服上的油污、污渍的参数,

污泥{ SD (污泥少), MD (中等污泥), LD (污泥多)} 油脂{ NG (无油脂), MG (中等油脂), LG (油脂多)}

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

输出的是洗衣机的洗涤时间: 洗涤时间{ VS (很短), S (短), M (中等), L (长), VL (很长)}

2.选择控制规则

3.规则的关系运算(蕴含,合成) 污泥、污渍以及洗涤时间的隶属度函数的解析表达式如下:

4.精确化过程 通过最大隶属度函数,来计算模糊控制输出的量化值。

编程要求

根据提示,本关的编程任务是补全右侧代码片段 Begin 至 End 中间的代码。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入: 20.0 20.0 预期输出: VS

测试输入: 20.0 30.0 预期输出: S

测试输入: 30.0 30.0 预期输出: M

  1. OIL=100.0
  2. Stain=100.0
  3. def ruleMD(stain):
  4. if stain<0 or stain>100:
  5. return 0.0
  6. else:#当传入的参数在0-100之间时,该处有两种情况
  7. # 计算MD的结果,并且和同参数下的SD结果相比较,得出一个结果
  8. if stain>=0 and stain<=50:
  9. return stain/50.0
  10. else:
  11. # 同上的操fl作,得出结果和同参数下的LD相比较
  12. return (100-stain)/50.0
  13. def ruleSD(stain):
  14. #SD部分的rule
  15. #当输入的参数0 <= x <= 50, 执行该方法
  16. result=(50-stain)/50.0
  17. returnMDresult=ruleMD(stain)
  18. #传参数到MD中,计算,并比较
  19. #1、相同,则返回结果为SD,2、SD的结果大,则返回SD,3、MD的结果大,则返回MD的返回值
  20. if result<returnMDresult:
  21. return 2.0
  22. else:
  23. return 1.0
  24. def ruleLD(stain):
  25. #LD部分的rula
  26. #当输入的参数在50 - 100之间时,执行
  27. #同时将参数传入给MD,同时比较MD方法传回来的参数和该方法求出的值相比较,求出最后的最适合的预测值
  28. # ********** Begin **********#
  29. returnMDresult=ruleMD(stain)
  30. result=(stain-50)/50.0
  31. #比较后,得到预测值
  32. if result<returnMDresult:
  33. return 2.0
  34. else:
  35. return 3.0
  36. # ********** End **********#
  37. def ruleMG(oil):
  38. #当传入的参数在0 - 100之间时,该处有两种情况
  39. if oil<0 or oil>100:
  40. return 0#当在论域之外时,直接返回无结果
  41. else:
  42. if oil>=0 and oil<=50:
  43. return oil/50.0#计算MD的结果,并且和同参数下的SD结果相比较,得出一个结果
  44. else:
  45. return (100 - oil) / 50#同上的操作,得出结果和同参数下的LD相比较
  46. def ruleSG(oil):
  47. if oil<0 or oil>50:
  48. return 0.0
  49. else:
  50. #SG部分的rule
  51. #当输入的参数0<=x<=50,执行该方法
  52. result=(50-oil)/50.0
  53. returnMGresult=ruleMG(oil)
  54. #传参数到MD中,计算,并比较
  55. #1、相同,则返回结果为SD,2、SD的结果大,则返回SD,3、MD的结果大,则返回MD的返回值
  56. if result<returnMGresult:
  57. return 2.0
  58. else:
  59. return 1.0
  60. def ruleLG(oil):
  61. # LD部分的rula
  62. #当输入的参数在50 - 100之间时,执行
  63. #同时将参数传入给MG,同时比较MG方法传回来的参数和该方法求出的值相比较,求出最后的最适合的预测值
  64. returnMGresult=ruleMG(oil)
  65. result=(oil-50)/50.0
  66. #比较后,得到预测值
  67. if result<returnMGresult:
  68. return 2.0
  69. else:
  70. return 3.0
  71. #F函数,总的函数,从该函数中分流到rule的三个函数中
  72. def Function(oil,stain):
  73. #VS: SD, SG
  74. #S: MD, SG
  75. #M: SD, MG MD, MG LD, SG
  76. #L: SD, LG MD,LG LD,MG
  77. #XL: LD, LG
  78. #根据规则输出最后的洗涤时间
  79. #需要客户的正确输入
  80. # ********** Begin **********#
  81. if oil<0 or oil>OIL or stain<0 or stain>Stain:
  82. return 0.0
  83. else:
  84. #根据参数的大小,分别传送给各个rula
  85. if oil>=0 and oil<=50:
  86. result_G=ruleSG(oil)
  87. else:
  88. result_G=ruleLG(oil)
  89. if stain>=0 and stain<=50:
  90. result_D=ruleSD(stain)
  91. else:
  92. result_D=ruleLD(stain)
  93. # ********** End **********#
  94. #比较最后的结果
  95. if result_D==1.0 and result_G==1.0:
  96. return 1 #return VS
  97. elif result_G==1.0 and result_D==2.0:
  98. return 2#return S
  99. elif (result_D==1.0 and result_G==2.0) or (result_G==2.0 and result_D==2.0) or (result_G==1.0 and result_D==3.0):
  100. return 3 #reutrn M
  101. elif (result_D==1.0 and result_G==3.0) or (result_D==2.0 and result_G==3.0) or (result_D==3.0 and result_G==2.0):
  102. return 4#return L
  103. elif result_G==3.0 and result_D==3.0:
  104. return 5#return VL

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

闽ICP备14008679号