【人工智能II】洗衣机控制的模糊推理模型

参考学习博客:模糊推理模型----模糊控制洗衣机(人工智能课后作业)
python代码:

'''
洗涤时间范围【0,60】,污浊度以及油渍的范围【0,100】
输入:污浊度 Stain(SD、MD。LD) 油脂度 Oil(N、M、L)
输出:洗涤时间 time(VS、S、M、L、VL)
'''

OIL = 100.0
Stain = 100.0

'''
创建结构体elem
'''
class Myclass(object):
    class Struct(object):
        def __init__(self, oil, stain, result):
            self.oil = oil
            self.stain = stain
            self.result = result

    def makestruct(self, oil, stain, result):
        return self.Struct(oil, stain, result)

'''
计算污浊度:1 表示 SD,2 表示 MD,3 表示 LD
'''
def ruleMD(stain):
    if stain < 0 or stain > 100.0:
        return 0.0
    else:
        if stain >= 0 and stain <= 50.0:
            return stain / 50.0
        else:
            return (100.0 - stain) / 50.0

def ruleSD(stain):
    # SD的部分结果,当输入参数在0和50之间时使用
    result = (50.0 - stain) / 50.0
    returnMDresult = ruleMD(stain)
    # 与MD的值进行比较,相同则返回SD;否则,就取大值
    if result < returnMDresult:
        return 2.0
    else:
        return 1.0

def ruleLD(stain):
    # LD的部分结果,当输入参数在0和50之间使用
    returnMDresult = ruleMD(stain)
    result = (stain - 50.0) / 50.0
    # 结果与MD的结果进行对比,得出最准确的值
    if returnMDresult > result:
        return 2.0
    else:
        return 3.0

'''
计算油脂度:1 表示 N,2 表示 M,3 表示 L
'''
def ruleM(oil):
    if oil < 0 or oil > 100.0:
        return 0
    else:
        if oil >=0 and oil <=50.0:
            return oil / 50.0
        else:
            return (100.0 - oil) / 50.0

def ruleN(oil):
    if oil < 0 or oil > 100.0:
        return 0
    else:
        # N的部分结果,当输入参数在0和50之间使用
        result = (50.0 - oil) / 50.0
        returnMresult = ruleM(oil)
        # 与M相比,相同则返回N;否则就返回值大的一个
        if result < returnMresult:
            return 2.0
        else:
            return 1.0

def ruleL(oil):
    returnMresult = ruleM(oil)
    result = (oil - 50.0) / 50.0
    if result < returnMresult:
        return 2.0
    else:
        return 3.0

'''
总函数计算,计算洗涤时长并输出:
VS: SD N
S: MD N
M: SD M   MD M   LD N
L: SD L   MD L   LD M
VL: LD L
'''
def f(oil, stain):
    if oil < 0 or oil > OIL or stain < 0 or stain > Stain:
        return 0
    else:
        # 根据参数大小,计算结果
        if oil >=0 and oil <= 50:
            resultG = ruleN(oil)
        else:
            resultG = ruleL(oil)

        if stain >= 0 and stain <= 50:
            resultD = ruleSD(stain)
        else:
            resultD = ruleLD(stain)

        # 最后结果
        # VS
        if resultD == 1.0 and resultG == 1.0:
            return 1
        # S
        elif resultG == 1.0 and resultD == 2.0:
            return 2
        # M
        elif (resultD == 1.0 and resultG == 2.0) or (resultD == 2.0 and resultG == 2.0) or (resultD == 3.0 and resultG == 1.0):
            return 3
        # L
        elif (resultD == 1.0 and resultG == 3.0) or (resultD == 2.0 and resultG == 3.0) or (resultD == 3.0 and resultG == 2.0):
            return 4
        # VL
        elif resultG == 3.0 and resultD == 3.0:
            return 5

'''
主函数
'''
if __name__ == '__main__':
    print("油脂度")
    oilreal = float(input())
    print(("污浊度"))
    stainreal = float(input())

    myclass = Myclass()
    elem = myclass.makestruct(oilreal, stainreal, 0)

    elem.result = f(elem.oil, elem.stain)
    #print("污浊度:" + elem.stain + "油脂度:" + elem.oil)

    if elem.result == 1:
        print("VS")
    elif elem.result == 2:
        print("S")
    elif elem.result == 3:
        print("M")
    elif elem.result == 4:
        print("L")
    elif elem.result == 5:
        print("VL")
  • 16
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值