我不知道为什么我的代码会进入无限循环 我有一个计算马纳汉距离的启发式方法
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
答案 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
获得最佳继任者。