模糊推理及其应用

头歌题目

任务描述

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

相关知识

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

模糊推理

说到推理,我们首先想到的就是知识表示,在进行模糊推理时,首先要进行的就是模糊知识表示。在前面的实训中,我们提到由于模糊不确定性,一般采用隶属度来刻画。隶属度是一个命题中所描述的事物的属性、状态和关系等的强度。例如我们用三元组(张三,体型,(胖,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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值