74 lines
3.8 KiB
TeX
74 lines
3.8 KiB
TeX
\chapter{\acfp{CSP}}
|
|
\label{csp}
|
|
Bei \acp{CSP} handelt es sich um eine Teilmenge von Suchproblemen, bei denen \say{Zustände keine Black-Box und Pfade nicht relevant} sind.
|
|
Hierbei werden den Variablen $X_i$ Werte aus den Domänen $D_i$ zugewiesen.
|
|
Diese müssen eine Reihe von Randbedingungen $C_j$ erfüllen.
|
|
Für die Bestimmung der optimalen Lösung wird hierbei die Nutzenfunktion (\ref{nutzentheorie}) verwendet.
|
|
|
|
\section{Beispiele}
|
|
\label{csp: examples}
|
|
\subsection{Karteneinfärbung}
|
|
\label{csp: Karteneinfaerbung}
|
|
\includegraphics[width = \textwidth]{karteneinfärbung.png}
|
|
|
|
\subsection{N-Damen-Problem}
|
|
\label{csp: n-damen}
|
|
\includegraphics[width = \textwidth]{n-damen.png}
|
|
|
|
\subsection{Sudoku}
|
|
\label{csp: sudoku}
|
|
\includegraphics[width = \textwidth]{sudoku.png}
|
|
|
|
\section{Lösungswege}
|
|
\label{csp: solutions}
|
|
\subsection{\acp{CSP} als klassische Suchprobleme}
|
|
\label{csp: klassisches suchproblem}
|
|
Man kann ein \ac{CSP} in ein klassisches Suchproblem umwandeln:
|
|
\begin{itemize}
|
|
\item Startzustand: keine Zuweisungen der Variablen $X_i$
|
|
\item Nachfolgerfunktion: Einer unbelegten Variablen einen Wert zuweisen
|
|
\item Zieltest: Prüfen, ob eine Variablenzuweisung die Rahmenbedingungen erfüllt
|
|
\end{itemize}
|
|
Dies hat allerdings klare Probleme:
|
|
\begin{itemize}
|
|
\item Die Breitensuche muss bis zur tiefsten Ebene durchlaufen, um eine Lösung zu finden (Worst Case für Breitensuche).
|
|
\item Die Tiefensuche probiert ganzen Pfad durch, auch wenn schon früh eine der Randbedingungen $C_j$ verletzt wird.
|
|
\end{itemize}
|
|
|
|
\subsection{Backtracking}
|
|
\label{csp: backtracking}
|
|
Beim Backtracking wird folgende Kombination von Mechanismen benutzt:
|
|
$$\text{Backtracking} = \text{Tiefensuche}+\text{Variablensortierung}+\text{Konfliktvermeidung}$$
|
|
Für die Reihenfolge, in der die Variablen belegt werden gibt es mehrere Heuristiken
|
|
\begin{itemize}
|
|
\item \textbf{Minimum Remaining Value:}\\
|
|
Es wird immer die Variable gewählt, die am wenigsten Belegungsmöglichkeiten hat.
|
|
Dies hat das Ziel möglichst schnell auf Fehler zu stoßen.
|
|
\item \textbf{Least Constraint Value:}\\
|
|
Es wird immer die Variable gewählt, die die anderen Variablen am wenigsten Einschränkt.
|
|
Dies hat das Ziel möglichst flexibel zu bleiben.
|
|
\end{itemize}
|
|
|
|
\subsection{Forward Checking}
|
|
\label{forward checking}
|
|
\textbf{Prinzip:} Während der Suche unmögliche Werte in noch nicht zugewiesenen Variablen entfernen
|
|
|
|
\subsubsection{Beispiel}
|
|
\label{forward checking: example}
|
|
\includegraphics[width = .5\textwidth]{forward_checking1.png}
|
|
\includegraphics[width = .5\textwidth]{forward_checking2.png}
|
|
\includegraphics[width = .5\textwidth]{forward_checking3.png}
|
|
\includegraphics[width = .5\textwidth]{forward_checking4.png}
|
|
|
|
\subsection{Constraint Propagation}
|
|
\label{constraint propagation}
|
|
\includegraphics[width = \textwidth]{constraint propagation.png}
|
|
|
|
\subsection{Arc Consistency}
|
|
\label{arc consistency}
|
|
\includegraphics[width = \textwidth]{arc consistency.png}
|
|
|
|
\includegraphics[width = \textwidth]{arc_consistency2.png}
|
|
{\Large\color{red}Achtung!}\\
|
|
Das Arc Consistency Verfahren hat den Nachteil, dass nicht alle Konflikte sicher gefunden werden.
|
|
Daher gibt es das Verfahren der \say{k-Consistency}. Hierbei werden mehrere Knoten im Abhängigkeitsgraph geprüft. |