赞
踩
头歌题目
本关任务:设计并实现洗衣机模糊推理系统。依次向系统输入油污与污渍,系统输出清洗时间的长短,具体描述见模糊推理的应用。
为了完成本关任务,你需要掌握模糊推理。
说到推理,我们首先想到的就是知识表示,在进行模糊推理时,首先要进行的就是模糊知识表示。在前面的实训中,我们提到由于模糊不确定性,一般采用隶属度来刻画。隶属度是一个命题中所描述的事物的属性、状态和关系等的强度。例如我们用三元组(张三,体型,(胖,0.9))表示命题“张三比较胖”,其中的 0.9 就代替“比较”而刻画了张三“胖”的程度。这种隶属度表示法,一般是一种针对对象的表示法。模糊知识表示一般形式为(<对象>,<属性>,(<属性值>,<隶属度>))。 事实上,这种思想和方法还可广泛用于产生式规则、逻辑规则、谓词逻辑、框架、语义网络等多种表示方法,从而扩充它们的表示范围和能力。一般,人类思维判断的基本形式是
如果 (条件) → 则 (结论)
其中的条件和结论常常是模糊的。 例如,对下列模糊知识 如果 压力较高且温度在缓慢上升 则 阀门略开 其中的条件和结论常常是模糊的。 许多模糊规则实际上是一组多重条件语句,可以表示为从条件论域到结论论域的模糊关系矩阵R。通过条件模糊向量与模糊关系 R 的合成进行模糊推理,得到结论的模糊向量,然后采用清晰化的方法将模糊结论转化精确量。 对于 IF A THEN B 类型的模糊规则的推理,若已知A,则输出为B;若现在已知输出为A′,则输出B′。用合成规则求取B′=A′∘R
,其中R
为A
到B
的模糊关系。
由上述模糊推理得到的结论或者操作是一个模糊向量,不能直接应用,需要先转化为确定值。将模糊推理得到的模糊向量,转化为确定量的过程为“模糊决策”,或者“模糊判决”,“清晰化”,“反模糊化”等。下面介绍几种简单、实用的模糊决策的方法。
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
- OIL=100.0
- Stain=100.0
- def ruleMD(stain):
- if stain<0 or stain>100:
- return 0.0
- else:#当传入的参数在0-100之间时,该处有两种情况
- # 计算MD的结果,并且和同参数下的SD结果相比较,得出一个结果
- if stain>=0 and stain<=50:
- return stain/50.0
- else:
- # 同上的操fl作,得出结果和同参数下的LD相比较
- return (100-stain)/50.0
- def ruleSD(stain):
- #SD部分的rule
- #当输入的参数0 <= x <= 50, 执行该方法
- result=(50-stain)/50.0
- returnMDresult=ruleMD(stain)
- #传参数到MD中,计算,并比较
- #1、相同,则返回结果为SD,2、SD的结果大,则返回SD,3、MD的结果大,则返回MD的返回值
- if result<returnMDresult:
- return 2.0
- else:
- return 1.0
- def ruleLD(stain):
- #LD部分的rula
- #当输入的参数在50 - 100之间时,执行
- #同时将参数传入给MD,同时比较MD方法传回来的参数和该方法求出的值相比较,求出最后的最适合的预测值
- # ********** Begin **********#
- returnMDresult=ruleMD(stain)
- result=(stain-50)/50.0
- #比较后,得到预测值
- if result<returnMDresult:
- return 2.0
- else:
- return 3.0
- # ********** End **********#
- def ruleMG(oil):
- #当传入的参数在0 - 100之间时,该处有两种情况
- if oil<0 or oil>100:
- return 0#当在论域之外时,直接返回无结果
- else:
- if oil>=0 and oil<=50:
- return oil/50.0#计算MD的结果,并且和同参数下的SD结果相比较,得出一个结果
- else:
- return (100 - oil) / 50#同上的操作,得出结果和同参数下的LD相比较
- def ruleSG(oil):
- if oil<0 or oil>50:
- return 0.0
- else:
- #SG部分的rule
- #当输入的参数0<=x<=50,执行该方法
- result=(50-oil)/50.0
- returnMGresult=ruleMG(oil)
- #传参数到MD中,计算,并比较
- #1、相同,则返回结果为SD,2、SD的结果大,则返回SD,3、MD的结果大,则返回MD的返回值
- if result<returnMGresult:
- return 2.0
- else:
- return 1.0
- def ruleLG(oil):
- # LD部分的rula
- #当输入的参数在50 - 100之间时,执行
- #同时将参数传入给MG,同时比较MG方法传回来的参数和该方法求出的值相比较,求出最后的最适合的预测值
- returnMGresult=ruleMG(oil)
- result=(oil-50)/50.0
- #比较后,得到预测值
- if result<returnMGresult:
- return 2.0
- else:
- return 3.0
- #F函数,总的函数,从该函数中分流到rule的三个函数中
- def Function(oil,stain):
- #VS: SD, SG
- #S: MD, SG
- #M: SD, MG MD, MG LD, SG
- #L: SD, LG MD,LG LD,MG
- #XL: LD, LG
- #根据规则输出最后的洗涤时间
- #需要客户的正确输入
- # ********** Begin **********#
- if oil<0 or oil>OIL or stain<0 or stain>Stain:
- return 0.0
- else:
- #根据参数的大小,分别传送给各个rula
- if oil>=0 and oil<=50:
- result_G=ruleSG(oil)
- else:
- result_G=ruleLG(oil)
- if stain>=0 and stain<=50:
- result_D=ruleSD(stain)
- else:
- result_D=ruleLD(stain)
- # ********** End **********#
- #比较最后的结果
- if result_D==1.0 and result_G==1.0:
- return 1 #return VS
- elif result_G==1.0 and result_D==2.0:
- return 2#return S
- 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):
- return 3 #reutrn M
- 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):
- return 4#return L
- elif result_G==3.0 and result_D==3.0:
- return 5#return VL
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。