7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden"....

12

Click here to load reader

Transcript of 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden"....

Page 1: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

1

hs / fub – alp3-26-Graph-2 1

7.3.3 Kürzeste Wege (7.3.3 Kürzeste Wege (Shortest pathShortest path))

�Aufgabe Finde in gerichtetem, kantengewichtetem GraphenG=(V,E) , w: E -> Real, einen Weg s = x0,x2,...,xn=y von s nach y mit minimaler Summe der Kantenkosten*: d(s,y) := Σ w((xi,xi+1)) minimal unter allen Wegen p von s nach y

i=0..n-1Algorithmus auch für gerichtete und ungerichtete Graphen

geeignet.

�Viele Anwendungen:� Routenplaner�Verdrahtung von Platinen�Optimale Weg aus Labyrinth�Spiele....

* Kosten = Gewicht f

S

b

c

d

e

10

9

15

10

2

3

4

3

hs / fub – alp3-26-Graph-2 2

Kürzeste Wege: KlassifikationKürzeste Wege: Klassifikation

�Kürzester Weg s-> y (Single pair shortest path)

�Alle kürzesten Wege von s zu beliebigem Knoten x(single source shortest path)

�Alle kürzesten Wege von beliebigem Startknoten zu einem Zielknoten y (single destination shortest path)-> auf zweites Problem zurückführen: alle Richtungen umkehren!

�Alle Paare von kürzesten Wegen (all pairs shortest path)

"Kürzeste Wege" und "Alle kürzesten Wege"sind gleich aufwendig!

Page 2: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

2

hs / fub – alp3-26-Graph-2 3

Kürzeste WegeKürzeste Wege

�Kantengewichtung ...

1.0

2.0

1.0

-4.0

s

�... sollte nicht negativ sein?!�Kürzeste-Wege-Problem nicht wohldefiniert, wenn es

einen Zyklus mit negativer Kantensumme gibt, der von s erreichbar ist�Annahme hier: positive Kantengewichte

hs / fub – alp3-26-Graph-2 4

Kürzeste PfadeKürzeste Pfade

�Eigenschaften von Wegen�Wenn kürzester Weg p zu einem Knoten

gefunden, dann auch kürzeste Wege zu allen Knoten auf p.Im Beispiel: mit (S->f) auch kürzesten Weg S -> e)

f

S

b

c

d

e

10

9

15

10

2

3

4

3

xy

zy'

�Allgemein:x-> y-> z kürzester Pfad, dann x -> y kürzester Pfadklar, sonst : wenn x->y' kürzer als x->y dann x->y'->y->z kürzer als x->y->z

Page 3: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

3

hs / fub – alp3-26-Graph-2 5

Kürzeste Wege: EigenschaftenKürzeste Wege: Eigenschaften

y'

z

� Allgemein:d(x,y') > d(x,y ) +w((y ,y'))dann ist x -> y' kein Teilpfaddes kürzesten Weges von xnach z

x

y

f

s

b

c

d

e

10

9

15

10

2

3

4

3

