Ameisenalgorithmus und Simulated Annealing
Robert Wild
Warum das ganze?
• Viele wichtige Probleme sind NP-Hart
• Beispiele:– TSP– KNAPSACK– HAMILTONIAN CIRCUIT
TSP - Anwendungsbeispiele
• Routenplanung von Speditionen o.ä.• Layout integrierter Schaltkreise• Steuerung von Fertigungsrobotern• DNA-Sequenzierung
Grundsätzliches
• Sämtliche Testergebnisse beziehen sich auf meine Implementierungen in Ruby mit dem Datensatz XQF131 von www.tsp.gatech.edu
• Für praktische Belange wäre natürlich eine Implementierung in C sinnvoller aber hier geht es nur ums Prinzip
Ameisenalgorithmus - Vorbild
• Simuliert Ameisen bei der Futtersuche• Einzelne Ameise findet Weg zufällig• Ameisen sondern Pheromonspur ab, andere
folgen dieser• Kürzere Strecke -> Ameise kann öfter in der
gleichen Zeit laufen -> intensivere Spur -> Ameisenstrasse
• Findet gute Lösung, aber nicht optimal
Objekte
• µ Ameisen– Kennen ihre besuchten Knoten– Haben zufälligen Startpunkt
• Pheromonmatrix (PM)– Speichert die Pheromonmenge für jede Kante, im
Gegensatz zur Natur gerichtet– Wird mit einem sehr Wert initialisiert (0.000001)
Wegfindung der Ameisen
• Nächster Knotenpunkt wird durch Zufallsexperiment gewählt (Gleichung 1):
• Tau := Pheromonmenge auf der Kante• d := Kehrwert der Kantenlänge• β := Kantengewicht
PM aktualisieren
• Pheromon verdunstet nach Verdunstungsgrad α
• PM wird aktualisiert nach:
Pseudocode
Stellschrauben
Der Ameisenalgorithmus bietet dem Benutzer ein paar Einstellmöglichkeiten (Empfohlene Werte in Klammern):
• Anzahl der Ameisen (10)• Kantengewicht β (2-4)• Verdunstungsgrad α (0,6-0,9)• Explorationsregler theta (0,2-0,9)
Testergebnisse (ANT)
• Lösungen die 10%-15% über dem Optimum liegen werden schon nach wenigen Iterationen gefunden
• Nach sehr langer Zeit Lösungen <10% über Optimum
• Schwankende Ergebnisse, mehrere Durchläufe sinnvoll
• Stellschrauben haben keine nennenswerten Auswirkungen
Simulated Annealing
• Erweiterung der lokalen Suche
• Problem: findet nur lokales Minimum
Simulated Annealing
Vorbild aus der Natur
• Abkühlungsprozess von Metallen• Moleküle wollen in energiearme Zustände• Temperatur = Bewegung der Moleküle• Bei hoher Temperatur können Moleküle auch
aus niedrigen Energiezuständen ausbrechen• Mit sinkender Temperatur nur noch aus
höheren Energiezuständen
Implementierung Simulated Annealing
Implementierung Simulated Annealing
• 2 Vorschläge für ÄNDERE():– (a) Zufälliges Teilstück der Route ausschneiden
und zwischen zwei zufälligen Knoten einfügen– (b) Reihenfolge in zufälligem Teilstück reversieren
• In meinen Versuchen liefert (b) deutlich bessere Ergebnisse
Testergebnisse (SA)
• Variante (a) liefert Ergebnisse 10%-15% über Optimum
• Variante (b) findet Lösungen 1%-6% über Optimum
• Beide Varianten nähern sich nur langsam an die Lösung an
• Schwankende Ergebnisse, mehrere Durchläufe sinnvoll
Fazit
• Achtung! Achsen sind nicht linear!