X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diplomarbeit.tex;h=e98ae28d818340c62a5deb7f73dc6db9a663f9b4;hb=348e8f6e0b29fe78e0f5173a803d147cf31fb61d;hp=bdb72963a3b33a2281c822d0ca8597e5edf97178;hpb=670f49dbdf6633678fb19ac01b03d5697bf81249;p=diplomarbeit.git diff --git a/diplomarbeit.tex b/diplomarbeit.tex index bdb7296..e98ae28 100644 --- a/diplomarbeit.tex +++ b/diplomarbeit.tex @@ -1,4 +1,4 @@ -\documentclass[a4paper,10pt]{article} +\documentclass[a4paper,11pt]{article} \usepackage[utf8]{inputenc} \usepackage{ngerman} \usepackage{fancyhdr} @@ -13,10 +13,13 @@ \usepackage{subfigure} \usepackage{icomma} +\usepackage{tikz} +\usetikzlibrary{arrows,shapes} + % Fuer mathtoolsset \usepackage{mathtools} -\geometry{paper=a4paper,margin=25mm} +\geometry{paper=a4paper,margin=30mm} \pagestyle{fancy} %\fancyhf{} @@ -41,35 +44,1314 @@ \begin{document} +\tikzstyle{vertex} = [circle,draw,thick,fill=black,minimum size=5,inner sep=0pt] +\tikzstyle{comp} = [draw,thick,-] +\tikzstyle{compup} = [draw,thick,->] +\tikzstyle{compdown} = [draw,thick,<-] +\tikzstyle{edge} = [draw,thick,-] +\tikzstyle{diredge} = [draw,thick,->] +\tikzstyle{prob} = [font=\tiny] + +\tikzstyle{edge minimum} = [edge,color=blue!20] +\tikzstyle{edge maximum} = [edge,color=red!20] +\tikzstyle{vertex active minimum} = [vertex,color=blue!50, fill=blue!50] +\tikzstyle{vertex active maximum} = [vertex,color=red!50, fill=red!50] +\tikzstyle{vertex active minimum maximum} = [vertex,color=violet!50, fill=violet!50] +\tikzstyle{vertex inactive minimum} = [vertex,color=blue!20, fill=blue!20] +\tikzstyle{vertex inactive maximum} = [vertex,color=red!20, fill=red!20] +\tikzstyle{vertex inactive minimum maximum} = [vertex,color=black!20, fill=black!20] +\tikzstyle{comp active minimum} = [comp] +\tikzstyle{comp active maximum} = [comp] +\tikzstyle{comp active minimum maximum} = [comp,color=black!20] +\tikzstyle{comp inactive minimum} = [comp,color=blue!20] +\tikzstyle{comp inactive maximum} = [comp,color=red!20] +\tikzstyle{comp inactive minimum maximum} = [comp,color=black!20] + +\tikzstyle{red box} = [draw,-,color=red, top color=red!2,bottom color=red!10] +\tikzstyle{blue box} = [draw,-,color=blue,top color=blue!2,bottom color=blue!10] +\tikzstyle{green box} = [draw,-,color=teal,top color=teal!2,bottom color=teal!10] +\tikzstyle{gray box} = [draw,-,color=black, top color=black!2,bottom color=black!10] + \maketitle \begin{abstract} -Dies ist der Abstract. +Sortiernetzwerke werden eingeführt und einige bekannte Konstruktionen werden +vorgestellt (Off-Even-Transposition, Bitonic-Merge, Odd-Even-Merge, Pairwise). +Transformationsmöglichkeiten für Sortiernetzwerke werden besprochen. +Evolutionäre Algorithmen werden beschrieben und ein evolutionärer +Algorithmus für die Optimierung von Sortiernetzwerken wird angegeben. +Die mindestens von diesem Algorithmus erreichte Güte wird angegeben und die +Transformation zu einer Markov-Kette wird gezeigt. {\em Natürlich: So fern ich +das hinbekomme bzw. Recht behalte.} \end{abstract} \newpage \tableofcontents -\newpage +\newpage \section{Motivation und Einleitung} -\subsection{Motivation} +\subsection{Motivation}\label{sect:motivation} + +\begin{itemize} +\item Sortiernetzwerke sind toll, weil $\ldots$ +\item Sortiernetzwerke sind einfach erklärt, aber trotzdem kompliziert. +\item Bisher noch kein evolutionärer Algorithmus zur automatischen + Optimierung von Sortiernetzwerken bekannt. \textit{(Glaube ich zumindest.)} +\end{itemize} + +\subsection{Einleitung}\label{sect:einleitung} + +\subsubsection{Sortiernetzwerke}\label{sect:einleitung_sortiernetzwerke} + +{\em Komparatoren} sind die Bausteine, die {\em Sortiernetzwerken} zugrunde +liegen. Sie haben zwei Eingänge über die sie zwei Zahlen erhalten können. +Ausserdem besitzt ein {\em Komparator} zwei Ausgänge, die im Gegensatz zu den +Eingängen unterscheidbar sind: Die grö"sere der beiden Zahlen wird immer auf +dem einen, die kleinere der beiden Zahlen immer auf dem anderen Ausgang +ausgegeben. + +Wenn man nun mehrere {\em Komparatoren} miteinander kombiniert, also die +Ausgänge von Komparatoren mit dem Eingängen anderer Komparatoren verbindet, +erhält man ein {\em Komparatornetzwerk}. + +\begin{figure} +\begin{center} +\input{images/einfaches_komparatornetzwerk.tex} +\end{center} +\caption{Einfaches Komparatornetzwerk mit vier Ein- bzw. Ausgängen, bestehend +aus 5~Komparatoren.} +\label{fig:einfaches_komparatornetzwerk} +\end{figure} + +Abbildung~\ref{fig:einfaches_komparatornetzwerk} zeigt ein einfaches +Komparatornetzwerk aus fünf Komparatoren in der üblichen Darstellungsweise: +Die horizontalen Linien stellen Leitungen von den Eingängen auf der linken +Seite zu den Ausgängen auf er rechten Seite dar. Die vertikalen Pfeile +symbolisieren die Komparatoren, die die Werte "`auf den Leitungen"' +vergleichen und ggf. vertauschen. Nach einem Komparator befindet sich die +kleinere Zahl immer auf der Leitung, auf die der Pfeil zeigt, die größere Zahl +befindet sich auf der Leitung auf der der Pfeil seinen Ursprung hat. + +Komparatoren, die unterschiedliche Leitungen miteinander vergleichen, können +gleichzeitig angewandt werden. Das Beispiel in +Abbildung~\ref{fig:einfaches_komparatornetzwerk} verwendet diesen Umstand und +vergleicht in einem ersten Schritt die zwei oberen und die zwei unteren +Leitungen gleichzeitig. Eine Gruppe von Komparatoren, die gleichzeitig +angewendet werden können, nennt man eine \emph{Schicht} des +Komparatornetwerks. Die \emph{Verzögerung} eines Komparatornetzwerks ist +gleichbedeutend mit der Anzahl der Schichten, in die sich die Komparatoren +mindestens gruppieren lassen, da sie die Anzahl der benötigten parallelen +Schritte darstellt. + +Komparatornetzwerke, die für jede beliebige Eingabepermutation eine +Ausgabe erzeugen, die der Sortierung der Eingabe entspricht, heißen +{\em Sortiernetzwerke}. Das in +Abbildung~\ref{fig:einfaches_komparatornetzwerk} gezeigte Komparatornetzwerk +ist kein Sotiernetzwerk: Die Eingabefolge ${(1, 2, 3, 4)}$ würde zur Ausgabe +${(2, 1, 3, 4)}$ führen -- die bestehenden Sortierung wird also sogar +zerstört. + +Zu beweisen, dass ein gegebenes Komparatornetzwerk die Sortiereigenschaft +{\em nicht} hat, ist mit einem gegebenen Gegenbeispiel einfach möglich. +Dieses Gegenbeispiel zu finden ist allerdings aufwendig. + +\todo{Wie findet man die Gegenbeispiele? Die {\em Entscheidung}, ob ein +Netzwerk sortiert, ist doch NP-vollständig, also müsste doch das Finden eines +Gegenbeispiels im Allgemeinen auch exponentialle Laufzeit haben..?} +\todo{Wenn die {\em Entscheidung}, ob ein Netzwerk sortiert, NP-vollständig +ist, müsse man dann nicht einen Zeugen für die Sortiereigenschaft angeben +können?} + +\todo{$0-1$-Prinzip} + +Um zu überprüfen, ob ein gegebenes Komparatornetzwerk die Sortiereigenschaft +besetzt, müssen nicht alle $n!$ Permutationen von $n$~unterschiedlichen Zahlen +ausprobieren. Stattdessen reicht es zu überprüfen, dass das Netzwerk alle +$2^n$~0-1-Folgen sortiert. + +Sortiernetzwerke: +\begin{itemize} +\item Ein Komparator-Netzwerk ist $\ldots$ +\item Ein Komparator-Netzwerk ist ein Sortiernetzwerk, wenn $\ldots$ +\item Die Frage nach der Sortiereigenschaft ist NP-vollständig. +\end{itemize} + +\subsubsection{Evolutionäre Algorithmen} + +Viele {\em kombinatorische Optimierungsprobleme} sind schwer zu lösen -- die +entsprechenden Entscheidungsprobleme liegen oft in der Komplexitätsklasse +$NP$, sind also mit bekannten Verfahren nicht effizient exakt lösbar. Sollte +sich herausstellen, dass diese Probleme nicht in der Komplexitätsklasse $P$ +liegen, wäre eine Konsequenz, dass es effiziente exakte Algorithmen für diese +Probleme nicht geben kann. Falls sich hingegen herausstellt, dass diese +Probleme in der Komplexitätsklasse~$P$ liegen, wird es mit großer +Wahrscheinlichkeit noch einige Zeit dauern bis auch Algorithmen mit +praktikablen Zeitkonstanten gefunden werden. + +Aus diesem Grund besteht die Notwendigkeit einen Kompromiss einzugehen: Statt +die bzw. eine der {\em optimalen} Lösungen als einzige Ausgabe des Algorithmus +zuzulassen, wird eine "`möglichst gute"' Lösung ausgegeben. Viele dieser +Optimierungsalgorithmen orientieren sich an Vorgängen in der Natur, +beispielsweise immitieren die "`Ameisenalgorithmen"' das Verhalten von Ameisen +auf der Futtersuche um kurze Rundreisen auf Graphen zu berechnen. + +Bei {\em Evolutionären Algorithmen} stand die Evolution pate. Die Grundidee +ist es, bestehende Lösungen zu neuen, unter Umständen besseren Lösungen zu +kombinieren. Dabei bedient man sich der in der Evolutionstheorie etablierten +Nomenklatur, beispielsweise werden konkrete Lösungen für ein Problem häufig +als {\em Individuum} bezeichnet. + +Die Vorgehensweise lässt sich abstrakt wie folgt beschreiben. Aus einer +bestehenden Lösungsmenge, der {\em Population} werden zufällig Lösungen +ausgesucht {\em (Selektion)} und zu einer neuen Lösung kombiniert ({\em +Rekombination}). Unter Umständen wird die neue Lösung noch zufällig +verändert {\em (Mutation)}, bevor sie in die bestehende Lösungsmenge +integriert wird. Die Wahrscheinlichkeiten, beispielsweise bei der {\em +Selektion}, sind dabei nicht zwangsläufig gleichverteilt -- üblicherweise +werden bessere Lösungen bevorzugt. Zur Bewertung die die sogenannte {\em +Gütefunktion}. + +Nicht alle Probleme eignen sich für diese Strategie: Zum einen muss es möglich +sein, eine initiale Population zur Verfügung zu stellen, da diese als Basis +aller weiteren Operationen dient. Das ist häufig keine große Einschränkung, da +es oft einfach ist {\em irgendeine} Lösung anzugeben. Zum anderen muss eine +Methode für die Rekombination existieren. Das insbesondere dann problematisch +wenn {\em Nebenbedingungen} eingehalten werden müssen. + +\begin{itemize} +\item Unter einem "`Evolutionären Algorithmus"' versteht man $\ldots$ +\item Da die Sortiereigenschaft zu überprüfen NP-schwer ist, ist die +Mutation \textit{(vermutlich)} nicht (effizient) möglich. +\end{itemize} + +\newpage +\section{Bekannte konstruktive Sortiernetzwerke} + +Übersicht über bekannte konstruktive Sortiernetzwerke. + +\subsection{Das Odd-Even-Transpositionsort-Netzwerk} +\label{sect:odd_even_transpositionsort} + +Das Sortiernetzwerk {\em Odd-Even-Transpositionsort} (OET) ist eines der +einfachsten Sortiernetzwerke. Es besteht aus $n$~{\em Schichten}, die jede +"`Leitung"' abwechselnd mit den benachbarten Leitungen verbindet. +Abbildung~\ref{fig:odd-even-transposition-08} zeigt das OET-Netzwerk für +${n = 8}$ Leitungen. + +\begin{figure} + \begin{center} + \input{images/oe-transposition-8.tex} + \end{center} + \caption{Das \emph{Odd-Even-Transpositionsort}-Netzwerk mit acht Eingängen.} + \label{fig:odd-even-transposition-08} +\end{figure} + +Dass das Odd-Even-Transporitionsort-Netzwerk tatsächlich jede beliegibe +Eingabe sortiert ist nicht offensichtlich. Leicht zu sehen ist jedoch, dass +sowohl das Minimum als auch das Maximum durch das im Netzwerk enthaltene +Treppenmuster auf die unterste beziehungsweise oberste Leitung gelangt. Beim +Odd-Even-Transporitionsort-Netzwerk mit drei Eingängen, +$\operatorname{OET}(3)$, ist die Ausgabe folglich sortiert. + +Die Sortiereigenschaft größerer OET-Netzwerke lässt sich rekursiv beweisen, +indem man $\operatorname{OET}(n)$ auf $\operatorname{OET}(n-1)$ durch +Herausschneiden einer Leitung reduziert. In +Abschnitt~\ref{sect:leitungen_entfernen} wird das Vorgehen im Detail +beschrieben, Abbildung~\ref{fig:oe-transposition-cut} zeigt das +Herausschneiden einer Leitung aus $\operatorname{OET}(8)$. + +Das Odd-Even-Transporitionsort-Netzwerk ist weder in Bezug auf die Anzahl der +Komparatoren noch in Bezug auf die Anzahl der Schichten, in denen sich die +Komparatoren anordnen lassen, effizient. Es benötigt +${\frac12 n (n-1)} = \mathcal{O}(n^2)$~Komparatoren, die in $n$~Schichten +angeordnet sind. Andere Sortiernetzwerke benötigen deutlich weniger +Komparatoren, beispielsweise $\mathcal{O}(n (\log n)^2)$, die in weniger +Schichten, zum Beispiel $\mathcal{O}(\log n)$, angeordnet sind. + +Das Interessante am OET-Netzwerk ist seine einfache Konstruktion. Einige der +folgenden Algorithmen benötigen ein (einfaches) Sortiernetzwerk als +Starteingabe, auf dessen Basis sie versuchen optimierte Sortiernetzwerke zu +finden. Häufig dient $\operatorname{OET}(n)$ als Eingabe für diese +Algorithmen. + +\subsection{Das bitone Mergesort-Netzwerk} + +Das \emph{bitone Mergesort}-Netzwerk ($\operatorname{BS}(n)$) ist ein +Sortiernetzwerk, das 1968 von \emph{Kenneth~E. Batcher} in~\cite{B1968} +veröffentlicht wurde. Es ist deutlich effizienter als das +Odd-Even-Transporitionsort-Netzwerk -- sowohl in Bezug auf die Anzahl der +Komparatoren als auch bezüglich der benötigten Zeit, also der Anzahl der +Schichten. + +Das Sortiernetzwerk basiert auf einem Komparatornetzwerk, welches zwei +sortierte Listen zusammenfügen (englisch: \textit{to~merge}) kann. Dieser +\emph{„bitoner Mischer“} (englisch: \textit{bitonic merger}) genannte Baustein +verleiht dem Sortiernetzwerk seinen Namen. + +Da das Sortiernetzwerk rekursiv definiert ist, betrachten wir hier nur die +Instanzen des Netzwerks, deren Leitungszahl eine Zweierpotenz ist, +$\operatorname{BS}(n = 2^t)$. + +\subsubsection{Der bitone Mischer}\label{sect:der_bitone_mischer} + +Das \emph{bitone Mergesort-Netzwerk} basiert auf dem sogenannten \emph{bitonen +Mischer} $\operatorname{BM}(n)$, einem Kom\-parator-Netzwerk, das eine beliebige +\emph{bitone Folge} in eine sortierte Listen umordnen kann. Eine \emph{bitone +Folge} ist eine monoton steigende Folge gefolgt von einer monoton absteigenden +Folge, oder ein zyklischer Shift davon. Abbildung~\ref{fig:beispiel-biton} +zeigt die vier prinzipiellen Möglichkeiten die durch zyklische Shifts +entstehen können. Die wichtigsten Varianten für das \emph{bitone +Mergesort-Netzwerk} zeigen die Abbildungen~\ref{fig:beispiel-biton-0} +und~\ref{fig:beispiel-biton-1}. Sie erhält man, wenn man eine aufsteigend und +eine absteigend sortierte Liste aneinanderhängt. Bei den anderen beiden Formen +ist wichtig zu beachten, dass das letzte Element nicht größer +(Abbildung~\ref{fig:beispiel-biton-2}) bzw. kleiner +(Abbildung~\ref{fig:beispiel-biton-3}) als das erste Element der Folge sein +darf. + +\begin{figure} + \centering + \subfigure[aufsteigend, absteigend]{\input{images/beispiel-biton-0.tex}\label{fig:beispiel-biton-0}} + \subfigure[absteigend, aufsteigend]{\input{images/beispiel-biton-1.tex}\label{fig:beispiel-biton-1}} + \subfigure[aufsteigend, absteigend, aufsteigend]{\input{images/beispiel-biton-2.tex}\label{fig:beispiel-biton-2}} + \subfigure[absteigend, aufsteigend, absteigend]{\input{images/beispiel-biton-3.tex}\label{fig:beispiel-biton-3}} + \caption{Beispiele bitoner Folgen.} + \label{fig:beispiel-biton} +\end{figure} + +\begin{figure} + \centering + \subfigure[normal]{\input{images/bitonic-merge.tex}\label{fig:bitonic-merge-normal}} + \qquad + \subfigure[trichter]{\input{images/bitonic-merge-trichter.tex}\label{fig:bitonic-merge-tricheter}} + \caption{Schematischer Aufbau des bitonen Mischers: Jedes Element der + aufsteigenden Folge $u_0, u_1, \ldots$ wird mit dem entsprechenden Element + der absteigend sortierten Folge $v_0, v_1, \ldots$ verglichen. Die beiden + resultierenden Teilfolgen sind wiederum biton.} + \label{fig:bitonic-merge-schema} +\end{figure} + +Der Mischer funktioniert folgendermaßen: Gegeben sind zwei Folgen mit je +${m = \frac{n}{2}}$ Elementen, $U = \left(u_0, u_1, \ldots, u_{m-1}\right)$ und +$V = \left(v_0, v_1, \ldots, v_{m-1}\right)$. Die Folge $U$ sei aufsteigend +sortiert, die Folge $V$ sei absteigend sortiert: +\begin{eqnarray} + u_0 \leqq u_1 \leqq &\ldots& \leqq u_{m-1} \\ + v_0 \geqq v_1 \geqq &\ldots& \geqq v_{m-1} +\end{eqnarray} +Im ersten Schritt werden nun jeweils die Elemente an den gleichen relativen +Positionen verglichen und ggf. vertauscht: +\begin{equation} +u_i \longleftrightarrow v_i, \quad 0 \leqq i < m +\end{equation} +Sei $j \in \{0 \ldots m\}$ der Index der ersten Elemente $u_j$ und $v_j$, die +durch den gemeinsamen Komparator vertauscht werden. Unter der Annahme, dass +Elemente nur vertauscht werden wenn, sie ungleich sind, muss ${u_j > v_j}$ +gelten. Mit $u_j \leqq u_{j+1}$ und $v_j \geqq v_{j+1}$ folgt daraus $u_{j+1} +> v_{j+1}$. Es werden also alle Elemente $u_k$ und $v_k$ mit $k \geqq j$ +vertauscht. $j = m$ bezeichnet den Fall, in dem das größte Element der +"`linken"' Folge, $u_{m-1}$, kleiner ist als das kleinste Element der +"`rechten"' Folge, $v_{m-1}$. Daraus folgt, dass das Resultat in zwei bitone +Folgen aufteilen lässt: Eine aufsteigende~/ absteigende Folge und eine +absteigende~/ aufsteigende Folge. Abbildung~\ref{fig:bitonic-merge-normal} +zeigt die Situationen vor und nach diesem Schritt des Mischers. + +Um die Folge vollständig zu sortieren, müssen anschließend die beiden +resultierenden bitonen Folgen sortiert werden. Die geschieht ebenfalls +mithilfe des bitonen Mischers, mit zwei Instanzen von +$\operatorname{BM}(\frac{n}{2})$. Diese rekursive Definition endet mit dem +bitonen Mischer mit zwei Leitungen, $\operatorname{BM}(2)$, der als +Komparator-Netzwerk mit einem Komparator zwischen den beiden Leitungen +definiert ist. + +Der bitonen Mischer kann auch zwei aufsteigende Folgen sortieren. Dazu ist +lediglich eine etwas modifizierte Vergleichs-Kaskade im ersten Schritt +notwendig. Die folgenden, kleineren Mischer erhalten als Eingabe wieder eine +„echte“ bitone Folge. Abbildung~\ref{fig:bitonic-merge-tricheter} zeigt das +Schema des bitonen Mischers für zwei aufsteigend sortierte Foglen. Durch das +Umdrehen einer Folge verändert sich das Muster der Komparatoren ein wenig: +Statt an eine Treppe erinnert das Muster nun an einen Trichter. + +Da sich die Anzahl der Leitungen in jedem Rekursionsschritt halbiert, endet +die Rekursion nach $\log(n)$~Schritten. In jedem Rekursionsschritt werden +$\frac{n}{2}$~Komparatoren eingefügt, so dass der gesamte Mischer aus +$\frac{1}{2} n \log(n) = \mathcal{O}\left(n \log(n)\right)$~Komparatoren +besteht, die in $\log(n)$~Schichten angeordnet werden können. + +\subsubsection{Das bitone Mergesort-Netzwerk} + +Ebenso wie der bitone Mischer $\operatorname{BM}(n)$ ist auch das \emph{bitone +Mergesort-Netzwerk} $\operatorname{BS}(n)$ rekursiv definiert. Es setzt sich +zusammen aus zwei Instanzen des bitonen Mergesort-Netzwerks halber Größe, +$\operatorname{BS}(\frac{n}{2})$, für je die Hälfte der Eingänge, sowie dem +bitonen Mischer für $n$~Leitungen, $\operatorname{BM}(n)$. Das Rekursionsende +ist das bitone Mergesort-Netzwerk mit nur einer Leitung, +$\operatorname{BS}(1)$, welches als leeres Komparatornetzwerk definiert ist. +Entsprechend sind die Komparatornetzwerke $\operatorname{BM}(2)$ und +$\operatorname{BS}(2)$ identisch. + +Bei der Konstruktion kommt die trichterförmige Anordnung der Komparatoren +(Abbildung~\ref{fig:bitonic-merge-tricheter}) gelegen, weil so die beiden +rekursiven Sortiernetzwerke in die gleiche Richtung sortieren können und so +alle Komparatoren in die gleiche Richtung zeigen. + +\begin{figure} + \begin{center} + \input{images/batcher-8.tex} + \end{center} + \caption{$\operatorname{BS}(8)$, Batchers {\em bitones Mergesort-Netzwerk} + für acht Eingänge. Markiert sind die beiden Instanzen von + $\operatorname{BS}(4)$ (rot), die beiden bitonen + Mischer~$\operatorname{BM}(4)$ (blau) und die Komparatoren, die im letzten + rekursiven Schritt hinzugefügt wurden (grün).} + \label{fig:bitonic-08} +\end{figure} + +Das konkrete Netzwerk~$\operatorname{BS}(8)$ ist in +Abbildung~\ref{fig:bitonic-08} zu sehen. Eingezeichnet sind ebenfalls die +beiden Instanzen des Netzwerks~$\operatorname{BS}(4)$ (rot) sowie der bitone +Mischer~$\operatorname{BM}(8)$ (blau). Die trichterförmige Komparator-Kaskade, +die die bitone Eingabefolge in zwei bitone Ausgabefolgen transformiert, ist +grün hinterlegt. + +Das \emph{bitone Mergesort-Netzwerk} $\operatorname{BS}(8)$ besteht aus +$\frac{1}{4} n \log(n) \log(n+1) = \mathcal{O}\left(n (log (n))^2\right)$ +Komparatoren, die in $\frac{1}{2} \log(n) \log(n+1) = \mathcal{O}(\log(n))$ +Schichten angeordnet sind. + +%\begin{figure} +%\begin{center} +%\includegraphics[viewport=115 491 372 782,width=7.5cm]{images/sn-rekursiver-aufbau.pdf} +%\end{center} +%\caption{Rekursiver Aufbau von $S(n)$: Es besteht aus zwei Instanzen von +%$S(n/2)$ und dem Mischer $M(n)$.} +%\label{fig:bms_rekursiver_aufbau} +%\end{figure} + +\subsection{Das Odd-Even-Mergesort-Netzwerk} + +Obwohl der Name ähnlich klingt, haben das \emph{Odd-Even-Mergesort-Netzwerk} +(OES) und das \emph{Odd-Even-Transpositionsort-Netzwerk} (siehe +Abschnitt~\ref{sect:odd_even_transpositionsort}) wenig gemein. Vielmehr ist +OES dem \emph{bitonen Mergesort-Netzwerk}, das im vorherigen Abschnitt +vorgestellt wurde, ähnlich: Auch dieses Sortiernetzwerk ist von +\textit{Kenneth~E. Batcher} gefunden worden und ist ebenfalls in~\cite{B1968} +beschrieben und initial analysiert worden. Eine weitere Gemeinsamkeit besteht +darin, dass es ebenfalls rekursiv durch einen Mischer definiert ist. + +\subsubsection{Der Odd-Even-Mischer}\label{sect:der_odd_even_mischer} + +Der \emph{Odd-Even-Mischer} $\operatorname{OEM}(n,m)$ ist ein +Komperatornetzwerk, dass zwei sortierte Folgen mit $n$ beziehungsweise $m$ +Elementen zu einer sortierten Ausgabefolge mit $N = n+m$~Elementen +zusammenfügen kann. Dabei kommt es mit weniger Vergleichen aus als der +\emph{bitone Mischer}, der im Abschnitt~\ref{sect:der_bitone_mischer} +vorgestellt wurde. Allerdings benötigt der \emph{Odd-Even-Mischer} unter +Umständen mehr Schichten als der \emph{bitone Mischer}.\footnote{Knuth, +“Bitonic Sorting”, Seite~230} + +Der \emph{Odd-Even-Mischer} selbst ist ebenfalls rekursiv aufgebaut: Die +Eingabe für den Mischer mit $N = n + m$ Leitungen besteht aus den beiden +sortierten Folgen $U = \left(u_0, u_1, \ldots, u_{n-1}\right)$ und +$V = \left(v_0, v_1, \ldots, v_{m-1}\right)$. Die gesamte Eingabe sei +$W = \left(w_0, w_1, \ldots, w_{N-1}\right)$ mit: +\begin{equation} +w_i = \left\{ \begin{array}{ll} + u_i, & i < n \\ + v_{i-n}, & i \geqq n + \end{array} \right., + \quad 0 \leqq i < N +\end{equation} + +\begin{figure} + \begin{center} + \input{images/oe-merge.tex} + \end{center} + \caption{Schematischer Aufbau des {\em Odd-Even} Mischers. Im Vergleich zum + bitonen Mischer für Acht kommt dieses Schema mit einem Komparator weniger + aus. Der Effekt wird duch den rekursiven Aufbau noch verstärkt.} + \label{fig:oe-merge} +\end{figure} + +Diese werden in insgesamt vier sortierte Folgen aufgeteilt, je eine Liste der +geraden Indizes und je eine Liste der ungeraden Indizes. +\begin{eqnarray} + U_{\textrm{gerade}} &=& \left(u_0, u_2, u_4, \ldots\right) \\ + U_{\textrm{ungerade}} &=& \left(u_1, u_3, u_5, \ldots\right) \\ + V_{\textrm{gerade}} &=& \left(v_0, v_2, u_4, \ldots\right) \\ + V_{\textrm{ungerade}} &=& \left(v_1, v_3, u_5, \ldots\right) +\end{eqnarray} + +Die geraden Folgen $U_{\textrm{gerade}}$ und $V_{\textrm{gerade}}$ bzw. die +ungeraden Folgen $U_{\textrm{ungerade}}$ und $V_{\textrm{ungerade}}$ werden +rekursiv von kleineren {\em Odd-Even-Mischern} zusammengefügt, so dass sich am +Ausgang der Mischer die Folgen +\begin{eqnarray} + W_{\textrm{gerade}} &=& \left(w_0, w_2, w_4, \ldots\right) \\ + W_{\textrm{ungerade}} &=& \left(w_1, w_3, w_5, \ldots\right) +\end{eqnarray} +ergeben. + +Anschließend werden die Komparatoren zwischen benachbarten Leitungen +hinzugefügt, +\begin{equation} + w_{2i-1} \longleftrightarrow w_{2i}, \quad 1 \leqq i < \frac{N}{2} +\end{equation} +die die Folge~$W$ sortieren. Den schematischen Aufbau des {\em +Odd-Even-Mischers} zeigt Abbildung~\ref{fig:oe-merge}. + +Leider bricht die Rekursion nicht so schön ab, wie das beim {\em bitonen +Mischer} der Fall gewesen ist. Insbesondere für ${n = m = 1}$ würde -- +entsprechend der Konstruktionsvorschrift -- ein leeres Netzwerk entstehen, was +offensichtlich nicht korrekt wäre. Die Abbruchbedingungen für den rekursiven +Aufbau lauten: +\begin{itemize} + \item Falls ${n = 0}$ oder ${m = 0}$: Das Netzwerk ist leer. + \item Falls ${n = 1}$ und ${m = 1}$: Das Netzwerk besteht aus einem + einzelnen Komparator. +\end{itemize} + +Dass die resultierende Folge sortiert ist, lässt sich mit dem +{\em 0-1-Prinzip} zeigen: +Da $U$ und $V$ sortiert sind, ist die Anzahl der Nullen in den geraden +Teilfolgen, $U_{\textrm{gerade}}$ bzw. $V_{\textrm{gerade}}$, größer oder +gleich der Anzahl der Nullen in den ungeraden Teilfolgen +$U_{\textrm{ungerade}}$ bzw. $V_{\textrm{ungerade}}$ --~die Einsen verhalten +sich entsprechend umgekehrt. Das trifft demnach auch auf die Folgen +$W_{\textrm{gerade}}$ und $W_{\textrm{ungerade}}$ entsprechend zu: +\begin{eqnarray} + \left|W_{\textrm{gerade}}\right|_0 + &=& \left|U_{\textrm{gerade}}\right|_0 + + \left|V_{\textrm{gerade}}\right|_0 + = \left\lceil \frac{1}{2} \left|U\right|_0 \right\rceil + + \left\lceil \frac{1}{2} \left|V\right|_0 \right\rceil \\ + \left|W_{\textrm{ungerade}}\right|_0 + &=& \left|U_{\textrm{ungerade}}\right|_0 + + \left|V_{\textrm{ungerade}}\right|_0 + = \left\lfloor \frac{1}{2} \left|U\right|_0 \right\rfloor + + \left\lfloor \frac{1}{2} \left|V\right|_0 \right\rfloor +\end{eqnarray} +Daraus folgt, dass $W_{\textrm{gerade}}$ $0$, $1$ oder $2$ Nullen mehr enthält +als $W_{\textrm{ungerade}}$. In den ersten beiden Fällen ist die "`verzahnte"' +Ausgabe der beiden kleineren Mischer bereits sortiert. Nur im letzten Fall, +wenn $W_{\textrm{gerade}}$ zwei Nullen mehr enthählt als +$W_{\textrm{ungerade}}$, muss genau eine Vertauschung stattfinden, um die +Ausgabe zu sortieren. Diese wird von den Komparatoren, die benachbarte +Leitungen miteinander vergleichen, ausgeführt. Die jeweiligen Situationen sind +in Abbildung~\ref{fig:oe-post-recursive} dargestellt. + +\begin{figure} + \centering + \subfigure[$\left|W_{\textrm{gerade}}\right|_0 - \left|W_{\textrm{ungerade}}\right|_0 = 0$]{\input{images/oe-post-recursive-diff0.tex}} + \qquad + \subfigure[$\left|W_{\textrm{gerade}}\right|_0 - \left|W_{\textrm{ungerade}}\right|_0 = 1$]{\input{images/oe-post-recursive-diff1.tex}} + \qquad + \subfigure[$\left|W_{\textrm{gerade}}\right|_0 - \left|W_{\textrm{ungerade}}\right|_0 = 2$]{\input{images/oe-post-recursive-diff2.tex}} + \caption{Die drei Situationen, die nach dem Verzahnen der Ausgaben der + kleineren {\em Odd-Even-Mischer} entstehen können. Ist die Differenz der + Anzahl der Nullen gleich $0$ oder $1$, ist die Folge bereits sortiert. Im + letzten Fall stellt einer der Komparatoren sicher, dass das Ergebnis + sortiert ist.} + \label{fig:oe-post-recursive} +\end{figure} + +Da die Teilfolgen $U$ und $V$ in jedem Rekursionsschritt etwa halbiert werden, +bricht die Rekursion nach $\mathcal{O}\left(\log (n) + \log (m)\right)$ +Schritten ab. Die exakte Anzahl der benötigten Rekursionsschritte (und damit +Schichten im Mischer-Netzwerk), hängt von der Längeren der beiden +Eingabefolgen ab und beträgt $1 + \lceil \log\left(\max(n, m)\right) \rceil$. + +Die Anzahl der Komparatoren $K(n,m)$, die $\operatorname{OEM}(n,m)$ im +allgemeinen Fall verwendet, ist Gemäß der rekursiven Definition in +Abhängigkeit der Länge der Eingabefolgen, $n$ und $m$: +\begin{displaymath} + K(n,m) = \left\{ \begin{array}{ll} + nm, & \mathrm{falls} \quad nm \leqq 1 \\ + K\left(\left\lceil \frac{n}{2} \right\rceil, \left\lceil \frac{m}{2} \right\rceil\right) + + K\left(\left\lfloor \frac{n}{2} \right\rfloor, \left\lfloor \frac{m}{2} \right\rfloor\right) + + \left\lfloor \frac{1}{2} (m + n - 1) \right\rfloor & \mathrm{falls} \quad nm > 1 + \end{array} \right. +\end{displaymath} +Leider ist es schwierig, diese allgemeine Formel in einer geschlossenen Form +anzugeben. Aus der Anzahl der Rekursionsschritte ist jedoch leicht erkennbar, +dass $K(n,m)$ in $\mathcal{O}(N \log (N))$ enthalten ist. + +Für den wichtigen Spezialfall, dass $n = m = 2^{t-1}$, lässt sich die Anzahl +der Komparatoren im Vergleich zum \emph{bitonen Mischer} angeben: Der erste +Rekursionsschritt der OEM-Konstruktion fügt +$\left\lfloor \frac{1}{2} (m + n - 1) \right\rfloor = \frac{N}{2} - 1$ +Komparatoren ein -- einen Komparator weniger als der \emph{bitone Mischer} in +diesem Schritt. Das selbe gilt für die rekursiv verwendeten kleineren Mischer, +$\operatorname{OEM}(\frac{n}{2}, \frac{n}{2})$ und so weiter bis +einschließlich $\operatorname{OEM}(2, 2)$, von denen es $2, 4, \dots, +\frac{N}{4} = 2^{\log(N)-2}$ Instanzen gibt. Insgesamt werden +\begin{displaymath} + \sum_{i=0}^{\log(N)-2} 2^i = 2^{\log(N) - 1} - 1 = \frac{N}{2} - 1 = n - 1 +\end{displaymath} +Komparatoren eingespart. Damit ergibt sich +\begin{displaymath} + K\left(n = 2^{t-1}, n = 2^{t-1}\right) = \frac{1}{2} N \log(N) - \frac{N}{2} + 1 +\end{displaymath} +für die Anzahl der Komparatoren, die von $\operatorname{OEM}(N = 2^t)$ +benötigt werden. + +\subsubsection{Das Odd-Even-Mergesort-Netzwerk} + +Das \emph{Odd-Even-Mergesort-Netzwerk} $\operatorname{OES}(n)$ besteht, --~wie +das \emph{bitonen Mergesort-Netzwerk}~-- rekursiv aus kleineren Varianten von +sich selbst und einem abschließenden \emph{Odd-Even-Mischer}. Die +effizientesten Sortiernetzwerke in Bezuf auf Komparator- und Schichtzahl +entstehen, wenn die Anzahl der Leitungen jeweils halbiert wird. Somit besteht +$\operatorname{OES}(n)$ aus +$\operatorname{OES}\left(\left\lceil\frac{n}{2}\right\rceil\right)$, +$\operatorname{OES}\left(\left\lfloor\frac{n}{2}\right\rfloor\right)$ +und $\operatorname{OEM}\left(\left\lceil\frac{n}{2}\right\rceil, +\left\lfloor\frac{n}{2}\right\rfloor\right)$. Die Rekursion endet mit +$\operatorname{OES}(1)$ und $\operatorname{OES}(0)$, die als leere +Komparatornetzwerke definiert sind. + +\begin{figure} + \begin{center} + \input{images/oe-mergesort-8.tex} + \end{center} + \caption{Das {\em Odd-Even-Mergesort-Netzwerk} für acht Eingänge. Markiert + sind die Instanzen von $\operatorname{OES}(4)$ (rot), die beiden + \emph{Odd-Even-Mischer} $\operatorname{OEM}(4)$ für gerade und ungerade + Leitungen (blau) und die im ersten Rekursionsschritt hinzugefügten + Komparatoren zwischen benachbarten Leitungen (grün).} + \label{fig:odd-even-mergesort-08} +\end{figure} + +In Abbildung~\ref{fig:odd-even-mergesort-08} ist das konkrete Sortiernetzwerk +$\operatorname{OES}(8)$ zu sehen. Rot markiert sind die beiden rekursiven +Instanzen $\operatorname{OES}(4)$. Die blauen und der grüne Block stellen den +\emph{Odd-Even-Mischer} für acht Leitungen dar: Die beiden blauen Blöcke sind +die rekursiven Instanzen von $\operatorname{OEM}(4)$, der grüne Block markiert +die Komparatoren, die in ersten Rekursionsschritt hinzugefügt werden. + +Im Allgemeinen ist die Anzahl der Komparatoren, die vom +\emph{Odd-Even-Mergesort-Netzwerk} verwendet wird, $k(n)$, direkt aus der +Definition beziehungsweise der Konstruktionsanleitung abzulesen: +\begin{displaymath} + k(n) = k\left(\left\lceil\frac{n}{2}\right\rceil\right) + + k\left(\left\lfloor\frac{n}{2}\right\rfloor\right) + + K\left(\left\lceil\frac{n}{2}\right\rceil, \left\lfloor\frac{n}{2}\right\rfloor\right) +\end{displaymath} +Eine geschlossene Form dieser Formel ist schon alleine deshalb schwierig, weil +sie für $K(n,m)$ schwierig anzugeben ist. Es ist allerdings bekannt, dass +$k(n)$ in $\mathcal{O}\left(n \left(\log (n)\right)^2\right)$ enthalten ist. + +Für den wichtigen Spezialfall, dass $n = 2^t$ eine Zweierpotenz ist, kann die +Anzahl der Komparatoren wieder explizit angegeben werden. \textit{Kenneth +Batcher} zeigt in~\cite{B1968}, dass in diesem Fall +\begin{displaymath} + k(n = 2^t) = \frac{1}{4} n \left(\log (n)\right)^2 - \frac{1}{4}n\log(n) + n - 1 +\end{displaymath} +gilt. + +% gnuplot: +% oem(n,m) = ((n*m) <= 1) ? (n*m) : oem(ceil(.5*n), ceil(.5*m)) + oem(floor(.5*n), floor(.5*m)) + floor(.5*(n+m-1.0)) +% oem1(n) = oem(ceil(.5*n),floor(.5*n)) +% oes(n) = (n <= 1.0) ? 0 : oes(ceil(0.5*n)) + oes(floor(0.5*n)) + oem1(n) + +%\begin{itemize} +%\item Pairwise sorting-network +%\end{itemize} + +\newpage +\section{Transformation von Sortiernetzwerken} + +\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. Statt dem typischen "`Treppenmuster"' sind abwechselnd das Treppen- +und das Trichtermuster zu sehen. + +\subsection{Zwei Netzwerke kombinieren} -Das habe ich gemacht, bzw. darum habe ich das gemacht. +Um Sortiernetzwerke als \emph{Individuen} evolutionärer Algorithmen verwenden +zu können, muss es möglich sein, zwei Sortiernetzwerke zu einem neuen +Sortiernetzwerk zusammenzufassen. -\subsection{Einleitung}\label{sect:introduction} +Wir haben diese Technik in den vorangegangen Abschnitten bereits verwendet, +beispielsweise um zwei \emph{bitone Mergesort-Netzwerke} mit jeweils der +halben Leitungszahl, $\operatorname{BS}\left(\frac{n}{2}\right)$, zu einem +einzigen Sortiernetzwerk $\operatorname{BS}(n)$ zu kombinieren. Auch das +\emph{Odd-Even-Mergesort-Netzwerk} $\operatorname{OES}(n)$ wurde auf diese Art +und Weise rekursiv aufgebaut. -Das sind Sortiernetzwerke und so. +Die vorgestellten \emph{Mischer} erwarten als Eingabe zwei bereits sortierte +Folgen. \emph{Wie} diese Folgen sortiert wurden, ist unerheblich. Entsprechend +können wir beliebige Sortiernetzwerke einsetzen, um die beiden Eingabefolgen +zu sortieren, und die Ausgaben mit einem der beschriebenen Mischer +zusammenfügen. -\section{Die Algorithmen} +Beispielsweise kann man die Ausgabe von zwei \emph{bitonen +Mergesort-Netzwerken} $\operatorname{BS}(8)$ mit je acht Leitungen mit dem +\emph{Odd-Even-Merge} $\operatorname{OEM(8,8)}$ zu einer sortierten +Gesamtfolge zusammenfügen. Das resultierende Sortiernetzwerk besitzt +73~Komparatoren (zum Vergleich: $\operatorname{BS}(16)$ benötigt +80~Komparatoren, $\operatorname{OES}(16)$ nur 63). + +Verbesserungen in der Anzahl der benötigten Komparatoren beziehungsweise der +Schichten eines „kleinen“ Sortiernetzwerks übertragen sich direkt auf das +resultierende Gesamtnetzwerk. Das \emph{Odd-Even-Mergesort-Netzwerk} +$\operatorname{OES}(9)$ benötigt beispielsweise 26~Komparatoren, die in in +neun Schichten angeordnet sind. Es sind allerdings Sortiernetzwerke mit neun +Eingängen bekannt, die lediglich 25~Komparatoren in sieben Schichten +benötigen. Kombiniert man zwei dieser Netzwerke mit dem +\emph{Odd-Even-Mischer} erhält man ein Sortiernetzwerk mit 18~Eingängen, das +80~Komparatoren in 11~Schichten benötigt -- $\operatorname{OES}(18)$ benötigt +82~Komparatoren in 13~Schichten. Damit ist das resultierende Netzwerk so +schnell wie das Sortiernetzwerk mit 18~Eingängen, das \textit{Sherenaz~W. +Al-Haj Baddar} und \textit{Kenneth~E. Batcher} in ihrer Arbeit „An 11-Step +Sorting Network for 18~Elements“~\cite{BB2009} vorstellen, benötigt aber +6~Komparatoren weniger. + +% 9 9 +% 9 18 +% 9 27 +% 9 36 +% 9 45 +% 8 53 +% 8 61 +% 7 68 +% 7 75 +% 6 81 +% 5 86 + +Das Zusammenfassen von zwei Sortiernetzwerken durch Hintereinanderausführung +ist nicht sinnvoll: Da die Ausgabe des ersten Sortiernetzwerks bereits +sortiert ist, ist das zweite Sortiernetzwerk überflüssig. Eine +Aneinanderreihung der Art „die ersten $x$~Schichten des einen, dann die +letzten $y$~Schichten des anderen Sortiernetzwerks“ zerstören im Allgemeinen +die Sortiereigenschaft. Die Sortiereigenschaft des resultierenden +Komparatornetzwerks müsste überprüft werden, was nach heutigem Wissensstand +nur mit exponentiellem Aufwand möglich ist. + +%\begin{itemize} +%\item Mit dem Bitonic-Merge +%\item Mit dem Odd-Even-Merge +%\item Nach dem Pairwise sorting-network Schema. +%\end{itemize} + +\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 +„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}. + +\begin{figure} + \centering + \subfigure[foo]{\input{images/oe-transposition-cut0.tex}\label{fig:oe-transposition-cut0}} + \subfigure[bar]{\input{images/oe-transposition-cut1.tex}\label{fig:oe-transposition-cut1}} + \subfigure[baz]{\input{images/oe-transposition-cut2.tex}\label{fig:oe-transposition-cut2}} + \subfigure[qux]{\input{images/oe-transposition-cut3.tex}\label{fig:oe-transposition-cut3}} + \caption{Eine Leitung wird aus dem + \emph{Odd-Even-Transpositionsort}-Netzwerk $\operatorname{OET}(8)$ entfernt: + Auf der rot markierten Leitung wird $\infty$ angelegt. Da der Wert bei jedem + Komparator am unteren Ende herauskommt, ist der Pfad fest vorgegeben. Da die + restlichen Werte trotzdem noch richtig sortiert werden müssen, kann dieser + Pfad herausgetrennt werden. In der letzten Abbildung ist + $\operatorname{OET}(7)$ markiert.} + \label{fig:oe-transposition-cut} +\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 +Darstellung ergibt. Ausserdem ist das +{\em Odd-Even-Transpositionsort-Netzwerk} für sieben Werte markiert. Der +zusätzliche Komparator vor dem $\textrm{OET}(7)$ hat keinen Einfluss auf die +Ausgabe und kann entfernt werden. + +\subsubsection{Anzahl möglicher und unterschiedlicher Schnittmuster} +\label{sect:anzahl_schnittmuster} + +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. Das Anwenden mehrerer Minimum- und +Maximum-Schnitte bezeichnen wir als \emph{Schnittmuster}. + +Zwei Schnittmuster heißen \emph{äquivalent} bezüglich~$S$, wenn ihre Anwendung +auf das Sortiernetzwerk~$S$ das selbe Ergebnis liefert. Ansonsten heißen die +Schnittmuster \emph{unterschiedlich} bezüglich~$S$. + +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} +\emph{mögliche} Schnittmuster. Diese Schnittmuster 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 Schnittmuster +reduziert, die Menge der so erzeugbaren 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 für die Anzahl der Schnittmuster: +\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 Schnittmuster 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, ist ein Schmittmuster mit +16~Schnitten notwendig, für das 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. + +Die Anzahl der \emph{unterschiedlichen} Schnittmuster ist allerdings kleiner +als die Anzahl der möglichen Schnittmuster. Für jeden Komparator auf der +ersten Stufe gibt es neun verschiedene Eingangskonfigurationen: Für beide +Eingänge gibt es drei mögliche Eingangswerte, Minimum, Maximum und +unspezifiziert. Es gibt drei Konfigurationen, bei denen an beiden Eingängen +der gleiche Wert angelegt wird, und sechs Konfigurationen, bei denen sich die +Werte unterscheiden. + +Bei diesen letzten sechs Konfigurationen werden je zwei auf das selbe +Ausgangmuster abgebildet, weil die Position des Minimums beziehungsweise des +Maximums durch den Komparator vorgegeben wird. Das heißt, dass die neun +unterschiedlichen Eingangsmuster nur sechs unterschiedliche Ausgangsmuster +erzeugen. In der zweiten und allen folgenden Schichten kann man diesen +Unterschied nicht mehr erkennen. In allen sechs Fällen, in denen sich die +Eingänge unterscheiden, wird anschließend der Komparator entfernt, so dass +sich die Resultate auch in der ersten Schicht nicht unterscheiden. + +\todo{Mit \textit{Approximate Counting} könnte man die Anzahl der +\emph{unterschiedlichen} Schnittmuster genauer abschätzen.} + +\newpage +\section{Der \textsc{SN-Evolution}-Algorithmus} + +Um einen evolutionären Algorithmus für Sortiernetzwerke zu entwickeln, werden +die vorgestellten Methoden kombiniert. + +\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, +die interessant sind: +\begin{itemize} + \item Möglichst wenige Komparatoren ("`klein"') + \item Möglichst wenige Schichten ("`schnell"') +\end{itemize} + +Diese Ziele führen im Allgemeinen zu unterschiedlichen Netzwerken. Das +kleinste bekannte Sortiernetzwerk für 16~Eingänge besteht aus 60~Komparatoren +in 10~Schichten. Das schnellste Netzwerk besteht aus 61~Komparatoren in nur +9~Schichten. + +Eine Gütefunktion, die die beiden Ziele "`klein"' und "`schnell"' +berücksichtigen kann, hat die folgende allgemeine Form: +\begin{equation} + \operatorname{Guete}(S) = w_{\mathrm{Basis}} + + w_{\mathrm{Komparatoren}} \cdot \left|S\right|_\mathrm{Komparatoren} + + w_{\mathrm{Schichten}} \cdot \left|S\right|_\mathrm{Schichten} +\end{equation} +Die Parameter $w_{\mathrm{Komparatoren}}$ und $w_{\mathrm{Schichten}}$ dienen +dabei der Festlegung des Optimierungsziels. Wenn einer der beiden Parameter +gleich Null ist, wird nur das jeweils andere Ziel verfolgt. Sind beide +Parameter gleich Null, werden alle Netzwerke mit der gleich Güte bewertet -- +jegliche Ergebnisse sind dann rein zufälliger Natur. + +Mit dem Parameter $w_{\mathrm{Basis}}$ kann auf die Selektion Einfluss +genommen werden. Ist er groß, wird der relative Unterschied der Güten +verschiedener Netzwerke kleiner, was die {\em Exploration}, das Absuchen des +gesamten Lösungsraums, begünstigt. Wählt man $w_{\mathrm{Basis}}$ hingegen +klein, in Abhängigkeit von den anderen beiden Parametern sind auch negative +Werte möglich, werden die relativen Unterschiede groß. Dadurch wird die {\em +Exploitation}, das Finden lokaler Optima, bevorzugt. + +\subsection{Selektion} ... -\subsection{Ausblick} +\subsection{Rekombination} + +Bei der Rekombination werden zwei Individuen --~hier Sortiernetzwerke~-- zu +einer neuen Lösung kombiniert. Dazu verwenden wir einen Mischer, zum Beispiel +den {\em bitonen Mischer} (Abschnitt~\ref{sect:der_bitone_mischer}) oder den +{\em Odd-Even-Mischer} (Abschnitt~\ref{sect:der_odd_even_mischer}), um die +beiden Netzwerke zu einem Netzwerk mit $2n$~Leitungen zusammenzufügen. +Anschließend entfernen wir zufällig $n$~Leitungen wie in +Abschnitt~\ref{sect:leitungen_entfernen} beschrieben. + +Dieses Verfahren hat den großen Vorteil, dass es die Sortiereigenschaft +erhält. + +\subsection{Mutation} + +Zu einem vollständigen evolutionären Algorithmus gehört außerdem eine Mutation +--~eine zufällige Veränderung einer Lösung. Leider ist es nicht möglich ein +Sortiernetzwerk zufällig zu verändern aber trotzdem die Sortiereigenschaft zu +erhalten. Selbst das \emph{Hinzufügen} eines zufälligen Komparators kann diese +Eigenschaft zerstören. + +Nach einer Mutation müsste man überprüfen, ob das neue Komparatornetzwerk die +Sortiereigenschaft noch besitzt. Nach heutigem Wissenstand ist diese +Überprüfung nur mit exponentiellem Aufwand möglich, etwa durch das +Ausprobieren aller $2^n$~Bitmuster. -So geht's jetzt weiter. +Um das Potenzial einer Mutation abzuschätzen habe ich in den evolutionären +Algorithmus eine Überprüfung eingebaut. Unmittelbar vor dem Einfügen in die +Population überprüft das Programm die Notwendigkeit jedes einzelnen +Komparators. Dazu wurde nacheinander jeder Komparator entfernt und überprüft, +ob das verbleibende Netzwerk die Sortiereigenschaft noch besitzt. -%\bibliography{references} -%\bibliographystyle{plain} +\begin{itemize} +\item Güte von Sortiernetzwerken (Anzahl der Komparatoren, Anzahl der +Schichten, kobiniert) +\item Rekombination: Merge Anhängen und Leitungen entfernen. +\end{itemize} + +Ein Beispielnetzwerk, das von dem Algorithmus gefunden wird, zeigt +Abbildung~\ref{fig:evolutionary_08}. + +\begin{figure} +\begin{center} +\input{images/evolutionary-08.tex} +\end{center} +\caption{Ein mit dem evolutionären Algorithmus erzeugtes Sortiernetzwerk mit +acht Eingängen. Es besteht aus 19~Komparatoren in 6~Schichten.} +\label{fig:evolutionary_08} +\end{figure} + +\begin{figure} +\begin{center} +\input{images/08-e2-1237993371.tex} +\end{center} +\caption{{\tt images/08-e2-1237993371.tex}: 19~Komparatoren in 6~Schichten} +\label{fig:08-e2-1237993371} +\end{figure} + +\begin{figure} +\begin{center} +\input{images/09-e2-1237997073.tex} +\end{center} +\caption{{\tt images/09-e2-1237997073.tex}: 25~Komparatoren in 8~Schichten} +\label{fig:09-e2-1237997073} +\end{figure} + +\begin{figure} +\begin{center} +\input{images/09-e2-1237999719.tex} +\end{center} +\caption{{\tt images/09-e2-1237999719.tex}: 25~Komparatoren in 7~Schichten} +\label{fig:09-e2-1237999719} +\end{figure} + +\begin{figure} +\begin{center} +\input{images/10-e2-1239014566.tex} +\end{center} +\caption{{\tt images/10-e2-1239014566.tex}: 29~Komparatoren in 8~Schichten} +\label{fig:10-e2-1239014566} +\end{figure} + +\subsection{Güte} + +\begin{itemize} +\item So gut kann man mindestens werden {\em ($\rightarrow$ Bitonic-Mergesort, vermute ich)}. +\item Wie gut die Netzwerke werden, hängt stark vom verwendeten \em{Mischer} ab. +\item Ggf. Abschnitt „Shmoo-Äquivalenz“ kürzen und hier einbauen. +\end{itemize} + +%\input{shmoo-aequivalenz.tex} + +\newpage +\section{Der \textsc{SN-Evolution-Cut}-Algorithmus} +\label{sect:sn-evolution-cut} + +Das Programm \textsc{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}. Mit diesem +Algorithmus wurden zu einer Reihe von „interessanten“ Netzwerken möglichst +gute Schnittmuster gesucht. + +Der \textsc{SN-Evolution-Cut}-Algorithmus verwendet die \emph{Schnittmuster} +als Individuen. Um zwei Individuen zu rekombinieren werden die ersten +$r$~Schnitte des einen Schnittmusters verwendet und die letzten +${c-r}$~Schnitte des zweiten Schmittmusters. $r$ ist eine Zufallsvariable mit +$0 \leqq r \leqq c$. + +Die Mutation setzt entweder die Leitungs-Nummer eines Schnitts~$i$ zufällig +auf einen neuen Wert $l$ mit $0 \leqq l \le n-i$ oder invertiert die +Schnitt-Richtung. + +\subsection{Versuche mit dem bitonen Mergesort-Netzwerk} + +In \cite{MW2010} zeigen \textit{Moritz Mühlenthaler} und \textit{Rolf Wanka}, +wie man einen bitonen Mischer, der nach Batchers Methode konstruiert wurde, +durch systematisches Entfernen von Leitungen in einen ebenfalls bitonen +Mischer mit der Hälfte der Leitungen transformiert. Diese alternativen Mischer +sparen im Vergleich zu den Mischern, die nach Batchers Methode konstruiert +werden, Komparatoren ein. + +Beispeilsweise geben \textit{Mühlenthaler} und \textit{Wanka} ein +Sortiernetzwerk mit 16~Eingängen an, das mithilfe der alternativen Mischer +konstruiert wurde. Dieses Sortiernetzwerk benötigt 68~Komparatoren, 12~weniger +als das bitone Mergesort-Netzwerk nach Batchers Methode. Gegenüber Batchers +Methode sparen so konstruierte Sortiernetzwerke ${\frac{1}{4}n(\log n - 1)}$ +Komparatoren ein. + +\begin{figure} + \begin{center} + \input{images/16-ec-from-bs32.tex} + \end{center} + \caption{Sortiernetzwerk mit 16~Leitungen und 68~Komparatoren in + 10~Schichten. Das Netzwerk wurde von dem Algorithmus + \textsc{SN-Evolution-Cut} aus dem \emph{bitonen Mergesort-Netzwerk} + $\operatorname{BS}(32)$ durch 16~Schnitte erzeugt.} + \label{fig:16-ec-from-bs32} +\end{figure} + +\begin{figure} + \begin{center} + \input{images/16-ec-from-bs32-normalized.tex} + \end{center} + \caption{Sortiernetzwerk mit 16~Leitungen und 68~Komparatoren in + 10~Schichten. Das Netzwerk wurde von dem Algorithmus + \textsc{SN-Evolution-Cut} aus dem bitonen Mergesort-Netzwerk + $\operatorname{BS}(32)$ durch 16~Schnitte erzeugt.} + \label{fig:16-ec-from-bs32-normalized} +\end{figure} + +Startet man {\sc SN-Evolution-Cut} mit dem bitonen Mergesort-Netzwerk +$\operatorname{BS}(32)$ und der Vorgabe 16~Leitungen zu entfernen, liefert der +Algorithmus Sortiernetzwerke, die ebenfalls aus 68~Komparatoren bestehen. Ein +16-Sortiernetzwerk, das auf diese Weise generiert wurde, ist in den +Abbildungen~\ref{fig:16-ec-from-bs32} und~\ref{fig:16-ec-from-bs32-normalized} +zu sehen. Abbildung~\ref{fig:16-ec-from-bs32} zeigt $\operatorname{BS}(32)$ +und das +${\operatorname{MIN}(0,5,9,11,15,17,20,22,26,29,30)}$-${\operatorname{MAX}(2,4,13,19,24)}$-Schnittmuster, +das durch \textsc{SN-Evolution-Cut} gefunden wurde. +Abbildung~\ref{fig:16-ec-from-bs32-normalized} zeigt das 16-Sortiernetzwerk +nachdem das Schnittmuster angewandt und das Netzwerk normalisiert wurde. Eine +Ähnlichkeit zu $\operatorname{BS}(32)$ oder $\operatorname{BS}(16)$ ist in +diesem Netzwerk nicht mehr erkennbar -- insbesondere die ersten Schichten des +Netzwerks scheinen rein zufällig zu sein. + +\begin{figure} + % 0:MAX 1:MAX 4:MIN 6:MAX 9:MAX 11:MAX 14:MIN 15:MAX 18:MAX 19:MAX 21:MAX + % 23:MIN 24:MAX 25:MAX 30:MIN 31:MIN 32:MAX 34:MAX 36:MIN 37:MAX 40:MAX + % 43:MAX 46:MIN 47:MAX 48:MAX 49:MAX 54:MIN 55:MAX 56:MAX 58:MIN 60:MAX + % 63:MAX + \begin{center} + \input{images/32-ec-from-bs64.tex} + \end{center} + \caption{Sortiernetzwerk mit 32~Leitungen und 206~Komparatoren in + 15~Schichten. Das Netzwerk wurde von dem Algorithmus + \textsc{SN-Evolution-Cut} aus dem bitonen Mergesort-Netzwerk + $\operatorname{BS}(64)$ durch 32~Schnitte erzeugt. Das zugehörige + Schnittmuster ist + $\operatorname{MIN}(4, 14, 23, 30, 31, 36, 46, 54, 58)$, + $\operatorname{MAX}(0, 1, 6, 9, 11, 15, 18, 19, 21, 24, 25, 32, 34, 37, + 40, 43, 47, 48, 49, 55, 56, 60, 63)$.} + \label{fig:32-ec-from-bs64} +\end{figure} + +Das Ergebnis von \textit{Mühlenthaler} von \textit{Wanka}, die den bitonen +Mischer optimiert und anschließend aus diesen Mischern ein Sortiernetzwerk +konstruiert haben, kann demnach auch erreicht werden, wenn +$\operatorname{BS}(32)$ auf ein 16-Sortiernetzwerk reduziert wird. Bei anderen +Größen, beispielsweise wenn man $\operatorname{BS}(64)$ auf ein +32-Sortiernetzwerk reduziert, kann das Ergebnis sogar noch übertroffen werden, +wie in Abbildung~\ref{fig:32-ec-from-bs64} zu sehen: Ein nach Batchers Methode +konstruiertes Sortiernetzwerk benötigt 240~Komparatoren, ein aus den +optimierten Mischern aufgebautes Netzwerk verbessert die Kosten auf +208~Komparatoren. Das in Abbildung~\ref{fig:32-ec-from-bs64} dargestellte +Sortiernetzwerk benötigt lediglich 206~Komparatoren. Die Komparatoren aller +dieser Netzwerke können in 15~Schichten angeordnet werden, so dass die +Verzögerung dieser Sortiernetzwerke gleich ist. + +Leider sind die Schnittmuster, die \textsc{SN-Evolution-Cut} ausgibt, sehr +unregelmäßig. Bisher ist es nicht gelungen eine Konstruktionsanweisung für +gute Schnittmuster anzugeben. + +Entscheidend für das Ergebnis eines Schnittmusters scheint beim bitonen +Mergesort-Netzwerk die Aufteilung der Minimum- und Maximumschnitte zu sein. +Von Hundert 16-Schnittmustern für $\operatorname{BS}(32)$, die in +Sortiernetzwerken mit 68~Komparatoren in 10~Schichten resultieren, hatten 73 +ein Verhältnis von $5/11$, 13 hatten ein Verhältnis von $4/12$ und 14 hatten +ein Verhältnis von $3/13$ Minimum- beziehungsweise Maximumschnitten. Da sich +die Schnittmuster aufgrund der Symmetrie des bitonen Mergesort-Netzwerks +leicht invertieren lassen, werden der Fall, dass es mehr Minimumschnitte, und +der Fall, dass es mehr Maximumschnitte gibt, nicht unterschieden. + +Dass die Ergebnisse von \textsc{SN-Evolution-Cut} keine erkennbare Struktur +haben, ist jedoch kein Eigenschaft des Algorithmus, sondern hängt insbesondere +von der Eingabe ab. Wird \textsc{SN-Evolution-Cut} beispielsweise mit dem +\emph{Odd-Even-Transpositionsort-Netzwerk} $\operatorname{OET}(n)$ und +$m$~Schnitten gestartet, so ist das beste Ergebnis immer das +$\operatorname{OET}(n-m)$-Netzwerk. + +\begin{figure} + \begin{center} + \input{images/16-ec-from-ps32.tex} + \end{center} + \caption{Sortiernetzwerk mit 16~Leitungen und 63~Komparatoren in + 10~Schichten. Das Netzwerk wurde von dem Algorithmus + \textsc{SN-Evolution-Cut} aus dem \emph{Pairwise-Sorting-Netzwerk} + $\operatorname{PS}(32)$ durch 16~Schnitte erzeugt.} + \label{fig:16-ec-from-ps32} +\end{figure} + +\subsection{Versuche mit dem Pairwise-Sorting-Netzwerk} + +Anders verhält sich das \emph{Pairwise-Sorting-Netzwerk} +$\operatorname{PS}(n)$, das \textit{Ian Parberry} in seiner Arbeit „The +Pairwise Sorting Network“ \cite{P1992} definiert. Startet man +\textsc{SN-Evolution-Cut} mit $\operatorname{PS}(32)$ und der Vorgabe, +16~Leitungen zu entfernen, erhält man ein Sortiernetzwerk, dass die gleiche +Anzahl an Komparatoren und Schichten hat wie $\operatorname{PS}(16)$ und +$\operatorname{OES}(16)$. Eines dieser Sortiernetzwerke ist in +Abbildung~\ref{fig:16-ec-from-ps32} dargestellt. + +Obwohl das \emph{Pairwise-Sorting-Netzwerk} den \emph{Odd-Even-Mischer} nicht +einsetzt und auch nicht auf einem Mischer basiert, ist der +$\operatorname{OEM}(8,8)$ im Sortiernetzwerk in +Abbildung~\ref{fig:16-ec-from-ps32} eindeutig erkennbar (Schichten~7--10). In +den Schichten~1--6 erkennt man zwei unabhängige Sortiernetzerke, die +strukturell identisch zu $\operatorname{PS}(8)$ sind -- lediglich die +Schichten~1 und~2 sowie 4~und~5 sind vertauscht. + +\begin{displaymath} +\textit{Eingang}_i = \left\{ \begin{array}{rl} + -\infty & \quad \textrm{falls } i \operatorname{mod} 8 \in \{0, 6\} \\ + \infty & \quad \textrm{falls } i \operatorname{mod} 8 \in \{2, 4\} \\ + ? & \quad \mathrm{sonst} + \end{array} \right. +\end{displaymath} + +\begin{figure} + \begin{center} + \input{images/32-pairwise-cut-16-pairwise.tex} + \end{center} + \caption{PS(32) mit 16 Schnitten zu PS(16).} + \label{fig:ps16-from-ps32} +\end{figure} + +\begin{figure} + \begin{center} + \input{images/16-pairwise.tex} + \end{center} + \caption{Das $\operatorname{PS}(16)$-Sortiernetzwerk mit 8~Schnitten + ($\operatorname{MIN}(0,2,4,6), \operatorname{MAX}(9,11,13,15)$). Das + resultierende 8-Sortiernetzwerk ist $\operatorname{OES}(8)$.} + \label{fig:16-pairwise} +\end{figure} + +Wendet man \textsc{SN-Evolution-Cut} auf $\operatorname{PS}(16)$ an, so kann +man $\operatorname{OES}(8)$ erhalten. + +\subsection{Versuche mit dem Odd-Even-Mergesort-Netzwerk} + +\todo{Schreibe noch etwas zum Odd-Even-Mergesort-Netzwerk.} + +\begin{itemize} + \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? Oder andersrum: Wieviele + unterschiedliche Netzwerke kann ich erhalten? Wieviele Nachfolger hat ein + Netzwerk / Knoten in der Markov-Kette? + \item Abschnitt „Optimierung der Schnitte“ hier einbauen. +\end{itemize} + +\newpage +\section{Der \textsc{SN-Markov}-Algorithmus} + +Der evolutionäre \textsc{SN-Evolution}-Algorithmus aus dem vorherigen +Abschnitt verwendete immer zwei zufällige Sortiernetzwerke („Individuen“) aus +einer Population. Da die beiden „Eltern“ zufällig und unabhängig voneinander +ausgewählt werden, kann es vorkommen, dass das selbe Sortiernetzwerk zweimal +verwendet und mit sich selbst kombiniert wird. + +Macht man diesen Spezialfall zum Regelfall, indem man \emph{immer} das +aktuelle Netzwerk mit sich selbst kombiniert und anschließend die Hälfte aller +Leitungen eliminiert, lassen sich einige interessante Beobachtungen anstellen. +Netzwerke, die aus einem Netzwerk $S_0$ durch die beschriebene Kombination von +$S_0$ mit sich selbst und anschließendem Eliminieren der Hälfte der Leitungen +hervorgehen können, heißen \emph{Nachfolger} von $S_0$. + +Beim beschriebenen Vorgehen kann man die Sortiernetzwerke als Knoten in einem +gerichteten Graphen betrachten. Zwei Knoten $V_0$ und $V_1$, die zwei +Sortiernetzwerke $S_0$ und $S_1$ repräsentieren, sind genau dann mit einer +Kante ${E_{0,1} = (V_0, V_1)}$ verbunden, wenn $S_1$ ein \emph{Nachfolger} von $S_0$ +ist, das heißt dass man $S_1$ durch die Rekombination von $S_0$ mit sich +selbst erzeugen kann. + +Wie in Abschnitt~\ref{sect:anzahl_schnittmuster} beschrieben ist die Anzahl +(unterschiedlichen) Schnittmuster und damit die Anzahl der Nachfolger sehr +groß. Wenn $S_0$ ein Sortiernetzwerk mit $n$~Leitungen ist, so hat $S_0$ bis +zu +\begin{displaymath} + 2^n \cdot \left( \begin{array}{c} 2n \\ n \end{array} \right) +\end{displaymath} +Nachfolger. + +Der Algorithmus {\sc SN-Markov} legt auf diesem Graph einen zufälligen Weg +(englisch: \textit{random walk}) zurück. Er startet auf einem gegebenen +Sortiernetzwerk. Um von einem Sortiernetzwerk zum Nächsten zu gelangen +rekombiniert er das aktuelle Sortiernetzwerk mit sich selbst und erhält so +einen zufälligen Nachfolger. + +\begin{itemize} + \item $n \leftarrow \mathrm{Input}$ + \item \texttt{while} \textit{true} + \begin{itemize} + \item $n \leftarrow \operatorname{recombine} (n, n)$ + \end{itemize} +\end{itemize} + +\begin{itemize} + \item Beste erreichte Netzwerke (gleich zu \emph{OE-Mergesort}). + \item Anzahl der erreichbaren Sortiernetzwerke. + \item Anzahl der Komparatoren und Anzahl der Schichten der durchlaufenen + Netzwerke. (Abbildung~\ref{fig:markov-comparators-16}) +\end{itemize} + +\begin{figure} + \begin{center} + \includegraphics[viewport=0 0 360 216,width=15cm]{images/markov-comparators-12-pct.pdf} + \end{center} + \caption{Anzahl der Komparatoren von Sortiernetzwerken (mit 12~Leitungen), + die von {\sc SN-Markov} durchlaufen wurden. Grün eingezeichnet ist die + \emph{Gamma-Verteilung} $f(x - 40)$ mit $k = 8,267$ und $\theta = 0,962$.} + \label{fig:markov-comparators-12} +\end{figure} + +\begin{figure} + \begin{center} + \includegraphics[viewport=0 0 360 216,width=15cm]{images/markov-comparators-14-pct.pdf} + \end{center} + \caption{Anzahl der Komparatoren von Sortiernetzwerken (mit 14~Leitungen), + die von {\sc SN-Markov} durchlaufen wurden. Grün eingezeichnet ist die + \emph{Gamma-Verteilung} $f(x - 52)$ mit $k = 9,522$ und $\theta = 0,867$.} + \label{fig:markov-comparators-14} +\end{figure} + +\begin{figure} + \begin{center} + \includegraphics[viewport=0 0 360 216,width=15cm]{images/markov-comparators-16-pct.pdf} + \end{center} + \caption{Anzahl der Komparatoren von Sortiernetzwerken (mit 16~Leitungen), + die von {\sc SN-Markov} durchlaufen wurden. Grün eingezeichnet ist die + \emph{Gamma-Verteilung} $f(x - 62)$ mit $k = 17,939$ und $\theta = 1,091$.} + \label{fig:markov-comparators-16} +\end{figure} + +\newpage +\section{Empirische Beobachtungen} + +\begin{itemize} +\item So schnell konvergiert der Algorithmus. +\item $\ldots$ +\end{itemize} + +\newpage +\section{Ausblick} + +Das würde mir noch einfallen$\ldots$ + +\newpage +\bibliography{references} +\bibliographystyle{plain} %\listoffigures