title: Python TSP Berlin 52 with Simulated Annealing
body: <p>I want to know what this function does:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>I'm doing this function to "anneal" the tour1 but I'm not sure if I'm doing it well. I'm especially tangled at the commented lines (#), can someone help me please to know what I'm doing!? Or better, if I'm doing it well?</p>
  
  <p>edited:</p>
  
  <p>this is my SA part:</p>
  
  <pre><code>tamañoTour = len(matriz)
  inicioTour = []
  inicioTour = Tour(tamañoTour)
  print(inicioTour)
  costoTourInicio = PesoTour(inicioTour, matriz)
  print(costoTourInicio)
  
  nuevoTour = []
  temp = 1000000000
  #i = 0
  
  while(temp &gt; 0.000000001):
      for j in range(40):
  
          nuevoTour = Recocido(inicioTour)
          #print(nuevoTour)
          costoNuevoTour = PesoTour(nuevoTour, matriz)
          #print(costoNuevoTour)
          if (costoNuevoTour &lt; costoTourInicio):
              inicioTour = nuevoTour
              #temp = temp*0.99
          else:
              numero = random.random()
              deltaZ = costoNuevoTour - costoTourInicio
              prob = math.exp(-(deltaZ/temp))
              if (numero &lt; prob):
                  inicioTour = nuevoTour
                  #temp = temp*0.99
  
      #i += 1
      temp = temp*0.99
  
  #print(inicioTour)
  print(nuevoTour)
  #print(costoTourInicio)
  print(costoNuevoTour)
  #print(i)
  </code></pre>
  
  <p>matriz is a 52x52 array, well is the distances between parts of berlin52 <a href="http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/" rel="nofollow">http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/</a> </p>
  
  <p>and the other functions are:</p>
  
  <pre><code>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 &lt; 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
  </code></pre>
  
  <p>thats it, thanks for the comments.</p>