09.02.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!