Symulowane wyżarzanie TSP

Szukam implementacji algorytmu symulowanego wyżarzania w Javie, aby znaleźć optymalną trasę dlaProblem komiwojażera, do tej pory zaimplementowałem brutalną siłę i zamierzam zmodyfikować ten kod, aby użyć symulowanego wyżarzania. Oczywiście brutalna siła i symulowane wyżarzanie są bardzo różne i używają bardzo różnych funkcji.

Rozumiem, że symulowane wyżarzanie wykorzystuje zmienną znaną jako temperatura, która następnie ochładza się podczas działania algorytmu; przy wysokiej temperaturze zaczynającej się stopniowo i stopniowo ochładzającej się. Podczas gdy temperatura jest wysoka, algorytm częściej wybiera rozwiązania, które są gorsze od prądu, eliminując lokalne maksima, jakie można znaleźć w podobnym algorytmie wspinania się na wzgórze. W miarę schładzania algorytm raczej nie zaakceptuje gorszych rozwiązań, a więc może skupić się na określonym obszarze i szybko znaleźć optymalną trasę.

Wierzę, że rozumiem, jak działa ten algorytm, ale mam problem z umieszczeniem go w Javie, mam 2 klasy; jeden o nazwie Miasto, który zawiera tylko metody pozwalające opracować szczegóły każdego miasta, takie jakgetIndex, getDistance, itp. Klasa algorytmu odczytuje z pliku wejściowego i zapisuje go w tablicy (int [][])

Poniższy kod jest algorytmem dla brutalnej siły, który chcę zmodyfikować, aby zamiast tego przeprowadzić symulowane wyżarzanie.

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();
    }
}

questionAnswers(2)

yourAnswerToTheQuestion