Python Methode RSBF

时间:2017-02-23 12:58:02

标签: python

我不知道为什么我的代码会进入无限循环 我有一个计算马纳汉距离的启发式方法

def RSBF(a,limite):

    if heuristique(a)==0:
        return a
    fils=creer_fils(a)
    #fils_2=copy.deepcopy(fils)

    if len(fils)==0:
        return 0,limite
    V=[]
    #fils_2.remove(min(fils_2))

    for succ in fils :
        sc=heuristique(succ)
        k=max(sc+1,heuristique(a))

        V.append(k)

    while True:

        succmeilleur=[meilleur_successeur(fils),min(V)]#the best node et values

        #print(heuristique(succmeilleur))
        if succmeilleur[1] >= limite:

            return 0,succmeilleur[1] 
               #l=copy.deepcopy(min(V))

        valeur_v=V[deuxieme_valeur(V,V.index(min(V)))]#return the second lowest values

        resultat,succmeilleur[1]=RSBF(succmeilleur[0],min(limite,valeur_v))
        if resultat!=0:
            return resultat

1 个答案:

答案 0 :(得分:0)

在不确切知道heuristique和其他方法如何工作的情况下,这段代码有点难以诊断。特别是因为我不知道如何以数学方式启发式计算这样的东西。

然而,显而易见的是while True循环中发生了两件事:

  • succmeilleur[1]永远不会是> = limite

    min(V)永远不会超过limite。当你这样做时:

    sc=heuristique(succ)
    k=max(sc+1,heuristique(a))
    
    V.append(k)
    
    正在创建

    V,使V的最小值永远不会大于limite。确保V在每个循环中返回正确的列表,我认为这是一个列表,其中V的最小值继续达到限制。

  • resultat总是= 0

    这意味着meilleur_successeur(fils)永远不会返回不为0的内容。换句话说,您应该查看meilleur_successeur并确保始终从fils获得最佳继任者。