X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diplomarbeit.tex;h=e17b6a469bed3a81c8d170f4780c5f8757419a37;hb=7e92c8e96f4292dc5e930b52a4460e4a5c55724d;hp=a861992d1334c2e237723e30188a7815bd3c75b7;hpb=6b2c14e2dbbb4a2ca86032cdc228d4fc96ce6543;p=diplomarbeit.git diff --git a/diplomarbeit.tex b/diplomarbeit.tex index a861992..e17b6a4 100644 --- a/diplomarbeit.tex +++ b/diplomarbeit.tex @@ -472,10 +472,49 @@ Abbildung~\ref{fig:odd_even_mergesort_08} zeigt das Netzwerk für $8$~Eingänge. \section{Transformation von Sortiernetzwerken} -\begin{itemize} -\item Komprimieren (Alle Komparatoren so früh wie möglich anwenden). -\item Normalisieren (Transformation zu Standard-Sortiernetzwerken). -\end{itemize} +\subsection{Komprimieren} + +\todo{Aus theoretischer Sicht eigentlich eine Trivialität. Rausschmeißen?} + +Komparatoren, die unterschiedliche Leitungen miteinander vergleichen, können +gleichzeitig ausgewertet werden, wie bereits in +Abschnitt~\ref{sect:einleitung_sortiernetzwerke} beschrieben. Unter +\emph{Komprimieren} wird eine (Neu-)Gruppierung in die kleinstmögliche Anzahl +von \emph{Schichten} verstanden. + +Diese Anzahl ist insbesondere beim automatisierten Bewerten von +Komparatornetzwerken interessant. \dots + +\subsection{Normalisieren} + +\begin{figure} + \centering + \subfigure[$S(8)$ (nach Konstruktion)]{\input{images/batcher-8-nonstd.tex}\label{fig:bitonic-nonstd}} + \subfigure[$S(8)$ (normalisiert)]{\input{images/batcher-8-std.tex}\label{fig:bitonic-std}} + \caption{Jedes Sortiernetzwerk kann in ein Standard-Sortiernetzwerk + transformiert werden. Gezeigt ist das bitone Sortiernetzwerk nach der + intuitiven Konstruktion und die normalisierte Variante.} + \label{fig:beispiel_normalisieren} +\end{figure} + +Ein \emph{Standard-Sortiernetzwerk} oder \emph{normalisiertes Sortiernetzwerk} +ist ein Sortiernetzwerk, dessen Komparatoren alle in die selbe Richtung +zeigen. Jedes Sortiernetzwerk kann in eine normaliesierte Variante +transformiert werden. Dazu gibt beispielsweise \emph{Knuth} (\todo{Verweis}) +einen Algorithmus an. + +Abbildung~\ref{fig:beispiel_normalisieren} zeigt das das +bitone Sortiernetzwerk in zwei Varianten. Abbildung~\ref{fig:bitonic-nonstd} +zeigt das Netzwerk nach der Konstruktionsvorschrift, siehe auch +Abbildung~\ref{fig:bitonic-merge-normal}: In den ersten drei Schichten werden +die unter und die obere Hälfte gegenläufig sortiert. Das heißt dass nach drei +Schritten die eine Hälfte auf- und die andere Hälfte absteigend sortiert ist. +In den Schichten~4 bis~6 folgt der bitone Mischer entsprechend der rekursiven +Definition. + +In Abbildung~\ref{fig:bitonic-std} ist die normalisierte Version des bitonen +Mergesort-Netzwerks zu sehen. Alle Komparatoren zeigen hier in die gleiche +Richtung. \subsection{Zwei Netzwerke kombinieren} @@ -487,24 +526,25 @@ Abbildung~\ref{fig:odd_even_mergesort_08} zeigt das Netzwerk für $8$~Eingänge. \subsection{Leitungen entfernen}\label{sect:leitungen_entfernen} +Im vorherigen Abschnitt haben wir gesehen, dass es mithilfe von +\emph{Mischern} möglich ist, aus zwei Sortiernetzwerken mit je $n$~Eingängen +ein neues Sortiernetzwerk mit $2n$~Eingängen zu erzeugen. Für einen +beabsichtigen \emph{evolutionären Algorithmus} ist es jedoch notwendig, dass +sich die Anzahl der Eingänge nicht verändert. Das heißt, dass wir wieder ein +Sortiernetzwerk mit $n$~Eingängen erhalten müssen. + Man kann ein gegebenes Sortiernetzwerk mit $n$~Eingängen auf ein Sortiernetzwerk mit $(n-1)$~Leitungen verkleinern, indem man eine Leitung -entfernt. Zunächst wird angenommen, dass das Minimum oder das Maximum an einem -der Eingänge anliegt. Der Weg durch das Netzwerk zum entsprechenden Ausgang -ist dadurch fest vorgegeben, insbesondere welche Komparatoren dafür sorgen, -dass die Leitung gewechselt wird und welche nicht. +„eliminiert“. Dazu nehmen wir an, dass das Minimum oder das Maximum an einem +bestimmten Eingang anliegt. Der Weg, den das Minimum beziehungsweise das Maxim +durch das Sortiernetzwerk nimmt, ist eindeutig bestimmt und endet an einem der +„Ränder“, also auf der Leitung mit dem höchsten oder dem niedrigsten Index. +Insbesondere ist bekannt, welche Komparatoren „berührt“ werden und welche +dafür sorgen, dass der Wert die Leitung gewechselt, da das Minimum jeden +Vergleich „verliert“ und das Maximum jeden Vergleich „gewinnt“. Die Abbildung~\ref{fig:oe-transposition-cut0} zeigt den Weg eines Maximums durch das {\em Odd-Even-Transpositionsort-Netzwerk}. -Im nächsten Schritt werden alle beteiligten Komparatoren gelöscht bzw. -ersetzt: Komparatoren, die {\em nicht} zu einem Wechsel der Leitung geführt -haben, werden ersatzlos gelöscht. Diese Komparatoren sind in -Abbildung~\ref{fig:oe-transposition-cut0} grün markiert. Die Komparatoren, die -zum Wechsel der Leitung geführt haben, werden durch sich kreuzende Leitungen -ersetzt. Das Resultat zeigt Abbildung~\ref{fig:oe-transposition-cut1}. Wenn -man die Maximum-Leitung entfernt (Abbildung~\ref{fig:oe-transposition-cut2}), -erhält man ein Sortiernetzwerk für $(n-1)$~Leitungen. - \begin{figure} \centering \subfigure[foo]{\input{images/oe-transposition-cut0.tex}\label{fig:oe-transposition-cut0}} @@ -519,6 +559,31 @@ erhält man ein Sortiernetzwerk für $(n-1)$~Leitungen. letzten Abbildung ist $\textrm{OET}(7)$ markiert.} \end{figure} +Im nächsten Schritt werden alle beteiligten Komparatoren gelöscht bzw. +ersetzt: Komparatoren, die {\em nicht} zu einem Wechsel der Leitung geführt +haben, werden ersatzlos gelöscht. Diese Komparatoren sind in +Abbildung~\ref{fig:oe-transposition-cut0} grün markiert. Die Komparatoren, die +zum Wechsel der Leitung geführt haben, werden durch sich kreuzende Leitungen +ersetzt. Das Resultat ist eine Leitung, auf der das Minimum beziehungsweise +das Maximum angenommen wird, die an unterster oder oberster Stelle endet und +auf die keine Komparatoren mehr berührt +(Abbildung~\ref{fig:oe-transposition-cut1}). + +Die Werte auf den verbleibenden $(n-1)$~Leitungen müssen vom restlichen +Komparatornetzwerk immernoch sortiert werden: Wir haben lediglich die Position +des Minimums oder des Maximums angenommen. Ein Sortiernetzwerk muss die +Eingabe sortieren, egal auf welcher Leitung das Minimum~/ das Maximum liegt. +Wir haben lediglich angefangen, das Sortiernetzwerk unter diese Annahme +auszuwerten -- über die verbleibenden Eingänge haben wir keine Aussage +getroffen. Entsprechend müssen die verbleibenden Ausgänge eine sortierte Liste +mit $(n-1)$~Elementen darstellen. + +Wenn wir die Minimum- beziehungsweise Maximum-Leitung entfernen +(Abbildung~\ref{fig:oe-transposition-cut2}), bleibt das Sortiernetzwerk für +$(n-1)$~Leitungen übrig. Je nachdem, ob auf einer Leitung ein Minimum oder ein +Maximum angenommen wird, bezeichnen wir das eliminieren einer Leitung als +\emph{Minimum-Schnitt} beziehungsweise \emph{Maximum-Schnitt}. + Die letzte Abbildung, \ref{fig:oe-transposition-cut3}, zeigt das Sortiernetzwerk wieder mit den üblichen geraden Leitungen und die rot markierten Komparatoren wurden verschoben, so dass sich eine kompaktere @@ -527,9 +592,58 @@ Darstellung ergibt. Ausserdem ist das zusätzliche Komparator vor dem $\textrm{OET}(7)$ hat keinen Einfluss auf die Ausgabe und kann entfernt werden. +Der Eliminierungsschritt kann iterativ angewandt werden, um aus einem +Sortiernetzwerk mit $n$~Ein\-gängen Sortiernetzwerke mit $n-1$, $n-2$, +$n-3$,~\dots Eingängen zu erzeugen. Insbesondere können wir auf diese Art und +Weise einen Sortiernetzwerk mit $2n$~Eingängen wieder auf ein Sortiernetzwerk +mit $n$~Eingängen reduzieren. + +Bei einem Sortiernetzwerk mit $n$~Eingängen gibt es $2n$~Möglichkeiten eine +Leitung zu entfernen: Auf jeder der $n$~Leitungen kann sowohl das Minimum als +auch das Maximum angenommen werden. Wendet man das Verfahren iterativ an, um +ein $n$-Sortiernetzwerk auf ein $m$-Sortiernetzwerk zu reduzieren, ergeben +sich insgesamt +\begin{displaymath} + \prod_{i=n}^{m+1} 2i = 2^{n-m} \frac{n!}{m!} + \quad (n > m) +\end{displaymath} +Möglichkeiten. Diese Möglichkeiten sind nicht alle unterschiedlich. Legt man +beispielsweise das Minimum auf die unterste Leitung und das Maximum auf die +oberste Leitung eines Standard-Sortiernetzwerks, führen beide Reihenfolgen zum +selben Ergebnis. + +\textit{Moritz Mühlenthaler} zeigt in seiner Arbeit (\todo{Referenz}), dass +es möglich ist, mehrere Eingänge gleichzeitig mit Minimum beziehungsweise +Maximum vorzubelegen. Dadurch wird die Anzahl der möglichen Schnitte +reduziert, die Menge der erreichbaren Sortiernetzwerke bleibt aber +unverändert. Die Anzahl der möglichen „Schnittmuster“ setzt sich zusammen aus +der Anzahl von Möglichkeiten, $n-m$~Leitungen aus $n$ Leitungen auszuwählen, +und die möglichen Minimum-~/ Maximum-Muster. Damit ergibt sich folgende +Formel: +\begin{displaymath} + 2^{n-m} \cdot \left( \begin{array}{c} n \\ n-m \end{array} \right) + = 2^{n-m} \cdot \frac{n!}{(n-m)! m!} + = 2^{n-m} \cdot \frac{n!}{m!} \cdot \frac{1}{(n-m)!} + \quad (n > m) +\end{displaymath} + +Die Anzahl der möglichen Schnitte wird mit der Anzahl der zu entfernenden +Leitungen sehr schnell sehr groß. Um ein Sortiernetzwerk mit 32~Eingängen auf +ein Sortiernetzwerk mit 16~Eingängen zu reduzieren sind 16~Schnitte notwendig, +für die es bereits etwa ${3,939 \cdot 10^{13}}$ Möglichkeiten gibt. Ein +Ausprobieren aller Möglichkeiten ist für große Netzwerke nicht oder nur unter +erheblichem Ressourcenaufwand möglich. + +Das Programm {\sc SN-Evolution-Cut} implementiert einen evolutionären +Algorithmus, der zu einem gegebenen Sortiernetzwerk und einer gewünschten +Leitungszahl ein Schnittmuster sucht, dass ein Sortiernetzwerk mit einer +möglichst geringen Anzahl von Komparatoren und Schichten ergibt. Zur Bewertung +von Sortiernetzwerken siehe auch Abschnitt~\ref{sect:bewertung}. + \begin{itemize} -\item Min-Richtung -\item Max-Richtung + \item Beispiel: Moritz und Rolfs Optimierung für Bitonic-Sort. + \item Wie gut kann man durch wegschneiden werden? + \item Wieviele Schnitte ergeben das selbe Netzwerk? \end{itemize} \section{Der evolutionäre Ansatz} @@ -537,7 +651,7 @@ Ausgabe und kann entfernt werden. Um einen evolutionären Algorithmus für Sortiernetzwerke zu entwickeln, werden die vorgestellten Methoden kombiniert. -\subsection{Bewertungsfunktion} +\subsection{Bewertungsfunktion}\label{sect:bewertung} Um Sortiernetzwerke überhaupt optimieren zu können, muss zunächst die {\em Güte} eines Netzwerkes definiert werden. Prinzipiell gibt es zwei Ziele, @@ -659,240 +773,6 @@ acht Eingängen. Es besteht aus 19~Komparatoren in 6~Schichten.} \label{fig:10-e2-1239014566} \end{figure} -% ============ - -\section{Shmoo-Äquivalenz} - -Die folgenden 16-Eingang-Sortiernetzwerke wurden alle mit dem -\emph{Algorithmus~1} gefunden. Sie haben alle 63~Komparatoren in 10~Schichten, -jeweils die selbe Anzahl wie Odd-Even-Mergesort. - -Um wiederkehrende Muster in den hinteren Schichten der erzeugten -Sortiernetzwerke besser untersuchen zu können, wurden die erzeugten Netzwerke -in Gruppen aufgeteilt. Zwei Netzwerke befinden sich dann in der selben -Gruppen, wenn die Nullen bzw. Einsen, die auf einer Leitung vorkommen können, -nach der 5.~Schicht (Schicht~4, da bei Null mit dem Zählen begonnen wird) -nicht mehr ändert. Das heißt, dass die Schichten 0--4 unterschiedlich -aufgebaut sind, aber den selben Effekt erziehlen. Die Schichten 5--9 sind -hingegen innerhalb einer Gruppe austauschbar und oft (immer?) identisch. - -Die Anzahl der Netzwerke in den jeweiligen Gruppen ist unterschiedlich. Zur -Zeit sind in den Gruppen so viele Netzwerke:\\ -\begin{tabular}{|l|r|r|} \hline -Gruppe~0 & 18 & $48,7\%$ \\ -Gruppe~1 & 9 & $24,3\%$ \\ -Gruppe~2 & 6 & $16,2\%$ \\ -Gruppe~3 & 3 & $8,1\%$ \\ -Gruppe~4 & 1 & $2,7\%$ \\ \hline -\end{tabular} - -Die hinteren Schichten zwischen den Gruppen~1 und~3 schauen so aus, als wären -sie nur gespiegelt. Warum kommt Gruppe~1 aber viel häufiger vor? Ggf. eine -Konsequenz aus dem Normieren? - -Dito für die Gruppen~2 und~4. Warum ist die eine häufiger? - -Ist Gruppe~0 symmetrisch bzgl. der Leitungen? - -% Gruppe 0 - -\begin{figure} -\begin{center} -\input{images/16-e1/group0/16-e1-1258009316.tex} -\end{center} -\caption{{\tt images/16-e1/group0/16-e1-1258009316.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258009316} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group0/16-e1-1258010866.tex} -\end{center} -\caption{{\tt images/16-e1/group0/16-e1-1258010866.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258010866} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group0/16-e1-1258011861.tex} -\end{center} -\caption{{\tt images/16-e1/group0/16-e1-1258011861.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258011861} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group0/16-e1-1259060992.tex} -\end{center} -\caption{{\tt images/16-e1/group0/16-e1-1259060992.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1259060992} -\end{figure} - -%\begin{figure} -%\begin{center} -%\input{images/16-e1/group0/16-e1-1259061148.tex} -%\end{center} -%\caption{{\tt images/16-e1/group0/16-e1-1259061148.tex}: 63~Komparatoren in -%10~Schichten.} -%\label{fig:16-e1-1259061148} -%\end{figure} - -% Gruppe 1 - -\begin{figure} -\begin{center} -\input{images/16-e1/group1/16-e1-1258009982.tex} -\end{center} -\caption{{\tt images/16-e1/group1/16-e1-1258009982.tex}: 63~Komparatoren in 10~Schichten. -Schichten 4--9 identisch zu 16-e1-1258030047 (Gruppe~1).} -\label{fig:16-e1-1258009982} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group1/16-e1-1258010023.tex} -\end{center} -\caption{{\tt images/16-e1/group1/16-e1-1258010023.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258010023} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group1/16-e1-1258029734.tex} -\end{center} -\caption{{\tt images/16-e1/group1/16-e1-1258029734.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258029734} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group1/16-e1-1258030047.tex} -\end{center} -\caption{{\tt images/16-e1/group1/16-e1-1258030047.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258030047} -\end{figure} - -%\begin{figure} -%\begin{center} -%\input{images/16-e1/group1/16-e1-1258034768.tex} -%\end{center} -%\caption{{\tt images/16-e1/group1/16-e1-1258034768.tex}: 63~Komparatoren in -%10~Schichten.} -%\label{fig:16-e1-1258034768} -%\end{figure} - -% Gruppe 2 - -\begin{figure} -\begin{center} -\input{images/16-e1/group2/16-e1-1258029063.tex} -\end{center} -\caption{{\tt images/16-e1/group2/16-e1-1258029063.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258029063} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group2/16-e1-1258034821.tex} -\end{center} -\caption{{\tt images/16-e1/group2/16-e1-1258034821.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258034821} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group2/16-e1-1259054993.tex} -\end{center} -\caption{{\tt images/16-e1/group2/16-e1-1259054993.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1259054993} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group2/16-e1-1259058588.tex} -\end{center} -\caption{{\tt images/16-e1/group2/16-e1-1259058588.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1259058588} -\end{figure} - -%\begin{figure} -%\begin{center} -%\input{images/16-e1/group2/16-e1-1259063485.tex} -%\end{center} -%\caption{{\tt images/16-e1/group2/16-e1-1259063485.tex}: 63~Komparatoren in -%10~Schichten.} -%\label{fig:16-e1-1259063485} -%\end{figure} - -%\begin{figure} -%\begin{center} -%\input{images/16-e1/group2/16-e1-1259063618.tex} -%\end{center} -%\caption{{\tt images/16-e1/group2/16-e1-1259063618.tex}: 63~Komparatoren in -%10~Schichten.} -%\label{fig:16-e1-1259063618} -%\end{figure} - -% Gruppe 3 - -\begin{figure} -\begin{center} -\input{images/16-e1/group3/16-e1-1258012027.tex} -\end{center} -\caption{{\tt images/16-e1/group3/16-e1-1258012027.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258012027} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group3/16-e1-1258037039.tex} -\end{center} -\caption{{\tt images/16-e1/group3/16-e1-1258037039.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1258037039} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group3/16-e1-1259065042.tex} -\end{center} -\caption{{\tt images/16-e1/group3/16-e1-1259065042.tex}: 63~Komparatoren in -10~Schichten.} -\label{fig:16-e1-1259065042} -\end{figure} - -% Gruppe 4 - -\begin{figure} -\begin{center} -\input{images/16-e1/group4/16-e1-1259060520.tex} -\end{center} -\caption{{\tt images/16-e1/group4/16-e1-1259060520.tex}: 63~Komparatoren in 10~Schichten. -(Gruppe~4).} -\label{fig:16-e1-1259060520} -\end{figure} - -\begin{figure} -\begin{center} -\input{images/16-e1/group4/16-e1-1259067171.tex} -\end{center} -\caption{{\tt images/16-e1/group4/16-e1-1259067171.tex}: 63~Komparatoren in 10~Schichten. -(Gruppe~4).} -\label{fig:16-e1-1259067171} -\end{figure} - \subsection{Güte} \begin{itemize} @@ -908,6 +788,8 @@ Schichten 4--9 identisch zu 16-e1-1258030047 (Gruppe~1).} \item Anzahl der erreichbaren Sortiernetzwerke. \end{itemize} +%\input{shmoo-aequivalenz.tex} + \section{Optimierung der Schnitte} Der \emph{evolution-cut}-Algorithmus nimmt ein gegebenes Sortiernetzwerk mit