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.1 Algorithmische Suche<br />

Bemerkung 2.1.5. Beim dynamischen Programmieren ist <strong>in</strong> e<strong>in</strong>igen Fällen <strong>der</strong> Effekt gerade umgekehrt.<br />

Man spen<strong>die</strong>rt Platz für bereits berechnete Ergebnisse und hat dadurch e<strong>in</strong>e enorme Ersparnis<br />

beim Zeitbedarf.<br />

2.1.4.5 Iteratives Vertiefen (iterative deepen<strong>in</strong>g) mit Speicherung<br />

Die Idee hierbei ist, den freien Speicherplatz beim iterativen Vertiefen s<strong>in</strong>nvoll zu nutzen.<br />

Hierbei kann man zwei verschiedene Verfahren verwenden:<br />

1. Bei jedem Restart <strong>der</strong> Tiefensuche wird <strong>der</strong> zugehörige Speicher <strong>in</strong>itialisiert. Während<br />

<strong>der</strong> Tiefensuchphase speichert man Knoten, <strong>die</strong> bereits expan<strong>die</strong>rt waren und<br />

vermeidet damit <strong>die</strong> wie<strong>der</strong>holte Expansion. Hier kann man soviele Knoten speichern<br />

wie möglich. Man spart sich redundante Berechnungen, aber <strong>der</strong> Nachteil ist,<br />

dass bei je<strong>der</strong> Knotenexpansion nachgeschaut werden muss, ob <strong>die</strong> Knoten schon<br />

besucht wurden.<br />

2. Man kann Berechnungen, <strong>die</strong> <strong>in</strong> e<strong>in</strong>er Tiefensuchphase gemacht wurden, <strong>in</strong> <strong>die</strong><br />

nächste Iteration <strong>der</strong> Tiefensuche retten und somit redundante Berechnungen vermeiden.<br />

Wenn alle Knoten <strong>der</strong> letzten Berechnung gespeichert werden können,<br />

kann man von dort aus sofort weiter machen (d.h. man hat dann Breitensuche). Da<br />

man das i.a. nicht kann, ist folgendes s<strong>in</strong>nvoll:<br />

Man speichert den l<strong>in</strong>ken Teil des Suchraum, um den Anfang <strong>der</strong> nächsten Iteration<br />

schneller zu machen, und Knoten, <strong>die</strong> schon als Fehlschläge bekannt s<strong>in</strong>d, d.h.<br />

solche, <strong>die</strong> garantiert ke<strong>in</strong>en Zielknoten als Nachfolger haben.<br />

2.1.5 Rückwärtssuche<br />

Die Idee <strong>der</strong> Rückwärtssuche ist:<br />

man geht von e<strong>in</strong>em (bekannten) Zielknoten aus und versucht den Anfangsknoten<br />

zu erreichen.<br />

Voraussetzungen dafür s<strong>in</strong>d:<br />

• Man kann Zielknoten explizit angeben (nicht nur e<strong>in</strong>e Eigenschaft, <strong>die</strong> <strong>der</strong> Zielknoten<br />

erfüllen muss).<br />

• man kann von jedem Knoten <strong>die</strong> direkten Vorgänger berechnen.<br />

Rückwärtssuche ist besser als Vorwärtssuche, falls <strong>die</strong> Verzweigungsrate <strong>in</strong> Rückwärtsrichtung<br />

kle<strong>in</strong>er ist <strong>die</strong> Verzweigungsrate <strong>in</strong> Vorwärtsrichtung.<br />

Man kann normale Suche und Rückwärtssuche komb<strong>in</strong>ieren zur Bidirektionalen Suche,<br />

<strong>die</strong> von beiden Seiten sucht.<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!