Recocido Simulado TSP

Estoy buscando implementar el algoritmo de recocido simulado en Java para encontrar una ruta óptima para elProblema de vendedor ambulanteHasta ahora he implementado la fuerza bruta y estoy buscando modificar ese código para usar el recocido simulado. Obviamente, la fuerza bruta y el recocido simulado son muy diferentes y utilizan funciones muy diferentes.

Entiendo que el recocido simulado utiliza una variable conocida como la temperatura que luego se enfría a medida que se ejecuta el algoritmo; con la temperatura comenzando alta y gradualmente enfriándose. Si bien la temperatura es alta, es más probable que el algoritmo elija soluciones que sean peores que las actuales, eliminando los máximos locales como los que se encuentran en el algoritmo similar para escalar colinas. A medida que se enfría, es más improbable que el algoritmo acepte soluciones peores y, por lo tanto, pueda centrarse en un área específica y se encuentre una ruta óptima rápidamente.

Creo que entiendo cómo funciona el algoritmo, pero tengo problemas para poner esto en Java, tengo 2 clases; una llamada Ciudad que solo contiene métodos para resolver los detalles de cada ciudad comogetIndex, getDistance, etc. La clase de algoritmo lee desde un archivo de entrada y lo almacena en una matriz (int [][])

El código a continuación es el algoritmo para la fuerza bruta, que es lo que quiero modificar para hacer un recocido simulado, si alguien me ayudara a hacerlo, lo apreciaría enormemente.

public static void doBF()
{
    int random1 = generateRand();

    if (towns2.size() > random1)
    {
        Town town = towns2.get(random1);
        visitedTowns[i] = town;
        towns2.remove(town);
        i++;
        if (lastTown != 1000)
        {
            journey += town.getDistance(lastTown);
        }
        lastTown = town.getIndex();
    }
    else 
    {
        doBF();
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta