Simuliertes Glühen TSP

Ich möchte den simulierten Annealing - Algorithmus in Java implementieren, um eine optimale Route für die zu findenReisende Verkäufer ProblemBisher habe ich Brute Force implementiert und möchte diesen Code modifizieren, um simuliertes Tempern zu verwenden. Offensichtlich sind Brute-Force und simuliertes Tempern sehr unterschiedlich und verwenden sehr unterschiedliche Funktionen.

Ich verstehe, dass beim simulierten Tempern eine Variable verwendet wird, die als Temperatur bekannt ist und sich dann abkühlt, wenn der Algorithmus ausgeführt wird. Die Temperatur beginnt hoch und es kühlt sich allmählich ab. Während die Temperatur hoch ist, wählt der Algorithmus mit größerer Wahrscheinlichkeit Lösungen, die schlechter als die aktuelle sind, und beseitigt lokale Maxima, wie Sie sie im ähnlichen Algorithmus für das Bergsteigen finden würden. Während der Abkühlung ist es unwahrscheinlicher, dass der Algorithmus schlechtere Lösungen akzeptiert, sodass er sich auf einen bestimmten Bereich konzentrieren kann und eine optimale Route schnell gefunden wird.

Ich glaube, ich verstehe, wie der Algorithmus funktioniert, habe aber Probleme, dies in Java umzusetzen. Ich habe 2 Klassen. eine namens Stadt, die nur Methoden enthält, um Details zu jeder Stadt zu erarbeiten, wie zgetIndex, getDistanceusw. Die Algorithmusklasse liest aus einer Eingabedatei und speichert sie in einem Array (int [][])

Der folgende Code ist der Algorithmus für Brute-Force, den ich modifizieren möchte, um stattdessen simuliertes Tempern durchzuführen. Wenn mir jemand dabei helfen könnte, würde ich es sehr begrüßen.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage