人工智能导论实验5python代码

def combination(d1, d2):
    # 初始化一个字典
    united = set(d1.keys()).union(set(d2.keys()))
    result=dict.fromkeys(united,0)

    ## 融合
    for i in d1.keys():
        for j in d2.keys():
            if {''}==i and {''}==j:#''之间的交集
                result[i]+=d1[i]*d2[j]
            else:
                if {''}==i:#'' 'char'
                    result[j]+=d1[i]*d2[j]
                if {''}==j:#'char' ''
                    result[i]+=d1[i]*d2[j]
                if {''}!=i and {''}!=j:
                    common = frozenset(i.intersection(j))#保存交集
                    for k in result.keys():
                        if (len(common)!=0 and(common==k)):#检查之前的交集是否在字典键里
                            result[k] += d1[i]*d2[j]
                            break

    #四舍五入
    for i in result.keys():
        result[i] = round(result[i],4)

    #四舍五入
    f= sum(list(result.values()))
    f=round(f,4)
    #相除后四舍五入
    for i in result.keys():
        result[i] =round(result[i]/f,4)

    return result
def get_mass(allLines):
    mass = {}
    previousLine = {}
    currentLine = {}
    previousLine = transformset(ast.literal_eval(allLines[0]))
    for line in range(1,len(allLines)):
        if allLines[line][0]!='#':
            currentLine = transformset(ast.literal_eval(allLines[line]))
            mass = combination(previousLine,currentLine)
            previousLine=mass
    return mass.copy()
def get_beliefs(masses):
    belief = masses.copy()
    for i in belief.keys():
        for j in belief.keys():
            if(i!=j):
                if i.issuperset(j) and {''}!=i and {''}!=j:
                    belief[i]+=masses[j]
    for i in belief.keys():
        belief[i] = round(belief[i],4) #保留4位小数
    return belief

def get_plausibility(masses):
    plausibility = masses.copy()

    for i in plausibility.keys():
        plausibility[i] = 0 #初始化为0
    for i in plausibility.keys():
        for j in plausibility.keys():
            if len(i.intersection(j))!=0 and {''}!=i:
                plausibility[i]+=masses[j]
            if {''}==j:
                plausibility[i]+=masses[j]

    for i in plausibility.keys():
        plausibility[i] = round(plausibility[i],4) #保留4位小数
    return plausibility
import operator
################ ''被选择来表示所有元素的集合
def getkeys(structure):
    return set([elem[0] for elem in structure])
import json

def transformset(input):
    return dict((frozenset(elem[0]),elem[1]) for elem in input)


def filter_results(beliefs, plausibility):
    finalSet = {}
    #使用超集过滤具有相同信任值和合理性的元素
    for elem in beliefs.keys():
        # ssetFlag = False
        # for elemb in beliefs.keys():
        #     if elem!=elemb and elemb.issuperset(elem) and beliefs[elem]==beliefs[elemb] and plausibility[elem]==plausibility[elemb]:
        #         ssetFlag = True
        #         break
        # if ssetFlag == False and plausibility[elem]!=0.0:
        #     finalSet[elem] = beliefs[elem]
        finalSet[elem] = beliefs[elem]
    return finalSet

def get_final_result(elements, plausibility):
    resultString = ''
    for elem in elements:
        setOfElems = elem[0]
        movieTypes = str(setOfElems)

        # for element in setOfElems:
        #     movieTypes += decodings[letter]+', '
        if elem[0] != {''}:
            resultString += movieTypes[11:-2]+' ['+str(elem[1])+', '+str(plausibility[elem[0]])+']\n'
    return resultString
s = '''[[{'cold', 'flu'},0.6], [{'meningitis'},0.2], [{'indigestion'},0.1], [{''},0.1]]
[[{'meningitis','indigestion'},0.7], [{''},0.3]]
[[{'cold','flu','indigestion'},0.99], [{''},0.01]]
'''
import io
f = io.StringIO(s)
import ast
mass={}
lines = f.readlines()
if len(lines)>1:
    mass = get_mass(lines)
    # print(mass)
    # all = frozenset({''})
    # if all in mass:
    #     del mass[all]
    beliefs = get_beliefs(mass)
    # print(beliefs)
    plausibility = get_plausibility(mass)
    # print(plausibility)
    final_set = filter_results(beliefs, plausibility)
    # # print(final_set)
    # # #order elements
    all_elements=sorted(final_set.items(), key=operator.itemgetter(1),reverse=True)
    print("Intervals")
    print(get_final_result(all_elements, plausibility))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值