ki-Übung teil 5: kollisionsvermeidung & wegplanung

20
KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

Upload: jutta-gengler

Post on 05-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung

Teil 5: Kollisionsvermeidung

& Wegplanung

Page 2: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Wegplanung

Minkowski Summe- A ◦ B = { a + b | a elem A,b elem B}- Negation : –A = { -a | a elem A }

Page 3: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Behandlung der Rotation

-Diskretisierung der Rotation In jedem Winkelbereich ergibt sich eine Konfigurationsebene

Page 4: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Der Gelenkraum

Beispiel: Gelenkmechanismus mit 2 Drehgelenken

Page 5: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Wegsuche im Gelenkraum

- Wegsuche ist Suche nach einer Bewegung für Punkte zwischen Gelenkraumhindernissen

Page 6: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Zerlegung des Konfigurationsraums

Quadtree, Octrees:

Page 7: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Die Via Punkt Strategie

Seien Gelenkraumhindernisse initial unbekannt Stelle rekursiv Anfragen für Strecken im Gelenkraum:

Nachteil: Keine Lösung innerhalb isolierter Zusammenhangskomponenten des Glenkraums

Page 8: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Die Potientialfeldmethode

Hindernissen werden abstossende Potientiale und dem Zielpunkt ein anziehendes Potential zugeordnet Punkt wird durch Hindernissraum bis zum Ziel bewegt

Nachteil 1: Endlosschleifen in lokalen Minima Kombination mit einer zufälligen Suche

Nachteil 2: Exponentielles Wachstum der Anzahl der Nachbarn Reduktion des Aufwandes durch zufällige Auswahl einer Teilmenge der Nachbarn von

Page 9: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Die Potientialfeldmethode

Page 10: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Angepasster A* Algorithmus

Kombination des A* Verfahrens in Kombination mit einer zufälligen Suche

Page 11: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Aspiration Windows

Page 12: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Principal Variation (NegaScout) Suche

Marsland, Campbell 1982, Verbesserung führt zu NegaScout-Algorithmus (Reinefeld 1983)

Die Principal-Variation-Suche nimmt an, dass ein Folgezug der zwischen Alpha und Beta liegt, sich als bester möglicher Zug herausstellen wird.

Deshalb wird Alpha-Beta-Fenster minimal verkleinert, um maximale Anzahl an Cutoffs zu erreichen, aber dennoch die verbleibenden Züge als schlechter zu beweisen.

Page 13: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Principal Variation Searchint NegaScout ( position p; int alpha, beta ); { /* compute minimax value of position p */

int a, b, t, i; determine successors p_1,...,p_w of p; if ( w == 0 )

return ( Evaluate(p) ); /* leaf node */ a = alpha; b = beta; for ( i = 1; i <= w; i++ ) {

t = -NegaScout ( p_i, -b, -a ); if (t > a) && (t < beta) && (i > 1) && (d < maxdepth-1)

a = -NegaScout ( p_i, -beta, -t ); /* re-search */ a = max( a, t ); if ( a >= beta )

return ( a ); /* cut-off */ b = a + 1; /* set new null window */

} return ( a );

}

Page 14: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Principal Variation Suche

Page 15: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Principal Variation Search

Knoten gehört einer der drei Kategorien an:

Alpha-Knoten: Jeder Folgezug liefert Wert kleiner oder gleich Alpha

kein guter Zug möglich

Beta-Knoten: Mindestens ein Folgezug liefert Wert größer oder gleich Beta

Cutoff

Principal Variation-Knoten: Mindestens ein Folgezug liefert Wert größer als Alpha, aber alle liefern einen Wert kleiner oder gleich Beta.

Page 16: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Principal Variation Search

Manchmal frühzeitig erkennbar welche Art von Knoten vorliegt:

Erste getestete Folgezug Wert größer gleich Beta Beta-Knoten.

Wert kleiner gleich Alpha möglicherweise Alpha-Knoten (vorausgesetzt, die Züge sind gut vorsortiert)

Wert zwischen Alpha und Beta möglicherweise Principal Variation-Knoten.

Page 17: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Killer Heuristik

Die Killer-Heuristik ist eine spezielle Art der Zugvorsortierung.

Man nimmt an, dass Züge, die Cutoffs verursacht haben, auch in anderen Teilen des Suchbaumes (bei gleicher Tiefe) einen Cutoff verursachen werden. Deshalb künftig immer zuerst betrachten, sofern gültiger Zug

Vorsicht: Heuristik kann nicht bei allen Spielen sinnvoll angewendet werden, da Aussicht, dass Killerzüge auch in anderen Teilen des Suchbaumes noch gültige Züge sind, gering ist.

Page 18: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

Alpha Beta Suche

Page 19: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

NegaMax Algorithmus Variante des Alpha-Beta Algorithmus

Während die Standard-Implementierung für einen Spieler maximiert und für den anderen Spieler minimiert, maximiert die Negamax-Variante für beide Spieler und vertauscht und negiert Alpha und Beta bei der Rekursion. Bewertungsfunktion muss sich unterschiedlich verhalten

Standard-Implementierung: Je besser die Brettstellung für maximierenden Spieler desto größer Rückgabewert der Bewertungsfunktion. Je besser für minimierenden Spieler desto kleiner ist der Rückgabewert.

Negamax-Implementierung: Da beide Spieler maximieren, muss die Bewertungsfunktion desto größere Werte liefern, je besser die Brettposition des gerade Ziehenden ist.

Page 20: KI-Übung Teil 5: Kollisionsvermeidung & Wegplanung

KI-Übung SoSe 2006

NegaMax Algorithmus

int AlphaBeta(int tiefe, int alpha, int beta) {

if (tiefe == 0) return Bewerten(); GeneriereMoeglicheZuege(); while (ZuegeUebrig()) {

FuehreNaechstenZugAus(); wert = -AlphaBeta(tiefe-1, -beta, -alpha);

MacheZugRueckgaengig();

if (wert >= beta) return beta; if (wert > alpha) alpha = wert;

} return alpha;

}