Teilpfade (s , d , e) von snach f mit Kosten d(s,e) = 19und (s, b, c) , Kosten d(s,c) = 13und w((c,e) + d(s,c) < d(se)⇒(s,d,e) sicher nicht Teil eines möglicherweise kürzesten Weges (s -,e, f)

� Idee für Algorithmus:Anfangsstücke p= (s,..., y') für Weg nach s finden. Stößt man auf kürzerem Weg p' auf den

gleichen Knoten y' dann ist p obsolet.

hs / fub – alp3-26-Graph-2 6

Kürzeste Wege: Kürzeste Wege: RelaxationRelaxation

� Idee für Algorithmus:Anfangsstücke wk=( x,..., k) für Weg zum Ziel finden.

Stößt man auf kürzerem Weg w = (x -> y) ->y' auf den gleichen Knoten y' zu dem Pfad w'= x -> y' bekannt ist, dann ist w' obsolet.

xyd = 7

y'd= 10

y''d=12 y'''

d=10

w'

w''w'''

w

w(y,y')=2

xy

y' y'' y'''

w'

w''w'''

w

y'd= 9

d = 7

Wird meist Relaxation ("Abschwächung") genannt

Page 4: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

4

hs / fub – alp3-26-Graph-2 7

Kürzeste PfadeKürzeste Pfade

� Auswahl des zu verfolgenden Anfangsstücks

xy

zy' y'' y'''

w'

w''w'''

w Weg mit d(x,y'')+d(y'',y) < d(x,y) existiert nicht

f

s

b

c

d

e

10

9

15

10

2

3

4

3

Bei d oder b fortsetzen?

Bisher kürzester Weg nach d: 9d((s,b,d) = d((s,b)) + w(b,d) > 9

=> bisher gefundener kürzester Weg von s nach d ist der Kürzeste !

Allgemein: Immer den bisher kürzesten fortsetzen!

hs / fub – alp3-26-Graph-2 8

Kürzeste PfadeKürzeste Pfade

s = x->y minimal unter allen bisherigen Wegen s', s'',...., dann ist s Weg minimaler Länge von x nach y.

Also: wenn man unter den bisherigen Wegen denminimalen x->y fortsetzt (nach z), hat man den minimalen Weg s->y gefunden.

Achtung: gilt nicht, wenn negative Kantengewichte zugelassen.

Idee: kostengesteuerte Breitensuche- Menge P aller kürzesten Wege x -> y und deren Kosten

schrittweise aufbauen, jeweils kürzesten expandieren ("verlängern")

- bereits ermittelte kürzeste Pfadein Menge SP merken

Page 5: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

5

Algorithmus von Algorithmus von DijkstraDijkstra**

Idee: Kostengesteuerte BreitensucheSP={}; P = {(a->a; 0) } // StartknotenSolange q nicht P nicht leer:

expandiere q = (x->y) mit minimale Gesamtkosten aller q' aus P hat

q = (x-> y) expandieren:für alle Nachfolger z von y {

Fall1: (x->z) nicht in P: P = P ∪ (x-> z) // Pfad nach z gefundenFall2: (x->z) in SP: weiter mit nächstem Nachbarn // kürzester

// Weg nach z schon bekannt.Fall3: p = (x -> z) in P und d(p) > d(q') + w(e,z)

P = P \ {p} ∪ {(x -> y->z) // kürzeren Pfad nach z wählen }SP= SP ∪ {(x->e, d(x,e)) // kürzesten Pfad nach x gefunden

*Edgar W. Dijkstra, berühmter holländischer Informatiker, *1930, 2002 +

a

b

c

d

e

f

10

9

15

10

2

3

4

3

Gieriger (greedy)Algorithmus

hs / fub – alp3-26-Graph-2 10

KnotenzuständeKnotenzustände

a

cd

e

f

9

15

10

2

3

4

3

10Drei Zustände derKnoten:

- bisher nicht besucht- besucht, nicht expandiert- kürzester Weg zu diesem

Knoten gefunden.

b

Page 6: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

6

hs / fub – alp3-26-Graph-2 11

DijkstraDijkstra--Algorithmus: BeispielAlgorithmus: Beispiel

SP: hier Menge der von a ausgehendenminimalen Wege ,andere Weg in P

1. P = {(ab;10), (ad;9)} SP = {(ad;9)}

2. P = {(ab;10), (ad,e;19), (adf, 24)} SP = {(ad;9), (ab;10)}

3. P = {(abd;12),(abc;13), (ade;19), (adf; 24)}SP = {(ad;9), (ab;10) (abc;13)}

4. P = {(abce;17), (ade;19), (adf; 24)}SP = {(ad;9), (ab;10), (abc;13), (abce;17)}

5. P = {(abcef;20), (adf; 24)}SP = {(ad;9), (ab;10), (abc;13), (abce;17)}

6. P = {}SP = {(ad;9), (ab;10), (abc;13), (abce;17), (abcef;20)}

a

b

cd

e

10

9

15

10

2

3

4

3

hs / fub – alp3-26-Graph-2 12

DijkstraDijkstra--Algorithmus: BeispielAlgorithmus: Beispiel

� Pfade repräsentieren?Ausreichend, den Endknoten des bisher ermittelten Pfades p und die Kosten d(p) zu speichern.

� Im Beispiel: Po = {(a,0)}SP0 = { } P1 = {(d,9), (b,10)}SP1 = {(a,0)}P2 = { (b,10), (e,19), (f,24) }SP2 = {(a,0), (d,9)}P3 = {(c,13),(e,19), (f,24) , }SP3 = {(a,0), (d,9), (b,10)}P4 = {(e,17), (f,24) , }SP4 = {(a,0), (d,9), (b,10), (c,13)}P5 = { (f,20) }SP5 = {(a,0), (d,9), (b,10), (c,13)(e,17)}P6 = {}

SP6 = {(a,0), (d,9), (b,10), (c,13)(e,17) ,(f,20) }

a

b

cd

e

10

9

15

10

2

3

4

3

Page 7: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

7

DijkstraDijkstra--AlgorithmusAlgorithmusBestimmung der gewichteten Weglänge x -> y für alle Knoten y

SP'={ (y, d, minimal)| y Knoten von G(V,E), y.d = ∞, minimal = false};x.d : Gewicht des bisher gewichtsminimalen Weges x -> y, boolean minimal: true wenn kürzester Weg x->y gefunden

void shortestPath(node s) {heap h = new...; // z.B.Min-heapfor all node y {h.enqueue(y);y.d = INFINITE} //s.d=0;

while (!h.empty) {y = h.dequeueMin; //node with minimal path up to nowy.minimal = true; // colour = green; min cost

// d(s,y)found

for each z = y.successor //relax

if(y.d + w((y,z)) < z.d) z.d=y.d + w((y,z));// shorter path found

} // Min cost d(s,e) for all nodes e

hs / fub – alp3-26-Graph-2 14

Kürzeste Wege (Kürzeste Wege (DijkstraDijkstra))

�Baumdarstellung

Wenn x bei Expansion gefunden wird (Blaufärbung):Vorgänger y von x merken; y durch y' ersetzen, wenn durch Relaxation kürzerer Weg über y' gefunden.

b

cd

e

10

d 9

a

b 10

f 24e 19 c 13

e 17

f 20

1 2

3 4 5

6

7

a

9

15

10

2

3

4

3

Page 8: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

8

hs / fub – alp3-26-Graph-2 15

Kürzeste Wege (Kürzeste Wege (DijkstraDijkstra): Laufzeit): Laufzeit

�Jeder Knoten genau einmal in Prioritätsschlange: O(V*log V)�Je einmal pro Knoten Nachfolger bestimmen: O(E) für Adjazenzliste

=> O(E) + O(V*log V) + O("Verwaltung des heap bei Expansion") Schlechtester Fall: jede Verlängerung

eines Weges um Kante (x,z) liefert neue Weglänge s->z: O(E) Veränderungen

mit Aufwand O(log V) obere Schranke im schlechtesten FallO(E)+ O(V * log V)) + O(E*(log V)) = O((V+E ) * log V)

Abhängig von Implementierung der Verwaltungsdatenstrukturen!... und Graph-Implementierung.

hs / fub – alp3-26-Graph-2 16

Kürzeste Wege (Kürzeste Wege (DijkstraDijkstra): Laufzeit): Laufzeit

Abhängigkeit von Datenstrukturen� Prioritätsschlange als Feld (ungeordnet):

O(V) + V*O(V) + O(E) * O(1)

Knoten in Prio-Schlange V* Suchen des Minimumzur Expansion

Verändern derbisherigen Kosten, direkter Feldzugriff

Gesamtlaufzeit O(V2)

Beachte: Anzahl Kanten E <= V2 , also Algorithmus linear in der Anzahl Kanten.

Page 9: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

9

hs / fub – alp3-26-Graph-2 17

Kürzeste Wege in GraphenKürzeste Wege in Graphen

� "Single source shortest path" mit Dijkstra –Alg. gelöst für positive Kantenkosten, damit auch "single pair shortest path".

�Algorithmus bekannt für beliebige Kantenkosten,Graph ohne negativen Zyklen: O(E*V).

� "All pairs" – Problem: O(V3) – Algorithmus bekannt.

Annahme bisher: - keine Zusatzinformation verfügbar- Graph liegt in expliziter Form vor

hs / fub – alp3-26-Graph-2 18

Routenplaner Graph

21

3 4

5

1 2

43

5

Page 10: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

10

hs / fub – alp3-26-Graph-2 19

BreadthBreadth--first Search (cont’d)first Search (cont’d)(Branching Factor = 3)(Branching Factor = 3)

1020 TB1013 102450

10 MB100 sec10510

1 MB10 sec1048

100 kB1 sec1036

12 kB.1 sec1214

1 kB13 ms132

100 B1 ms10

MemoryTimeNodesDepth

Platzbedarf kritischer als Laufzeit! US-Straßenkarte: Tiefe ungefähr 3000)

Aus Artificial Intelligence: A Modern Approach, Stuart Russell and Peter Norvig,

Upper Saddle River, NJ: Prentice Hall, c. 1995

hs / fub – alp3-26-Graph-2 20

Analoges Problem: Graphrepräsentation von SpielenAnaloges Problem: Graphrepräsentation von Spielen

� n x n Puzzle

87

654

321

84

675

213

....

845

67

213

84

675

213

Viele implizite Knoten: das sind alle erlaubten Zustände.

Nachfolger: erlaubte Züge.Hier: Stein schieben

Page 11: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

11

hs / fub – alp3-26-Graph-2 21

Kürzeste Wege: HeuristikenKürzeste Wege: Heuristiken

�Sehr große Knotenzahlen, evtl. implizit�Dijkstra – Algorithmus nicht anwendbar�Einschränkung auf "single pair shortest path"�Bringt das was?? Gleiche asymptotische Laufzeit !?�Ja: heuristische Schätzung der Entfernung vom

Zielknoten einführen

Heuristik: "Kunst zu finden".

Ziel z

Bisheriger WegLänge w(xi) mit Kosten d(s,xi)

Geschätzte Entfernung vom Ziel: h(xi,z)

x1

x2 xi xn

h(x1) h(xn)

s

hs / fub – alp3-26-Graph-2 22

Heuristische Wegsuche Heuristische Wegsuche

�A*-Algorithmus�Ziel: finde gewichts-(kosten-)minimalen Weg von Startknoten szum Zielknoten z.�Voraussetzung: für jeden Knoten x ist eine optimistische Schätzfunktion h(x,z) für den Weg x -> z gegeben.Seien d(x,t) die (unbekannten) tatsächlichen Kosten,h heißt optimistisch, wenn h(x,t) <= d(x,t) "Optimistisch: Kosten werden unterschätzt"

�Es existiert immer eine optimistische Schätzfunktion: Für alle x: h(x,t) = 0

�Ist x ein Knoten, zu dem ein Weg s -> x gefunden wurde, dann seien die (nicht notwendig minimalen) Kosten d(s,x)

Page 12: 7.3.3 Kürzeste Wege (Shortest path) - inf.fu- · PDF fileHeuristik: "Kunst zu finden". Ziel z Bisheriger Weg Länge w(xi) mit Kosten d(s,xi) Geschätzte Entfernung vom Ziel: h(xi,z)

12

hs / fub – alp3-26-Graph-2 23

Heuristische SucheHeuristische Suche

�A*-Algorithmus: analog Dijkstra mit Kostenfunktion

f(s,t) = d(s,x) + h(x,t) Kosten = tatsächliche des zurückgelegten Weges

plus Schätzung für den Restweg.

�Änderung Dijkstra-Algorithmus: wenn f(s,t) = d(s,x) + h(x,t) minimal, muss d(s,x)

NICHT minimal sein. Folge: auch zu Knoten, die schon expandiert wurden, kann evtl. günstigerer Weg gefunden werden. Technisch: kein Knoten darf von queue entfernt werden.

� Gefundener Weg minimal, wenn h optimistisch

hs / fub – alp3-26-Graph-2 24

Heuristische SucheHeuristische Suche

�Routenplaner�Heuristische Schätzfunktion:

Euklidische Distanz h (x,z) zum Ziel. �h ist monoton: h(x,z) <= d(x,x') + h(x',z) �monotone Schätzfunktionen

sind optimistisch.

�Weitere wichtige Heuristik:- Wegepräferenz:

"Autobahn > Landstraße"- Zeit- / Weglängenoptimierung

xx'

z

h(x,z)