3. Übung – Algorithmen II - Christian Schulz und Johannes Singler
3. Übung – Algorithmen II - Christian Schulz und Johannes Singler
3. Übung – Algorithmen II - Christian Schulz und Johannes Singler
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
<strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong><br />
Institut für Theoretische Informatik, Prof. Sanders<br />
1 KIT <strong>Christian</strong> <strong>–</strong> Universität des <strong>Schulz</strong> Landes Baden-Württemberg <strong>und</strong> <strong>Johannes</strong> <strong>und</strong><strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik<br />
nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Organisatorisches<br />
<strong>Übung</strong>sblätter<br />
Das zweite <strong>Übung</strong>sblatt steht seit Dienstag online.<br />
Die Musterlösung des zweiten <strong>Übung</strong>sblatts erscheint am 18.11.<br />
Umfrage zur <strong>Übung</strong><br />
Teilnahme weiter möglich<br />
https://ilias.rz.uni-karlsruhe.de/goto_rz-uka_svy_8337<strong>3.</strong>html<br />
34 Teilnehmer, könnten noch mehr werden<br />
2 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Inhalt heute<br />
1 Wiederholung A*-Suche / Landmark-Algorithmus<br />
Details<br />
grafische Veranschaulichung mit Maple <strong>und</strong> Applet<br />
2 Maximale Flüsse<br />
Applet zu Ford-Fulkerson<br />
Anwendung<br />
3 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
A*-Suche<br />
ganz allgemein<br />
informierter Such-Algorithmus für Kürzeste Wege in Graphen<br />
definierter Startknoten, definierte (potentiell mehrere) Zielknoten<br />
negative Kantengewichte okay (aber natürlich keine Zyklen)<br />
zielgerichtet durch heuristische Funktion h<br />
zur Schätzung der Distanz zum Zielknoten<br />
nicht verwechseln: in Vorlesung f := h<br />
Scanne Knoten mit kleinstem f (v) = g(v) + h(v),<br />
wobei g die (genau bekannte) Distanz vom Startknoten ist<br />
Knoten werden im Allgemeinen mehrfach gescannt.<br />
4 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
A*-Suche Material<br />
Anwendungen<br />
in der Künstlichen Intelligenz:<br />
finden von besten Lösungen für Puzzle, z. B. Rubiks-Cube<br />
implizite Graphen (erzeuge neue Knoten durch<br />
Kantentraversierung), extrem groß<br />
Applets<br />
http://www.stefan-baur.de/priv.studies.hauptseminar.html<br />
http://www.geosimulation.de/umsetzungen/2_0_2_Modelle/<br />
A-Star.html<br />
„Literatur“<br />
http://en.wikipedia.org/wiki/A*_search_algorithm<br />
deutscher Wikipedia-Artikel grenzwertig<br />
5 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Beschleunigung kürzester Wege<br />
mittels Potentialen<br />
Bedingungen an Potential h<br />
allgemeine A*-Suche sagt:<br />
Nie Kosten zum Ziel (d. h. hier Potential) überschätzen!<br />
„zulässige“ Heuristik im Sprachgebrauch von A*<br />
garantiert „Korrektheit“, kürzesten Pfad zu finden<br />
nie zu spät relaxieren<br />
Wir wollen Dijkstra verwenden ⇒ keine negativen Kantengewichte<br />
¯c(e) = c(e) + h(v) − h(u) ≥ 0<br />
„konsistente“ Heuristik im Sprachgebrauch von A*<br />
Algorithmus vereinfacht sich, jeder Knoten wird nur noch einmal besucht<br />
⇒ wird äquivalent zu Dijkstra auf ¯c.<br />
Wir könnten sonst immer noch Bellman-Ford verwenden,<br />
neue negative Zyklen entstehen nicht. Ist aber zu teuer.<br />
beide Eigenschaften erstmal unabhängig voneinander<br />
6 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
„konsistent“ ⇒ „zulässig“?<br />
Erstmal nicht. . .<br />
Potential kann man immer um eine Konstante verschieben,<br />
ohne dass sich an den neuen Kantengewichten etwas ändert.<br />
Man kann f (v) ≤ µ(v, t) immer brechen mit f (v) + C � µ(v, t)<br />
(Konstante C aufaddieren, die nur groß genug ist).<br />
¯c ändert sich nicht, <strong>und</strong> damit auch der Lauf des Algorithmus nicht.<br />
aber. . .<br />
7 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
c((u, v)) + f (v) − f (u) ≥ 0 ⇔<br />
c((u, v)) ≥ f (u) − f (v)<br />
µ(v, t) = c((v, v 1)) + ... + c((v k , t)) ≥ f (v) − f (v 1) + ... + f (v k ) − f (t) ⇔<br />
f (v) − f (t) ≤ µ(v, t) ⇔<br />
f (v) ≤ f (t) + µ(v, t) ⇔<br />
Σ<br />
⇒<br />
⇒ überschreitet µ(v, t) sowieso höchstens um konstantes f (t)<br />
Steigung darf nicht steiler sein als Kantengewicht.<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Korrektheit<br />
f (v) ≤ f (t) + µ(v, t) reicht aus für Korrektheit<br />
f (t) ≤ 0 ⇒ f (v) ≤ µ(v, t) trivialerweise<br />
f (t) ≥ 0 ⇒ d[t] ≤ d[t] + f (t) ≤ c(p) gilt immer noch (Folie 138)<br />
⇒ Algorithmus hört nicht zu früh auf.<br />
am einfachsten: Wähle f (t) = 0 (auch impliziert durch f : V → R + )<br />
Fazit: Konsistenz impliziert etwas, was der Zulässigkeit so nahe<br />
kommt, dass der Algorithmus immer noch funktioniert.<br />
8 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Landmark-Algorithmus<br />
erster Ansatz<br />
f (v) = µ(v, t) wäre das optimale Potential.<br />
Algorithmus läuft nur Knoten ab, die auf kürzesten Pfaden liegen.<br />
9 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Landmark-Algorithmus<br />
erster Ansatz<br />
f (v) = µ(v, t) wäre das optimale Potential.<br />
Algorithmus läuft nur Knoten ab, die auf kürzesten Pfaden liegen.<br />
Potentiale brauchen so viel Speicher wie wie alle kürzesten Wege<br />
⇒ Vorberechnung sinnlos<br />
Kompromiss<br />
Berechne Potential für einige t, genannt Landmarks.<br />
Bei konkreter Anfrage:<br />
Wähle Landmark hinter dem Ziel (heuristisch).<br />
Potential für Landmark ℓ: f (v) = µ(v, ℓ) − µ(t, ℓ)<br />
9 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Qualität der Landmarks<br />
Was passiert für schlechte Landmark vor/gegenüber dem Ziel?<br />
Korrektheit? Geschwindigkeit?<br />
10 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Qualität der Landmarks<br />
Was passiert für schlechte Landmark vor/gegenüber dem Ziel?<br />
Korrektheit? Geschwindigkeit?<br />
immer korrekt dank „Dreiecksungleichung“<br />
f (v) = µ(v, ℓ) − µ(t, ℓ) ≤ µ(v, t) ⇔ µ(v, ℓ) ≤ µ(v, t) + µ(t, ℓ)<br />
10 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
s v t<br />
Algorithmus sucht in falsche Richtung ⇒ langsamer<br />
ℓ<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Grafische Veranschaulichung<br />
von Potentialen<br />
Maple-Demo<br />
Pegel steigt an, genauer (nach Dijkstra):<br />
Bleibe auf Niveau, steige nur an, wenn es nicht anders geht,<br />
<strong>und</strong> höherer Knoten noch nicht besucht<br />
Problem bei Gefälle: Algorithmus „bleibt stecken“,<br />
da höhere Knoten schon besucht<br />
deswegen: keine negativen Kantengewichte<br />
11 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Maple-Demo<br />
Maple-Dokument:<br />
http://algo2.iti.kit.edu/documents/<strong>Algorithmen</strong><strong>II</strong>_WS10/AStarPotential.mw<br />
12 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Einordnung A*-Suche<br />
A*-Suche besser oder schlechter als andere <strong>Algorithmen</strong>?<br />
allgemein im schlimmsten Fall exponentielle Laufzeit<br />
schlechter als Dijkstra<br />
schlechter als Bellman-Ford<br />
katastrophal<br />
Unter „Konsistenzbedingungen“ wie Dijkstra, sehr gut<br />
zielgerichtet<br />
in der Praxis mit gutem Potential (z. B. durch gute Landmark)<br />
viel besser als Dijkstra<br />
13 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Demo Ford-Fulkerson-Algorithmus<br />
Applets<br />
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/<br />
MaxflowApp.shtml?demo4 (Demo 1)<br />
http://links.math.rpi.edu/applets/appindex/graphtheory.html<br />
14 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Graphpartitionierung<br />
Was ist Graphpartitionierung?<br />
Geben G <strong>und</strong> k > 1, teile V in k Blöcke V 1, V 2, ...V k so dass:<br />
1 alle Mengen disjunkt, <strong>und</strong> die Vereinigung gerade V ist<br />
2 alle Mengen ungefähr gleich groß<br />
3 Anzahl der Kanten wird minimiert<br />
15 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Notation<br />
ungerichteter Graph G = (V , E, c, ω), n = |V |, m = |E|<br />
Knotengewichte c : V → R>0<br />
Kantengewichte ω : E → R≥0<br />
Erweiterung auf Mengen<br />
1 c(V ′ ) := ∑v∈V ′ c(v)<br />
2 ω(V ′ ) := ∑v∈V ′ ω(v)<br />
Schnittkanten Eij := {{u, v} ∈ E : u ∈ Vi, v ∈ Vj} Nachbarschaft eines Knotens Γ(v) := {u : {u, v} ∈ E}<br />
16 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Graphpartitionierung<br />
Formal<br />
Geg.: Graph G = (V , E, c, ω)<br />
Knotengewichtsfunktion c : V → R>0<br />
Kantengewichtsfunktion ω : E → R≥0<br />
k ∈ N, ɛ ∈ R>0.<br />
Ges.: Blöcke V 1, ..., V k von V<br />
17 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
mit V = �<br />
i V i <strong>und</strong> V i ∩ V j = ∅ (i �= j)<br />
mit c(V i) ≤ (1 + ɛ)c(V )/k ∀i (Balancebedingung)<br />
<strong>und</strong> Kantenschnitt = ∑i
Beispiel zur Klärung der Begriffe<br />
Partitionierung<br />
18 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
unungerichteterraph<br />
G = (V , E), n = |V |, m = |E|<br />
c ≡ 1, ω ≡ 1<br />
Kantenschnitt = 17<br />
Balancebedingung?<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Beispiel zur Klärung der Begriffe<br />
Partitionierung<br />
19 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
ungerichteter Graph<br />
G = (V , E), n = |V |, m = |E|<br />
c ≡ 1, ω ≡ 1<br />
Kantenschnitt = 17<br />
Balancebedingung?<br />
ɛ = 0.25<br />
7, 8, 10, 8 ≤ (1+ɛ)<br />
k c(V ) = 10.31<br />
Optimal?<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Motivation<br />
Anwendung sind überall:<br />
Social Networks<br />
Parallel Computing (Finite Element Methode, LGS)<br />
Chipdesign<br />
Airline Crew Scheduling<br />
20 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Beispiel<br />
Finite Element Methode<br />
21 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Standard für Graphpartitionierung<br />
Multilevelframework<br />
match<br />
contract<br />
input<br />
graph<br />
22 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
... ...<br />
local improvement<br />
initial<br />
part.<br />
uncontract<br />
output<br />
partition<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Standard für Graphpartitionierung<br />
match<br />
input<br />
graph<br />
...<br />
contract uncontract<br />
initial<br />
partitioning<br />
23 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
local improvement<br />
...<br />
output<br />
partition<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Standard für Graphpartitionierung<br />
24 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
local improvement<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Flows<br />
Gegeben initiale Partition<br />
Wie kann man Flows als lokalen Verbesserungsschritt verwenden?<br />
Probleme?<br />
G<br />
b1<br />
25 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
b2<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Flows als Verfeinerungsschritt<br />
Konstruktion<br />
G<br />
s<br />
b1<br />
26 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
B<br />
t<br />
b2<br />
B, so dass jeder MinCut in B einen ɛ-balanced cut in G induciert<br />
z.B. 2 mal Breitensuche (Links, Rechts)<br />
stoppen der BFS, wenn Größe (1 + ɛ) n 2 − ω(b2) überschritten<br />
⇒ ω(b2new) ≤ ω(b2) + (1 + ɛ) n 2 − ω(b2)<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Flows<br />
Flussberechnung in diesem Bereich liefert für diesen optimale Cuts<br />
ɛ-balanced Partitioning allerdings NP-hart<br />
s<br />
27 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
t<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Flows - Verbesserungen<br />
in größeren Bereichen nach zulässigen Cuts suchen?<br />
Stichwort: Most Balanced Minimum Cuts (NP-hart)<br />
Zutaten: Starke Zsh. Komp. (DFS!), DAGs, Topologisches<br />
Sortieren, Adaptive Suchstrategie<br />
s<br />
28 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
t<br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik
Graphpartitionierung<br />
Spielwiese der Basic Toolbox:<br />
Matchings, Clusterings?, Sortieren, Addressierbare PQs,<br />
Dynamisches Programmieren, BFS, DFS, MaxFlows, Topologisches<br />
Sortieren, Edge Colorings, Tabu-Suchen, Meta-Heuristiken, Parallel,<br />
Extern ...<br />
Bei Interesse ⇒ vorbeikommen!<br />
29 <strong>Christian</strong> <strong>Schulz</strong> <strong>und</strong> <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>3.</strong> <strong>Übung</strong> <strong>–</strong> <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät für Informatik<br />
Institut für Theoretische Informatik