参考学习博客:模糊推理模型----模糊控制洗衣机(人工智能课后作业)
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")