洗衣机模糊推理实验

洗衣机模糊推理实验

实验要求:
已知有模糊规则:“如果污泥多,油脂多,则洗涤时间长”。
设:
污泥论域:{少, 中等, 多};“污泥多”=0/少+0.5/中等+1/多;
油脂论域:{无, 中等, 多} ; “油脂多”=0/少+0.5/中等+1/多;
洗涤时间论域: {很短, 短, 长, 很长} ;
“洗涤时间长”=0/很短+0.3/短+0.6/长+1.0/很长
内容:输入是被洗衣物的污泥和油脂的模糊量,计算洗涤时间。
例如已知事实:“污泥多”=0.3/少+0.6/中等+0.8/多;
“油脂多”=0.8/少+0.3/中等+0.2/多。
要求:
1.打印模糊关系R(污泥到洗涤时间R1,油脂到洗涤时间R2,两者
到洗涤时间关系R);
2.打印模糊向量;
3.计算洗涤时间。
话不多说先上代码

import numpy as np
# 污泥:[0,0.5,1]    油脂:[0,0.5,1]   洗涤时间:[0,0.3,0.6,1]

# 输入
def input_sludge():
    print("污泥论域:[少,中等,多],请输入论域的模糊量:(用空格分割开)")
    sludge=[]
    sludge=input()
    sludge=sludge.split(' ')
    return sludge
def input_grease():
    print("油污论域:[无,中等,多],请输入论域的模糊量:(用空格分割开)")
    grease=[]
    grease=input()
    grease=grease.split(' ')
    return grease

# 模糊合成
def Fuzzy_synthesis1(sDomain,gDomain):
    data=np.zeros(shape=(len(sDomain),len(gDomain)),dtype=float)
    for i in range(len(sDomain)):
        for j in range(len(gDomain)):
            data[i][j]=max(sDomain[i],gDomain[j])
    return data

def Fuzzy_synthesis2(R1,R2T):
    data = np.zeros(shape=(len(R1), len(R2T[0])), dtype=float)
    data1=0.0
    for i in range(len(R1)):
        for j in range(len(R2T[0])):
            for k in range (len(R2T)):
                data2=min(R1[i][k],R2T[k][i])
                if(data1<data2):
                    data1=data2
            data[i][j]=data1
    return data



# 模糊关系
def Fuzzy_relation(blendDomain,washTimeDomain):
    blendDomain = [y for x in blendDomain for y in x]
    data=np.zeros(shape=(len(blendDomain),len(washTimeDomain)),dtype=float)
    for i in range(len(blendDomain)):
        for j in range(len(washTimeDomain)):
            data[i][j]=min(blendDomain[i],washTimeDomain[j])
    return data

# 打印模糊向量
def Fuzzy_vector(vector):
    print(vector)

# 模糊推理
def Fuzzy_inference(blend,relation):
    blend= [y for x in blend for y in x]
    data = [-1 for _ in range(len(relation[0]))]
    for j in range(len(relation[0])):
        for i in range(len(blend)):
            data[j] = max(data[j], min(blend[i], relation[i][j]))

    return data

# 最大隶属度
def Fuzzy_decision(inter_result):
    max = 0
    for i in range(len(result)):
        if (result[max] < result[i]):
            max = i
    return max + 1

def Fuzzy_result(grade):
    if(grade==1):
        print("很短")
    elif(grade==2):
        print("短")
    elif(grade==3):
        print("长")
    else:
        print("很长")

# 论域
sludgeDomain=[0,0.5,1]
greaseDomain=[0,0.5,1]
washTimeDomain=[0,0.3,0.6,1]
# 模糊合成
blendDomain=Fuzzy_synthesis1(sludgeDomain,greaseDomain)
print("污泥和油脂混合后的模糊结果:")
print(blendDomain)

# 打印模糊向量
print("污泥的模糊向量")
Fuzzy_vector(sludgeDomain)
print("油脂的模糊向量")
Fuzzy_vector(sludgeDomain)
print("污泥油脂混合的模糊向量")
Fuzzy_vector(sludgeDomain)
print("--------------------------")

# 输出模糊关系
print("模糊关系如下:")
fuzzyrelation=Fuzzy_relation(blendDomain,washTimeDomain)
print(fuzzyrelation)
# print(len(fuzzyrelation[0]))
print("\n--------------------------")

# 测试输出数据
# sludge=[0.3,0.6,0.8]
# grease=[0.8,0.3,0.2]
sludge=input_sludge()
grease=input_grease()
# print(sludge)
# print(grease)

blendsg=Fuzzy_synthesis1(sludge,grease);
result=Fuzzy_inference(blendsg,fuzzyrelation)
print(result)

grade=Fuzzy_decision(result)
# 最大隶属度
print("最大隶属度为:")
print(grade)
print("在该污泥程度以及油脂程度下,洗衣时间:")
Fuzzy_result(grade)

# 第二中,按题目要求,感觉不太现实
print("methon 2")

print("泥污与时间的混合关系一R1")
R1=Fuzzy_synthesis1(sludgeDomain,washTimeDomain)
print(R1)
print("\n")
print("油脂与时间的混合关系二R2")
R2=Fuzzy_synthesis1(greaseDomain,washTimeDomain)
print(R2)
print("\n")
print("R1与R2模糊关系合成")
R2T = [[R2[j][i] for j in range(len(R2))] for i in range(len(R2[0]))]
print(R2T)
# print(len(R1))
# print(len(R2T[0]))
print("模糊合成结果")
R=Fuzzy_synthesis2(R1,R2T)
print(R)
print("\n")
print("模糊关系如下:")
fuzzyrelation2=Fuzzy_relation(R,washTimeDomain)
print(fuzzyrelation2)
print("input:")
sludge1=input_sludge()
grease1=input_grease()

blendsg1=Fuzzy_synthesis1(sludge1,grease1);
result1=Fuzzy_inference(blendsg1,fuzzyrelation)
print(result)

grade1=Fuzzy_decision(result)
# 最大隶属度
print("最大隶属度为:")
print(grade1)
print("在该污泥程度以及油脂程度下,洗衣时间:")
Fuzzy_result(grade1)

运行结果:

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年11月10日
下一篇 2023年11月10日

相关推荐