Python方法RSBF

Python方法RSBF,python,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)) f

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

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

如果不确切知道
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\u successeur(fils)
    永远不会返回非0的内容。换句话说,您应该查看
    meilleur\u successeur
    ,并确保它总是从
    fils
    获得最佳的继任者


仅供参考,虽然用您的母语编写代码更容易,但这使得其他人更难评估您的代码,因为他们不会说。一般来说,编写代码时应尽量使用英语。我知道这可能很难,但可以把它看作是提高你的英语水平!您是否尝试了
a
limite
的多个值?这可能会影响人们给你的答案。a是一个矩阵,limit是一个无穷大的值(最大值)。StackExchange不鼓励用英语以外的语言发布,所以尽管我有这个答案的法文翻译,但我不会公开发布。Heuristique计算曼哈顿距离