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 Wenn schlechtere route festgefahren, dann keine änderung
Objekte µ Ameisen Pheromonmatrix (PM) 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 Kugel auf graph -> tafel
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! Ameisen -> schnell, mäßig gute Lösung Simulated Anealing -> rechenintensiver, bessere Lösung