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