0
我想知道這個功能是什麼:Python的TSP柏林52模擬退火
def Recocido(tour1 = []):
# tour1 = tour1[:]
izquierda = random.randrange(len(tour1))
derecha = 0
while(True):
derecha = random.randrange(len(tour1))
if (derecha != izquierda):
#tour1[izquierda], tour1[derecha] = tour1[derecha], tour1[izquierda]
break
return tour1
我在做這個功能,「退火」的tour1,但我不知道如果我這樣做好。我特別糾結於評論線(#),有人可以幫助我,請知道我在做什麼!?或者更好,如果我做得很好?
編輯:
這是我的SA部分:
tamañoTour = len(matriz)
inicioTour = []
inicioTour = Tour(tamañoTour)
print(inicioTour)
costoTourInicio = PesoTour(inicioTour, matriz)
print(costoTourInicio)
nuevoTour = []
temp = 1000000000
#i = 0
while(temp > 0.000000001):
for j in range(40):
nuevoTour = Recocido(inicioTour)
#print(nuevoTour)
costoNuevoTour = PesoTour(nuevoTour, matriz)
#print(costoNuevoTour)
if (costoNuevoTour < costoTourInicio):
inicioTour = nuevoTour
#temp = temp*0.99
else:
numero = random.random()
deltaZ = costoNuevoTour - costoTourInicio
prob = math.exp(-(deltaZ/temp))
if (numero < prob):
inicioTour = nuevoTour
#temp = temp*0.99
#i += 1
temp = temp*0.99
#print(inicioTour)
print(nuevoTour)
#print(costoTourInicio)
print(costoNuevoTour)
#print(i)
matriz是52x52陣列,以及是的berlin52 http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/
部件和其他功能之間的距離:
def Tour(tamaño):
tour1 = []
for i in range(tamaño):
while(not False):
valor = random.randrange(tamaño)
if valor not in tour1:
tour1.append(valor)
break
return tour1
def PesoTour(tour1 = [], matriz = [[]]):
valor = 0
i = 0
while(i < len(tour1)):
if (i == len(tour1) - 1):
valor = valor + matriz[tour1[i]][tour1[0]]
else:
valor = valor + matriz[tour1[i]][tour1[i+1]]
i += 1
return valor
多數民衆贊成它,感謝您的意見。
是,只是概率部分完成的功能,但我沒有結果我想,在真正的答案上太高了。看看編輯過的問題。 – Menticolcito
@Menticolcito:我沒有看到任何相關的修改。 – user2357112
我只是添加它們。 – Menticolcito