模糊逻辑——洗衣机模糊推理系统

要求:

设计洗衣机洗涤时间的模糊控制。

已知规则:

  1. 如果污泥多,油脂多,则洗涤时间长;
  2. 如果污泥适中,油脂适中,则洗涤时间适中;
  3. 如果污泥少,油脂少,则洗涤时间适中。

模糊控制规则如表1所示。

表 1 洗衣机模糊控制规则表

NG

MG

LG

SD

VS

M

L

MD

S

M

L

LD

M

L

VL

其中,污泥:{SD(污泥少), MD(中等污泥), LD(污泥多)};油脂:{NG(无油脂), MG(中等油脂), LG(油脂多)};洗涤时间:{VS(很短), S(短), M(中等), L(长), VL(很长)}。

假设污泥、油脂、洗衣机洗涤时间的论域分别是[0, 100]、[0, 100]和 [0, 120]。

假定当前传感器测得的信息为(污泥)x0=60,(油脂) y0=70,采用模糊决策,给出模糊推理结果。

 代码实现及运行结果:
def triangle(x, a, b, c):
    if x <= a or x >= c:
        return 0
    elif a < x <= b:
        return (x - a) / (b - a)
    else:
        return (c - x) / (c - b)

# 定义模糊集合
f_SD = lambda x: triangle(x, 0, 0, 40)    # SD(污泥少)
f_MD = lambda x: triangle(x, 30, 50, 70)  # MD(中等污泥)
f_LD = lambda x: triangle(x, 60, 100, 100)  # LD(污泥多)

f_NG = lambda x: triangle(x, 0, 0, 40)    # NG(无油脂)
f_MG = lambda x: triangle(x, 30, 50, 70)  # MG(中等油脂)
f_LG = lambda x: triangle(x, 60, 100, 100)  # LG(油脂多)

f_VS = lambda x: triangle(x, 0, 0, 20)    # VS(很短)
f_S = lambda x: triangle(x, 10, 30, 50)   # S(短)
f_M = lambda x: triangle(x, 40, 60, 80)   # M(中等)
f_L = lambda x: triangle(x, 60, 80, 100)  # L(长)
f_VL = lambda x: triangle(x, 80, 100, 120)  # VL(很长)

# 定义模糊控制规则
rule1 = lambda x, y: min(f_LD(x), f_LG(y))  # 如果污泥多,油脂多,则洗涤时间长
rule2 = lambda x, y: min(f_MD(x), f_MG(y))  # 如果污泥适中,油脂适中,则洗涤时间适中
rule3 = lambda x, y: min(f_SD(x), f_NG(y))  # 如果污泥少,油脂少,则洗涤时间适中

# 计算隶属度
x0, y0 = 60, 70
mu_SD, mu_MD, mu_LD = f_SD(x0), f_MD(x0), f_LD(x0)
mu_NG, mu_MG, mu_LG = f_NG(y0), f_MG(y0), f_LG(y0)

mu_VS = min(mu_SD, mu_NG, f_VS(x0))
mu_S = max(min(mu_SD, mu_MG), min(mu_MD, mu_NG), f_S(x0))
mu_M = max(min(mu_MD, mu_MG), min(mu_LD, mu_NG), min(mu_SD, mu_NG), f_M(x0))
mu_L = max(min(mu_LD, mu_MG), min(mu_MD, mu_LG), f_L(x0))
mu_VL = min(mu_LD, mu_LG, f_VL(x0))

# 根据最大值原则计算输出
T_max = max(mu_VS, mu_S, mu_M, mu_L, mu_VL)

# 输出结果
print("VS(很短):", mu_VS)
print("S(短):", mu_S)
print("M(中等):", mu_M)
print("L(长):", mu_L)
print("VL(很长):", mu_VL)

print("模糊推理结果: 洗涤时间为 ", end="")
if T_max == mu_VS:
    print("很短")
elif T_max == mu_S:
    print("短")
elif T_max == mu_M:
    print("中等")
elif T_max == mu_L:
    print("长")
else:
    print("很长")

模糊逻辑——洗衣机模糊推理系统_第1张图片 

这段代码主要包括三个部分:定义模糊集合、定义模糊控制规则和进行推理计算。

        在定义模糊集合中,我们首先定义了三个输入变量:污泥的含量、油脂的含量和洗涤时间的隶属度。其中,我们使用了三角形函数(即"triangle")来表示模糊集合,并将每个模糊集合命名为f_SD、f_MD和f_LD(分别代表"污泥少"、"中等污泥"和"污泥多"),以及f_NG、f_MG和f_LG(分别代表"无油脂"、"中等油脂"和"油脂多")和f_VS、f_S、f_M、f_L和f_VL(分别代表"很短"、"短"、"中等"、"长"和"很长")。

        在定义模糊控制规则中,我们定义了三个规则:当污泥多且油脂多时,洗涤时间长;当污泥适中且油脂适中时,洗涤时间适中;当污泥少且油脂少时,洗涤时间适中。这些规则使用 lambda 函数的形式进行定义,并命名为 rule1、rule2 和 rule3。

        在推理计算中,我们首先针对输入值进行隶属度计算,根据定义的函数和规则分别计算出各个模糊集合的隶属度。同时,我们还使用了 min 和 max 函数来计算出每个输出变量对应的隶属度。最终,使用最大值原则(即选取隶属度最高的结果作为输出)计算出系统的输出(即洗涤时间),并将其打印到控制台上。

        通过定义模糊集合、模糊控制规则和隶属度计算,该系统能够自适应地根据输入信息(污泥含量和油脂含量)调整洗涤时间,以达到最佳的洗涤效果。

小结:

        我们需要根据实际问题的特点来选择模糊集合的定义、隶属函数的设计和模糊规则库的建立。在洗涤机的例子中,我们将污泥和油脂的多少、洗涤时间的长短都定义为模糊集合,并通过模糊控制规则来推导出洗涤时间的连续值,再根据最大值原则计算出洗涤时间的模糊输出。 

        在模糊推理中,隶属度用于计算对象对于某个模糊概念的归属程度,模糊关系用于对多个模糊集合进行运算得到新的模糊集合,模糊规则用于描述条件和结果之间的模糊关系 

你可能感兴趣的:(python)