20.03.2014 Aufrufe

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

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.

2.2 Informierte Suche, Heuristische Suche<br />

ergibt sich bei Plateaus, d.h. wenn mehrere Nachfolger <strong>die</strong> gleiche Bewertung haben, <strong>in</strong><br />

<strong>die</strong>sem Fall ist nicht e<strong>in</strong>deutig, welcher Weg gewählt werden soll.<br />

Durch <strong>die</strong> Speicherung <strong>der</strong> besuchten Knoten ist <strong>der</strong> Platzbedarf l<strong>in</strong>ear <strong>in</strong> <strong>der</strong> Anzahl<br />

<strong>der</strong> besuchten Knoten, also exponentiell <strong>in</strong> <strong>der</strong> Tiefe.<br />

In Haskell (unter Verwendung <strong>der</strong> Klassenfunktion <strong>der</strong> Typklasse HeuristicSearch)<br />

könnte man <strong>die</strong> Bergsteigerprozedur implementieren durch folgenden Code:<br />

hillclimb<strong>in</strong>g cmp heuristic goal successor start =<br />

let -- sortiere <strong>die</strong> Startknoten<br />

list = map (\k -> (k,[k])) (sortByHeuristic start)<br />

<strong>in</strong> go list []<br />

where<br />

go ((k,path):r) mem<br />

| goal k = Just (k,path) -- Zielknoten erreicht<br />

| otherwise =<br />

let -- Berechne <strong>die</strong> Nachfolger (nur neue Knoten)<br />

nf = (successor k) \\ mem<br />

-- Sortiere <strong>die</strong> Nachfolger entsprechend <strong>der</strong> Heuristik<br />

l’ = map (\k -> (k,k:path)) (sortByHeuristic nf)<br />

<strong>in</strong> go (l’ ++ r) (k:mem)<br />

sortByHeuristic = sortBy (\a b -> cmp (heuristic a) (heuristic b))<br />

Dabei ist das erste Argument cmp <strong>die</strong> Vergleichsfunktion (z.B. compare), <strong>die</strong> es daher<br />

flexibel ermöglich zu m<strong>in</strong>imieren o<strong>der</strong> zu maximieren. Das zweite Argument ist e<strong>in</strong>e<br />

Liste von Startzuständen. Die Element <strong>der</strong> Liste müssen dabei Instanzen <strong>der</strong> Typklasse<br />

HeuristicSearch se<strong>in</strong> (damit <strong>die</strong> Funktionen successor, goal und heuristic für <strong>die</strong>sen<br />

Typ def<strong>in</strong>iert s<strong>in</strong>d.<br />

2.2.2 Der Beste-zuerst (Best-first) Suche<br />

Wir betrachten als nächste <strong>die</strong> Best-first-Suche. Diese wählt immer als nächsten zu expan<strong>die</strong>renden<br />

Knoten, denjenigen Knoten aus, <strong>der</strong> den Besten Wert bzgl. <strong>der</strong> Heuristik hat.<br />

Der Algorithmus ist:<br />

M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13 37 Stand: 18. Oktober 2012

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!