diff --git a/chapters/Problemlösen durch Suchen/Suchverfahren.tex b/chapters/Problemlösen durch Suchen/Suchverfahren.tex index 9a6fb40..7ec7af8 100644 --- a/chapters/Problemlösen durch Suchen/Suchverfahren.tex +++ b/chapters/Problemlösen durch Suchen/Suchverfahren.tex @@ -1,2 +1,53 @@ \chapter{Suchverfahren} -\label{suchverfahren} \ No newline at end of file +\label{suchverfahren} + Bei der Modellerstellung (\ref{suchprobleme: umgebungsmodelle}) für Suchprobleme (\ref{suchprobleme}) entstehen zumeist Zustandsgraphen. + Beim Durchlaufen des Graphen entsteht dann durch das Expandieren einzelner Knoten mithilfe der Nachfolgerfunktion (\ref{suchprobleme}) entsteht ein Suchbaum:\\ + \includegraphics[width = \textwidth]{graph zu suchbaum.png} + + \section{Breitensuche} + \label{breadth-first search} + Bei der Breitensuche wird der Graph Schicht für Schicht durchlaufen.\\ + \includegraphics[width = \textwidth]{breitensuche.png} + Die Breitensuche hat dabei den Vorteil, dass sie \textbf{vollständig} (alle Knoten werden erreicht) und \textbf{optimal} (Lösung mit geringster Tiefe wird gefunden) ist. + Allerdins nimmt der Speicherbedarf der Breitensuche exponentiell mit der Anzahl der Knoten zu:\\ + \includegraphics[width = .8\textwidth]{breitensuche_speicherbedarf.png} + + \section{Tiefensuche} + \label{depth-first search} + Bei der Tiefensuche werden immer die tiefsten Knoten zuerst expandiert.\\ + \includegraphics[width = \textwidth]{tiefensuche.png} + Dies hat den Nachteil, dass die Tiefensuche \textbf{nicht vollständig} (unendlich tiefer Pfad möglich) und \textbf{nicht optimal} (findet bestenfalls die linkeste Lösung). + Allerdings brauch keine Information über beendete Pfade gespeichert werden. + Daher ist der Speicherbedarf der Tiefensuche nur linear von der Anzahl der Knoten abhängig. + + \section{Informierte Suche} + \label{informed search} + Falls bestimmte Informationen über den Graphen bekannt sind kann eine Heuristik erstellt werden. + Die Heuristik $h(n)$ ist hierbei eine Funktion, welche die Kosten für das erreichen des Ziels über einen Knoten $n$ abschätzt. + Dies kann dazu benutzt werden effizienter durch den Graph zu laufen. + Hierbei ist allerdings zu beachten, dass eine Heuristik nicht perfekt ist (mehr Informationen zu der Bewertung von Heuristiken siehe Zusammenfassung KB). + Eine informierte Suche ist folglich \textbf{nicht optimal}. + Sie kann aber ({\color{red}falls Endlospfade vermieden werden}) \textbf{vollständig} sein. + + \section{A*-Suche} + \label{a-star search} + Die A*-Suche nutzt die Summe der Heuristik $h(n)$ und der Länge des bisherigen Weges $g(n)$ um einen Pfad zu wählen. + $$f(n)=h(n)+g(n)$$ + Die A*-Suche ist \textbf{optimal} für eine Baumsuche, falls $h(s)$ zulässig ist ($h(s)$ überschätzt nicht). + Zudem ist die A*-Suche \textbf{optimal} für eine Graphsuche, falls $h(s)$ konsistent ist. + $h(s)$ ist konsistent, wenn $h(s) \le c(s,a,s') + h(s')$ ($a$: Aktion, die Nachfolger $s'$ generiert) gilt. + Falls eine Lösung existiert ist die A*-Suche \textbf{vollständig}. + Außerdem ist die A*-Suche \textbf{optimal effizient} (kein Suchalgorithmus muss weniger knoten expandieren). + Allerdings ist auch bei der A*-Suche die Anzahl der im Speicher zu haltenden Knoten exponentiell. + + \subsection{Beispiel} + \label{example: a-star} + \includegraphics[width = \textwidth]{beispiel A*.png} + + \section{Hinweise zur Implementierung} + \label{Hinweise zur Implementierung} + \includegraphics[width = \textwidth]{hinweise_zur_implementierung.png} + + \includegraphics[width = \textwidth]{hinweise_zur_implementierung2.png} + + \includegraphics[width = \textwidth]{hinweise_zur_implementierung3.png} \ No newline at end of file diff --git a/images/beispiel A*.png b/images/beispiel A*.png new file mode 100644 index 0000000..f7cfdb4 Binary files /dev/null and b/images/beispiel A*.png differ diff --git a/images/breitensuche.png b/images/breitensuche.png new file mode 100644 index 0000000..3e0deb3 Binary files /dev/null and b/images/breitensuche.png differ diff --git a/images/breitensuche_speicherbedarf.png b/images/breitensuche_speicherbedarf.png new file mode 100644 index 0000000..4744121 Binary files /dev/null and b/images/breitensuche_speicherbedarf.png differ diff --git a/images/graph zu suchbaum.png b/images/graph zu suchbaum.png new file mode 100644 index 0000000..4834288 Binary files /dev/null and b/images/graph zu suchbaum.png differ diff --git a/images/hinweise_zur_implementierung.png b/images/hinweise_zur_implementierung.png new file mode 100644 index 0000000..1ef5d99 Binary files /dev/null and b/images/hinweise_zur_implementierung.png differ diff --git a/images/hinweise_zur_implementierung2.png b/images/hinweise_zur_implementierung2.png new file mode 100644 index 0000000..63ef6f7 Binary files /dev/null and b/images/hinweise_zur_implementierung2.png differ diff --git a/images/hinweise_zur_implementierung3.png b/images/hinweise_zur_implementierung3.png new file mode 100644 index 0000000..922a840 Binary files /dev/null and b/images/hinweise_zur_implementierung3.png differ diff --git a/images/tiefensuche.png b/images/tiefensuche.png new file mode 100644 index 0000000..460f550 Binary files /dev/null and b/images/tiefensuche.png differ