350 likes | 468 Views
InformatiCup 2008: CargoConcept. Die NP-harten Kerle. Malte Nuhn (Physik, Informatik). Linus Atorf (Physik). Gliederung. Problembeschreibung Lösungsweg Implementierung Parallelisierung Zusatzaufgabe. Aufgabenstellung CargoConcept. Gegeben: Städte (Punkte in der Ebene)
E N D
InformatiCup 2008: CargoConcept Die NP-harten Kerle Malte Nuhn (Physik, Informatik) Linus Atorf (Physik)
Gliederung Problembeschreibung Lösungsweg Implementierung Parallelisierung Zusatzaufgabe
Aufgabenstellung CargoConcept • Gegeben: • Städte (Punkte in der Ebene) • Grenzen (Einfach zusammen- hängende Fläche) • Gesucht: • Kürzestes Tunnelnetz,das alle Städte verbindet • Bedingungen: • Beliebige Zwischenstationen können eingefügt werden • Tunnel dürfen keine Grenzen kreuzen Ohne Zwischenstation Mit Zwischenstation „z“ Konkave Grenzen
Terminologie • Problemstellung besteht aus: • Städten (fest) • Grenzpolygon (fest) Problemstellung Mögliche Lösung Minimaler Spannbaum (MST) Grenzenberücksich- tigender MST (GMST) • Mögliche Lösung besteht aus: • Position und Anzahl der Zwischenstationen Entfernungsmessung auf der Erde (Kugeloberfläche)wird durch Euklidische Distanz (Ebene) nur angenähert
Form des Grenzpolygons • Konvexe Grenzen: • Alle Städte von allen erreichbar:Grenzen automatisch eingehalten • Problem des Euklidischen Steinerbaums • NP-vollständig • Konkave Grenzen: • Grenzen müssen eingehalten werden • Städte evtl. ohne Stationen nicht erreichbar:Problem der Wegfindung Algorithmus für konkaven Fall löst auch konvexen „Mindestens“ NP-vollständig
Lösungsidee Zentrale Lösungsidee: Zwischenstationen optimal einfügen GMST (der alle Städte und Stationen verbindet) liefert für gewählte Stationen opt. Tunnelnetz Reduktion auf Suche nach geeigneten Stationen • Wegen NP-Vollständigkeit: • Erschöpfende Suche für „große Probleme“ nicht realistisch • Approximation der Lösung (z.B. durch Heuristiken) • Unser Ansatz: Genetischer Algorithmus • Spezielle Heuristik zu aufwändig • Fitness-Funktion bereits bekannt (gesamte Tunnellänge) • Parameterraum eingeschränkt („nur“ Position der Zwischenstationen)
Genetischer Algorithmus • Individuum: • Stellt mögliche Lösung dar • Liste von Zwischenstationen Evolution eines Individuums: Initialisierung Fitness berechnen • Generation: • Menge der aktuellen Individuen • Wird laufend weiterentwickelt Selektion Kreuzung Mutation Optimierung
Genetischer Algorithmus • Initialisierung: • Alle Grenzpunkte zur Liste der Zwischenstationen hinzufügen • Dadurch Wegfindung garantiert Evolution eines Individuums: Initialisierung Fitness berechnen • Fitness-Funktion: • Bewertet Lösungsansätze • Wegen GMST-Berechnung (Grenzen) sehr rechenintensiv Beispiel: Selektion Kreuzung Mutation • Selektion: • Entfernt „schwache“ Individuen • Durch Backup bisheriger Generationen niemals Verschlechterung Optimierung
Genetische Operationen • Kreuzung: • Zufällige Anwendung auf Teil der gesamten Generation • Individuen tauschen oder kopieren Zwischenstationen • Fitte Individuen werden häufiger als Partner ausgewählt Evolution eines Individuums: Initialisierung Fitness berechnen Selektion • Mutation: • Zufällige Anwendung auf Teil der gesamten Generation • Stationen werden verschoben, entfernt oder hinzugefügt Kreuzung Mutation Optimierung • Optimierung: • Verschiedene Verfahren
Lokale Optimierungen Hinzufügen: Stationen werden regelmäßig optimiert (rechenintensiv, daher nur Teil der Generation) Verschieben: Entfernen:
Verwendete Sprachen und Hilfsmittel Programmiersprachen Werkzeuge • Python • Plattformunabhängig • High level • Subversion • Versionskontroll-system • PyQt (Bibliothek) • Plattformunabhängig • Natives Look & Feel • Trac • Projektmanagement • Tickets & Wiki C • Eclipse • Entwicklungs-umgebung • C • Plattformunabhängig • Low level
Aller Anfang ist schwer… Erste Veranschaulichung in MATLAB: Gesamte Tunnellänge x y
Aller Anfang ist schwer… Erste GUI in Visual Basic 6.0, Kommunikation mit Backend über TCP:
Aller Anfang ist schwer… Umstieg auf Python & Qt, Brute Force:
Aller Anfang ist schwer… Prototyp des aktuellen Designs:
Aller Anfang ist schwer… Die ausgewachsene Anwendung:
Designübersicht Programmhierarchie: Python / Qt GUI (oder Kommandozeile) Python Genetischer Algorithmus Dateninterface (XML) C-Extension Fitnessfunktion & Optimierungsroutinen
Details zur Implementierung • Features der GUI: • Komfortable Kartenansicht mit Zoom • Anzeige der bisher besten Lösung • Berechnung jederzeit pausierbar • Unterstützte Daten-Formate: • Eigenes Map-Format (simpel & schnell) • GPX (Aufgabenstellung), DOM-Parser (flexibel) • OpenStreetMap (nur lesen), SAX-Parser (performant) • C-Extension für Python: • Effiziente Implementierung der GMST-Suche • Geometrische Algorithmen • Berücksichtigung numerisch schwieriger Fälle:z.B. Zwischenstation = Grenzpunkt
Parallelisierung, Möglichkeit 1 • Mehrere „Kontinente“: • Entkoppelte Evolutionszyklen je Kontinent Kontinent 1 Generation 1 Generation 2 Generation 3 Kontinent 2 Kontinent 3 Sync Sync Sync • Vorteile: • Relativ seltene, asynchrone Kommunikation möglich • Nahezu vollständig parallele Evolution • Nachteile: • Resultate des Algorithmus von Kontinenten abhängig • Hoher Implementierungs-aufwand Evolution
Parallelisierung, Möglichkeit 2 • Ein Kontinent: • Nur Fitnessfunktion & Optimierungen parallel Großer Kontinent Generation N Worker #1 Worker #2 Worker #3 Generation N+1 • Vorteile: • Einfache Implementierung • Funktionsweise des bestehenden Algorithmus bleibt unverändert • Nachteile: • Synchronisation nach jedem Evolutionsschritt nötig • Genetische Operationen weiterhin sequentiell
Zusatzaufgabe • Bisher: • Grenzen durch einfaches Polygon gegeben • Einfach zusammenhängendes Gebiet • Zusatzaufgabe: • Durch weitere Polygone festgelegte Hindernisse(z.B. Seen, hartes Gestein) • Landesgebiet nicht mehr einfach zusammenhängend • Erkenntnis: • Vorgestelltes Verfahren setzt den einfachenZusammenhang des Gebietes nicht voraus • Keine grundlegenden Veränderungen notwendig
Zusatzaufgabe • Notwendige Änderungen: • Editierbare Liste von Hindernispolygonen • Stationen dürfen nicht innerhalb der Hindernispolygone liegen • Verwende Grenzen- und hindernisberücksichtigenden MST (GHMST) • Initialisierung des genetischen Algorithmus: • Punkte des Grenz- und der Hindernisspolygonewerdenals Stationen hinzugefügt, dadurch Wegfindung garantiert
Verbesserungen • Seit Release 1.0 verbessert: • Kleinere Bugfixes • GUI stabiler • Pausenfunktion verbessert • Kommandozeilen-Schalter für automatische Stapelverarbeitung • Ausblick • Autotuning für Parameter des Genetischen Algorithmus‘ • Dynamische Parameter des Genetischen Algorithmus‘ • Ausbau der Parallelisierung • C-Extension mit OpenMP (echtes Multi-Threading) • OpenSource …
Backup Folien • Berechnung der Fitnessfunktion: (Details siehe Paper) • Komplexitätsklasse O(BS² + C² + BCS) • C = Cities (Anzahl Städte) • B = Borders (Anzahl Grenzpunkte) • S = Stations (Anzahl Zwischenstationen)
Backup Folien • Lookuptables:
Backup Folien • Analyse der GA-Parameter: