Diverse kleine Verbesserungen.
[diplomarbeit.git] / diplomarbeit.tex
1 \documentclass[a4paper,11pt]{article}
2 \usepackage[utf8]{inputenc}
3 \usepackage{ngerman}
4 \usepackage{fancyhdr}
5 \usepackage{geometry}
6 \usepackage{amsmath, bbm}
7 \usepackage{amsfonts}
8 \usepackage{amssymb}
9 \usepackage{listings}
10 \usepackage{graphicx}
11 \usepackage{url}
12 %\usepackage{longtable}
13 \usepackage{subfigure}
14 \usepackage{icomma}
15
16 \usepackage{tikz}
17 \usetikzlibrary{arrows,shapes}
18
19 % Fuer mathtoolsset
20 \usepackage{mathtools}
21
22 \geometry{paper=a4paper,margin=30mm}
23
24 \pagestyle{fancy}
25 %\fancyhf{}
26 %\fancyhead[LO,LE]{"Ubung zu Computational Intelligence}
27 %\fancyhead[CO,CE]{2006-05-15}
28 %\fancyhead[RO,RE]{Florian Forster (2099894)}
29
30 \title{Evolutionäre Optimierung von Sortiernetzwerken}
31 \author{Florian Forster}
32 \date{\today}
33
34 \newcommand{\false}{\textsc{False}}
35 \newcommand{\true}{\textsc{True}}
36 \newcommand{\todo}[1]{{\bf TODO:} #1}
37 \newcommand{\qed}{\hfill $\Box$ \par \bigskip}
38
39 \newcommand{\oes}[1]{\ensuremath{\operatorname{OES}\left(#1\right)}}
40 \newcommand{\bs}[1]{\ensuremath{\operatorname{BS}\left(#1\right)}}
41 \newcommand{\ps}[1]{\ensuremath{\operatorname{PS}\left(#1\right)}}
42 \newcommand{\oem}[1]{\ensuremath{\operatorname{OEM}\left(#1\right)}}
43 \newcommand{\bm}[1]{\ensuremath{\operatorname{BM}\left(#1\right)}}
44 \newcommand{\oet}[1]{\ensuremath{\operatorname{OET}\left(#1\right)}}
45
46 \newtheorem{definition}{Definition}
47 \newtheorem{satz}{Satz}
48
49 % Zeige Nummern nur bei referenzierten Gleichungen an.
50 \mathtoolsset{showonlyrefs=true}
51
52 \begin{document}
53
54 \tikzstyle{vertex}   = [circle,draw,thick,fill=black,minimum size=5,inner sep=0pt]
55 \tikzstyle{comp}     = [draw,thick,-]
56 \tikzstyle{compup}   = [draw,thick,->]
57 \tikzstyle{compdown} = [draw,thick,<-]
58 \tikzstyle{edge}     = [draw,thick,-]
59 \tikzstyle{diredge}  = [draw,thick,->]
60 \tikzstyle{prob}     = [font=\tiny]
61
62 \tikzstyle{edge minimum} = [edge,color=blue!20]
63 \tikzstyle{edge maximum} = [edge,color=red!20]
64 \tikzstyle{vertex active minimum} = [vertex,color=blue!50, fill=blue!50]
65 \tikzstyle{vertex active maximum} = [vertex,color=red!50, fill=red!50]
66 \tikzstyle{vertex active minimum maximum} = [vertex,color=violet!50, fill=violet!50]
67 \tikzstyle{vertex inactive minimum} = [vertex,color=blue!20, fill=blue!20]
68 \tikzstyle{vertex inactive maximum} = [vertex,color=red!20, fill=red!20]
69 \tikzstyle{vertex inactive minimum maximum} = [vertex,color=black!20, fill=black!20]
70 \tikzstyle{comp active minimum} = [comp]
71 \tikzstyle{comp active maximum} = [comp]
72 \tikzstyle{comp active minimum maximum} = [comp,color=black!20]
73 \tikzstyle{comp inactive minimum} = [comp,color=blue!20]
74 \tikzstyle{comp inactive maximum} = [comp,color=red!20]
75 \tikzstyle{comp inactive minimum maximum} = [comp,color=black!20]
76
77 \tikzstyle{red box}   = [draw,-,color=red, top color=red!2,bottom color=red!10]
78 \tikzstyle{blue box}  = [draw,-,color=blue,top color=blue!2,bottom color=blue!10]
79 \tikzstyle{green box} = [draw,-,color=teal,top color=teal!2,bottom color=teal!10]
80 \tikzstyle{gray box}  = [draw,-,color=black, top color=black!2,bottom color=black!10]
81
82 \maketitle
83 \begin{abstract}
84 Sortiernetzwerke erweisen sich als sehr schwieriges Optimierungsproblem. Zwar
85 ist das Konzept leicht verständlich und schnell erklärt, effiziente und
86 schnelle Sortiernetzwerke zu finden oder zu konstruieren bleibt aber eine
87 Herausforderung.
88
89 Diese Arbeit verwendet „Schnitte“ oder „Leitungselimination“ und
90 Mischer-Netz\-werke, um evolutionäre Algorithmen anzugeben, deren Individuen
91 die Menge der gültigen Sortiernetzwerke nie verlassen. Bisherige Ansätze
92 bewegten sich in der Regel in der Menge aller Komparatornetzwerke und suchten
93 dort nach Sortiernetzwerken. Nach dem Vorstellen der zwei Algorithmen
94 \textsc{SN-Evolution} und \textsc{SN-Evolution-Cut} sowie einiger Ergebnisse,
95 die diese Algorithmen erzielen konnten, wird -- basierend auf dem
96 evolutionären Algorithmus \textsc{SN-Evolution} -- eine Markov-Kette für
97 Sortiernetzwerke angegeben.
98 \end{abstract}
99 \newpage
100
101 \tableofcontents
102
103 \newpage
104 \section{Motivation und Einleitung}
105
106 \subsection{Motivation}\label{sect:motivation}
107
108 \emph{Sortiernetzwerke} sind ein theoretisches Konstrukt, dass auch von
109 Personen ohne Zugang zum Thema beziehungsweise der theoretischen Informatik
110 schnell verstanden werden kann. Eine Einführung wird in
111 Abschnitt~\ref{sect:einleitung_sortiernetzwerke} gegeben. Nichtsdestotrotz ist
112 das Finden von Sortiernetzwerken sowie das Beweisen, dass ein
113 Komparatornetzwerk jede beliebige Eingabe sortiert, im Allgemeinen sehr
114 schwierig und nach heutigem Kenntnisstand nur mit exponentiellem Aufwand zu
115 bewältigen.
116
117 Einfacher ist der Korrektheitsbeweis bei konstruktiven Verfahren, da hier die
118 Konstruktionsvorschrift genutzt werden kann, um die Korrektheit für beliebige
119 Eingabegrößen zu beweisen. Im Abschnitt~\ref{sect:konstruktive_netzwerke}
120 geschieht dies beispielsweise für zwei von \emph{Kenneth~E. Batcher} 1968
121 gefundene Konstruktionsvorschriften.
122
123 Um effiziente und schnelle Sortiernetzwerke zu finden, wurden schon wiederholt
124 Computer und automatische Suchverfahren eingesetzt. Bisherige Ansätze
125 versuchen meist, in der Menge aller Komparatornetzwerke jene zu finden, die
126 die Sortiereigenschaft besitzen und aus wenigen Komparatoren bestehen. Die
127 Eigenschaft, jede Eingabepermutation zu sortieren, ist also ein
128 Optimierungsziel und nicht durch das Vorgehen gewährleistet. Dafür können
129 theoretisch alle Sortiernetzwerke durch diese Algorithmen gefunden werden --
130 genügend Laufzeit vorausgesetzt.
131
132 In dieser Arbeit werden Methoden verwendet, die die Menge der Sortiernetzwerke
133 nie verlassen, dafür aber auch nicht alle existierenden Sortiernetzwerke
134 erzeugen können. So muss für ein gefundenes Komparatornetzwerk nicht mehr
135 nachgewiesen werden, dass es jede beliebige Eingabe sortiert, weil diese
136 Eigenschaft durch das Verfahren sichergestellt ist.
137
138 \subsection{Einleitung}\label{sect:einleitung}
139
140 \subsubsection{Sortiernetzwerke}\label{sect:einleitung_sortiernetzwerke}
141
142 \emph{Komparatoren} sind die Bausteine, die \emph{Komparatornetzwerken}
143 zugrunde liegen. Sie haben zwei Eingänge über die sie zwei Zahlen erhalten
144 können und zwei Ausgänge, auf denen die Zahlen wieder ausgegeben werden. Dabei
145 sind die Ausgänge im Gegensatz zu den Eingängen unterscheidbar, da die größere
146 der beiden Zahlen wird immer auf dem einen, die kleinere der beiden Zahlen
147 immer auf dem anderen Ausgang ausgegeben wird.
148
149 Kombiniert man mehrere \emph{Komparatoren} miteinander, das heißt, dass die
150 Ausgänge eines Komparators mit Eingängen weiterer Komparatoren verbunden sind,
151 erhält man ein {\em Komparatornetzwerk}.
152
153 \begin{figure}
154 \begin{center}
155 \input{images/einfaches_komparatornetzwerk.tex}
156 \end{center}
157 \caption{Einfaches Komparatornetzwerk mit vier Ein- bzw. Ausgängen, bestehend
158 aus 5~Komparatoren.}
159 \label{fig:einfaches_komparatornetzwerk}
160 \end{figure}
161
162 Abbildung~\ref{fig:einfaches_komparatornetzwerk} zeigt ein einfaches
163 \emph{Komparatornetzwerk} aus fünf Komparatoren. Insgesamt gibt es vier
164 verschiedene Eingänge und vier Ausgänge. Die Ein- und Ausgänge werden durch
165 eine horizontale Linie dargestellt und als \emph{Leitung} bezeichnet. Die
166 \emph{Komparatoren} sind durch vertikale Pfeile dargestellt und verbinden je
167 zwei verschiedene \emph{Leitungen} miteinander. Die Verbindungsstellen von
168 \emph{Leitungen} und \emph{Komparatoren} sind zur besseren Übersichtlichkeit
169 durch schwarze Punkte symbolisiert.
170
171 Auf der linken Seite befinden sich die Eingänge. Hier wird eine Zahlenfolge in
172 das Netzwerk hinein gegeben. Jeder Komparator vergleicht die Zahlen „auf“ den
173 beiden Leitungen, die er verbindet. Nach einem Komparator befindet sich die
174 kleinere Zahl immer auf der Leitung, auf die der Pfeil zeigt, die größere Zahl
175 befindet sich auf der Leitung, auf der der Pfeil seinen Ursprung hat. Wenn in
176 einem Komparatornetzwerk alle Komparatoren in die gleiche Richtung zeigen --
177 die Konvention in dieser Arbeit ist, dass das Minimum auf der unteren Leitung
178 ausgegeben wird -- werden die Pfeile durch einfache Linien ersetzt. Zu diesen
179 sogenannten \emph{Standard-Netzwerken} siehe auch
180 Abschnitt~\ref{sect:normalisieren}.
181
182 Komparatoren, die \emph{unterschiedliche} Leitungen miteinander vergleichen,
183 können gleichzeitig angewendet werden. Das Beispiel in
184 Abbildung~\ref{fig:einfaches_komparatornetzwerk} verwendet diesen Umstand und
185 vergleicht die zwei oberen und die zwei unteren Leitungen gleichzeitig. Eine
186 Gruppe von Komparatoren, die gleichzeitig angewendet werden können, nennt man
187 eine \emph{Schicht} des Komparatornetzwerks. Die \emph{Geschwindigkeit} eines
188 Komparatornetzwerks ist gleichbedeutend mit der Anzahl der Schichten, in die
189 sich die Komparatoren mindestens gruppieren lassen, da sie die Anzahl der
190 benötigten parallelen Schritte darstellt.
191
192 \emph{Komparatornetzwerke}, die für \emph{jede} Eingabefolge eine Ausgabe
193 erzeugen, die der Sortierung der Eingabe entspricht, heißen
194 \emph{Sortiernetzwerke}. Das in
195 Abbildung~\ref{fig:einfaches_komparatornetzwerk} gezeigte Komparatornetzwerk
196 ist \emph{kein} Sortiernetzwerk: Die Eingabefolge ${(1, 2, 3, 4)}$ führt zur
197 Ausgabe ${(2, 1, 3, 4)}$ -- die bestehenden Sortierung wird also sogar
198 zerstört.
199
200 \begin{figure}
201   \begin{center}
202     \input{images/09-e2-c24-allbut1.tex}
203   \end{center}
204   \caption{Ein \emph{Komparatornetzwerk} mit neun Eingängen und
205   24~Komparatoren, die in 8~Schichten angeordnet sind. Das Netzwerk sortiert
206   alle Eingaben, bei denen das Minimum nicht auf dem mittleren Eingang liegt.}
207   \label{fig:09-e2-c24-allbut1}
208 \end{figure}
209 Zu beweisen, dass ein gegebenes Komparatornetzwerk die Sortiereigenschaft {\em
210 nicht} hat, ist mit einem gegebenen Gegenbeispiel einfach möglich. Das
211 Komparatornetzwerk wird auf das Gegenbeispiel angewendet und anschließend wird
212 überprüft, ob die Ausgabe sortiert ist. Ist sie es nicht heißt das, dass es
213 mindestens eine Eingabefolge gibt, die nicht sortiert wird. Entsprechend der
214 Definition handelt es sich bei dem \emph{Komparatornetzwerk} folglich
215 \emph{nicht} um ein \emph{Sortiernetzwerk}. Ein solches Gegenbeispiel für ein
216 gegebenes Komparatornetzwerk zu finden ist nach heutigem Kenntnisstand jedoch
217 nicht \emph{effizient}\footnote{In diesem Zusammenhang heißt \emph{effizient},
218 dass keine Algorithmen bekannt sind, die eine polynomielle Laufzeit (in
219 Abhängigkeit von der Eingabelänge) haben.} möglich.
220
221 Beispielsweise sortiert das im Rahmen dieser Arbeit entdeckte
222 Komparatornetzwerk in Abbildung~\ref{fig:09-e2-c24-allbut1} viele der 362.880
223 möglichen Eingabepermutationen. Mit dem Gegenbeispiel $(3, 5, 2, 1, 0, 7, 4,
224 8, 6)$ lässt sich jedoch leicht beweisen, dass das Komparatornetzwerk die
225 Sortiereigenschaft \emph{nicht} besitzt, da es in diesem Fall die Folge $(1,
226 0, 2, 3, 4, 5, 6, 7, 8)$ ausgibt.
227
228 Insgesamt gibt es $n!$~Permutationen von $n$~Elementen. Wenn ein
229 Komparatornetzwerk die Sortiereigenschaft besitzt, bildet es alle diese
230 Permutationen auf die sortierte Reihenfolge ab. Allerdings wächst $n!$
231 über-exponentiell schnell, so dass ein Ausprobieren aller möglichen
232 Permutationen schon bei 16~Leitungen praktisch nicht mehr zu bewerkstelligen
233 ist.\footnote{1.307.674.368.000 Permutationen}
234
235 \label{sect:0-1-prinzip}
236 Glücklicherweise reicht es aus, alle möglichen 0-1-Folgen zu überprüfen, wie
237 \textit{Donald~E. Knuth} in \cite{KNUTH} zeigt. Die Beweisidee ist folgende:
238 Angenommen ein Komparatornetzwerk sortiert alle 0-1-Folgen und es gibt eine
239 Permutation $E = (e_0, \dots, e_{n-1})$ beliebiger Zahlen, die nicht sortiert
240 wird. Die Ausgabefolge sei $A = (a_0, \dots, a_{n-1})$. Sei $i$ eine Position
241 in der Ausgabe, die die Sortierbedingung verletzt:
242 \begin{displaymath}
243   a_0 \leqq a_1 \leqq \dots \leqq a_{i-1} > a_i \dots
244 \end{displaymath}
245 Die Eingabe kann mittels
246 \begin{displaymath}
247   \hat{e}_j = \left\{
248     \begin{array}{cl}
249       0 & e_j \leqq a_i \\
250       1 & e_j > a_i
251     \end{array} \right.
252 \end{displaymath}
253 auf eine 0-1-Folge abgebildet werden, die entsprechen der Annahme vom
254 Komparatornetzwerk sortiert wird. Allerdings verändert diese Abbildung das
255 Verhalten jedes einzelnen Komparators nicht: Wenn bei der Permutation eine
256 Zahl größer als $a_i$ und eine Zahl kleiner oder gleich $a_i$ verglichen
257 wurden, liegen jetzt entsprechend eine Null und eine Eins an, die genauso
258 vertauscht werden oder nicht, wie das bei der Permutation der Fall war. Liegen
259 zwei Nullen oder zwei Einsen an, entsprechen sie zwei Zahlen kleiner als $a_i$
260 oder zwei Zahlen größer oder gleich $a_i$. Da im Fall der 0-1-Folge zwei
261 gleiche Zahlen am Komparator anliegen, dürfen wir davon ausgehen, dass sich
262 der Komparator so verhält, wie er sich bei der Permutation verhalten hat --
263 ohne das Ergebnis zu beeinflussen. Entsprechend kommen an den Ausgängen $i-1$
264 und $i$ eine Null und eine Eins in der falschen Reihenfolge an. Das steht im
265 Widerspruch zu der Annahme, dass alle 0-1-Folgen sortiert werden.
266
267 Im Gegensatz zum Überprüfen aller möglichen Permutationen, was der
268 Komplexitätsklasse
269 $\mathcal{O}\left(\sqrt{n}\left(\frac{n}{e}\right)^n\right)$ zuzuordnen ist,
270 ist das Überprüfen aller 0-1-Folgen „nur“ mit dem Aufwand $\mathcal{O}(2^n)$
271 verbunden. Entsprechend ist dieses Verfahren nicht \emph{effizient} -- ein
272 schnelleres Verfahren ist bisher allerdings nicht bekannt. Um zu überprüfen,
273 ob ein Komparatornetzwerk mit 16~Leitungen die Sortiereigenschaft besitzt,
274 sind mit dieser Methode nur 65.536 Tests notwendig -- eine Zahl, die für
275 aktuelle Prozessoren keine Herausforderung darstellt. Für die Überprüfung
276 eines Komparatornetzwerks mit 32~Leitungen sind jedoch bereits etwa
277 4,3~Milliarden Tests notwendig, die einen Rechner durchaus mehrere Minuten
278 beschäftigen.
279
280 \subsubsection{Evolutionäre Algorithmen}
281
282 Viele {\em kombinatorische Optimierungsprobleme} sind schwer zu lösen -- die
283 entsprechenden Entscheidungsprobleme liegen oft in der Komplexitätsklasse
284 $\mathcal{NP}$. Das heißt, dass keine Verfahren bekannt sind, diese Probleme
285 effizient exakt lösen. Sollte sich herausstellen, dass diese Probleme nicht
286 in der Komplexitätsklasse~$\mathcal{P}$ liegen, wäre eine Konsequenz, dass es
287 effiziente exakte Algorithmen für diese Probleme nicht gibt. Falls sich
288 hingegen herausstellt, dass diese Probleme in der
289 Komplexitätsklasse~\textit{P} liegen, gibt es effiziente Algorithmen. Es ist
290 jedoch wahrscheinlich, dass die Zeitkonstanten solcher Algorithmen sehr groß
291 sein würden, so dass der praktische Nutzen fraglich bleibt.
292
293 Aus diesem Grund besteht die Notwendigkeit einen Kompromiss einzugehen: Statt
294 die beziehungsweise eine der {\em optimalen} Lösungen als einzige Ausgabe des
295 Algorithmus zuzulassen, wird eine "`möglichst gute"' Lösung ausgegeben. Viele
296 dieser Optimierungsalgorithmen orientieren sich an Vorgängen in der Natur.
297 Beispielsweise imitieren die „Ameisenalgorithmen“ das Verhalten von Ameisen
298 auf der Futtersuche, um kurze Rundreisen auf Graphen zu berechnen.
299
300 Bei {\em Evolutionären Algorithmen} stand die Evolution pate. Die Grundidee
301 ist, bekannte Lösungen zu neuen -- unter Umständen besseren -- Lösungen zu
302 kombinieren. Dabei bedient man sich der in der Evolutionstheorie etablierten
303 Nomenklatur, beispielsweise werden konkrete Lösungen für ein Problem als {\em
304 Individuen} bezeichnet.
305
306 Die Vorgehensweise lässt sich abstrakt wie folgt beschreiben. Aus einer
307 bestehenden Lösungsmenge, der {\em Population}, werden zufällig Lösungen
308 ausgesucht {\em (Selektion)} und zu einer neuen Lösung kombiniert ({\em
309 Rekombination}). Unter Umständen wird die neue Lösung noch zufällig
310 verändert {\em (Mutation)}, bevor sie in die bestehende Lösungsmenge
311 eingefügt wird. Die verwendeten Wahrscheinlichkeiten, beispielsweise bei der
312 {\em Selektion}, sind dabei nicht zwangsläufig gleichverteilt -- üblicherweise
313 werden bessere Lösungen bevorzugt. Zur Bewertung dient die sogenannte {\em
314 Gütefunktion}.
315
316 Nicht alle Probleme eignen sich für diese Strategie: Zum einen muss es möglich
317 sein, eine initiale Population zur Verfügung zu stellen, da diese als Basis
318 aller weiteren Operationen dient. Das ist häufig keine große Einschränkung, da
319 es oft einfach ist {\em irgendeine} Lösung anzugeben. Die angegebenen
320 Algorithmen verwenden als einfache, initiale Lösung häufig das
321 \emph{Odd-Even-Transpositionsort}-Netzwerk, das in
322 Abschnitt~\ref{sect:odd_even_transpositionsort} beschrieben wird. Zum anderen
323 muss eine Methode für die Rekombination existieren. Das ist insbesondere dann
324 problematisch, wenn {\em Nebenbedingungen} eingehalten werden müssen. Die in
325 dieser Arbeit verwendeten Rekombinationsmethoden sind so gewählt, dass die
326 Nebenbedingungen nicht verletzt werden.
327
328 Beim Aussuchen von zufälligen Lösungen aus der Population, der
329 \emph{Selektion}, werden gute Lösungen bevorzugt. Wie sehr diese Lösungen
330 bevorzugt werden, hat einen starken Einfluss auf das Verhalten des
331 Algorithmus. Werden gute Lösungen stark bevorzugt, konvergiert der Algorithmus
332 schnell gegen ein (lokales) Optimum. Dieses \textit{Exploitation} (Englisch
333 für „Ausnutzung“) genannte Verhalten sorgt dafür, dass sich der Algorithmus
334 schnell auf eine Lösung festlegt und andere, möglicherweise bessere lokale
335 Optima nicht mehr findet. Werden gute Lösungen hingegen nur wenig bevorzugt,
336 erforscht der Algorithmus den Lösungsraum in viele Richtungen. Dieses
337 \textit{Exploration} (Englisch für „Erforschung“) genannte Verhalten sorgt
338 zwar dafür, dass der Algorithmus langsamer auf ein Optimum zusteuert, dafür
339 findet er aber in der Regel bessere Lösungen.
340
341 Die Parameter evolutionärer Algorithmen so einzustellen, dass sich ein guter
342 Mittelweg zwischen den beiden Extremen einstellt, ist eine Aufgabe, die sich
343 nur experimentell lösen lässt. Die genauen Parameter hängen nicht nur vom
344 eigentlichen Algorithmus, sondern auch vom konkreten Problem ab, so dass sich
345 beispielsweise bei der Optimierung von Sortiernetzwerken die Parameter
346 zwischen verschiedenen Leitungszahlen stark unterscheiden.
347
348 Die \textit{Exploration} kann von einem weiteren Mechanismus unterstützt
349 werden, der ebenfalls der Evolutionslehre entliehen ist, der \emph{Mutation}.
350 Dabei werden Lösungen zufällig verändert, so dass auch andere Lösungen „in der
351 Nähe“ von direkten Nachfolgern erreicht werden können. Das hilft insbesondere
352 bei der intensiven Suche in der Nähe eines lokalen Optimums aber auch beim
353 „Ausbrechen“ aus lokalen Optima und finden noch besserer Lösungen.
354
355 Bei \emph{Sortiernetzwerken} ist eine \emph{Mutation} leider immer damit
356 verbunden, dass anschließend die Sortiereigenschaft des resultierenden
357 \emph{Komparatornetzwerks} wieder überprüft werden muss, da selbst das
358 Hinzufügen eines zufälligen Komparators diese Eigenschaft zer\-stö\-ren kann.
359 Beim Suchen möglichst effizienter Netzwerke ist natürlich das zufällige
360 Entfernen von Komparatoren interessanter, was die Sortiereigenschaft fast
361 immer aufhebt.
362
363 Die im Folgenden beschriebenen Algorithmen mutieren (verändern) daher nicht
364 die \emph{Sortiernetzwerke} selbst, sondern verzichten auf Mutation oder
365 mutieren lediglich Transformationen von Sortiernetzwerken, die die
366 Sortiereigenschaft erhalten. Transformationen von Sortiernetzwerken werden in
367 Abschnitt~\ref{sect:tranformation} beschrieben, ein Algorithmus, der Mutation
368 einsetzt, wird in Abschnitt~\ref{sect:sn-evolution-cut} vorgestellt.
369
370 \begin{figure}
371   \begin{center}
372     \input{images/16-hillis.tex}
373   \end{center}
374   \caption{Das 16-Sortiernetzwerk, das \textit{Hillis} in~\cite{H1992} angibt.
375   Es besteht aus 61~Komparatoren in 11~Schichten.}
376   \label{fig:16-hillis}
377 \end{figure}
378 Evolutionäre Algorithmen wurden bereits mehrfach eingesetzt, um
379 Sortiernetzwerke zu untersuchen. \textit{W.~Daniel Hillis} verwendete
380 \emph{Co-Evolution} um neben Komparatornetzwerken auch „schwierige Eingaben“
381 zu optimieren~\cite{H1992}. Diese \emph{Parasiten} genannten Eingaben wurden
382 daran gemessen, bei wie vielen Komparatornetzwerken sie beweisen konnten, dass
383 sie keine Sortiernetzwerke sind. So mussten bei neuen Individuen~/
384 Komparatornetzwerken nicht alle 0-1-Folgen, sondern nur erfolgreiche
385 Parasiten~/ schwierige Eingaben überprüft werden. Auf diese Art und Weise
386 gelang es \textit{Hillis} ein 16-Sortiernetzwerk mit 61~Komparatoren
387 anzugeben, das in Abbildung~\ref{fig:16-hillis} zu sehen ist.
388
389 \begin{figure}
390   \centering
391   \subfigure{\input{images/13-juille-0.tex}}
392   \subfigure{\input{images/13-juille-1.tex}}
393   \caption{13-Sortiernetzwerke, die von \textit{Hugues Juillé} mithilfe des
394   END-Algorithmus gefunden wurden. Sie bestehen jeweils aus 45~Komparatoren in
395   10~Schichten.}
396   \label{fig:13-juille}
397 \end{figure}
398 \textit{Hugues Juillé} entwickelte ein Verfahren, das er \emph{Evolving
399 Non-Determinism} (END) nannte~\cite{J1995}. Dabei handelt es sich nicht um
400 einen \emph{Evolutionären Algorithmus}, wie sie hier vorgestellt wurden,
401 sondern um eine verteilte, probabilistische Breitensuche, die an die
402 \emph{Strahlsuche} (englisch: \textit{beam search}), ein Verfahren der
403 Künstlichen Intelligenz, angelehnt ist. Die aufwendigste Operation bei diesem
404 Ansatz ist die Bewertungsfunktion, die abschätzt, wie viele Komparatoren zu
405 einem Komparatornetzwerk hinzugefügt werden müssen, um ein Sortiernetzwerk zu
406 erhalten. Mit diesem Ansatz gelang es \textit{Juillé} zwei 13-Sortiernetzwerke
407 anzugeben, die mit 45~Komparatoren effizienter sind als alle bis dahin
408 Bekannten (Abbildung~\ref{fig:13-juille}).
409
410 \newpage
411 \section[Konstruktionsverfahren]{Bekannte konstruktive Sortiernetzwerke}
412 \label{sect:konstruktive_netzwerke}
413
414 Die bekannten Konstruktionsverfahren für Sortiernetzwerke, insbesondere ein
415 häufig verwendeter Baustein, sogenannte \emph{Mischer}\footnote{Eine
416 Fehlübersetzung aus dem Englischen, von \textit{to~merge} (Deutsch:
417 zusammenfügen). Da der Begriff des "`mischens"' beziehungsweise der
418 "`Mischer"' in der Literatur sehr weit verbreitet ist, werden diese Begriffe
419 in dieser Arbeit trotzdem verwendet.}, bilden die Grundlage für die
420 beschriebenen evolutionären Algorithmen beziehungsweise dienen als initiale
421 Eingabe. Im Folgenden werden daher drei Konstruktionsverfahren vorgestellt.
422
423 \subsection{Das Odd-Even-Transpositionsort-Netzwerk}
424 \label{sect:odd_even_transpositionsort}
425
426 Das Sortiernetzwerk {\em Odd-Even-Transpositionsort} (OET) ist eines der
427 einfachsten Sortiernetzwerke. Es besteht aus $n$~{\em Schichten}, die jede
428 "`Leitung"' abwechselnd mit den benachbarten Leitungen verbindet.
429 Abbildung~\ref{fig:odd-even-transposition-08} zeigt das OET-Netzwerk für
430 ${n = 8}$ Leitungen.
431
432 \begin{figure}
433   \begin{center}
434     \input{images/oe-transposition-8.tex}
435   \end{center}
436   \caption{Das \emph{Odd-Even-Transpositionsort}-Netzwerk mit acht Eingängen.}
437   \label{fig:odd-even-transposition-08}
438 \end{figure}
439
440 Dass das \emph{Odd-Even-Transpositionsort}-Netzwerk tatsächlich jede beliebige
441 Eingabe sortiert, ist nicht offensichtlich. Leicht zu sehen ist jedoch, dass
442 sowohl das Minimum als auch das Maximum durch das im Netzwerk enthaltene
443 Treppenmuster auf die unterste beziehungsweise oberste Leitung gelangt. Beim
444 Odd-Even-Transpositionsort-Netzwerk mit drei Eingängen,
445 $\operatorname{OET}(3)$, ist die Ausgabe folglich sortiert.
446
447 Die Sortiereigenschaft größerer OET-Netzwerke lässt sich rekursiv beweisen,
448 indem man $\operatorname{OET}(n)$ auf $\operatorname{OET}(n-1)$ durch
449 Herausschneiden einer Leitung reduziert. In
450 Abschnitt~\ref{sect:leitungen_entfernen} wird das Vorgehen im Detail
451 beschrieben, Abbildung~\ref{fig:oe-transposition-cut} zeigt das
452 Herausschneiden einer Leitung aus $\operatorname{OET}(8)$.
453
454 Das \emph{Odd-Even-Transpositionsort}-Netzwerk ist weder in Bezug auf die
455 Anzahl der Komparatoren noch in Bezug auf die Anzahl der Schichten, in denen
456 sich die Komparatoren anordnen lassen, effizient. Es benötigt ${\frac12 n
457 (n-1)} = \mathcal{O}(n^2)$~Komparatoren, die in $n$~Schichten angeordnet sind.
458 Andere Sortiernetzwerke benötigen deutlich weniger Komparatoren,
459 beispielsweise $\mathcal{O}(n (\log n)^2)$, die in weniger Schichten, zum
460 Beispiel $\mathcal{O}(\log n)$, angeordnet sind.
461
462 Das Interessante am OET-Netzwerk ist seine einfache Konstruktion. Einige der
463 folgenden Algorithmen benötigen ein möglichst einfaches Sortiernetzwerk als
464 Starteingabe, auf dessen Basis sie versuchen optimierte Sortiernetzwerke zu
465 finden. Häufig dient $\operatorname{OET}(n)$ als Eingabe für diese
466 Algorithmen.
467
468 Außerdem bedienen sich die Algorithmen der Technik des Herausschneidens einer
469 beziehungsweise mehrerer Leitungen, um die Anzahl der Leitungen eines
470 Sortiernetzwerks zu reduzieren. Die Technik wird in Detail im
471 Abschnitt~\ref{sect:leitungen_entfernen} beschrieben.
472
473 \subsection{Das bitone Mergesort-Netzwerk}
474
475 Das \emph{bitone Mergesort}-Netzwerk ($\operatorname{BS}(n)$) ist ein
476 Sortiernetzwerk, das 1968 von \emph{Kenneth~E. Batcher} in~\cite{B1968}
477 veröffentlicht wurde. Es ist deutlich effizienter als das
478 Odd-Even-Transposi\-tionsort-Netzwerk -- sowohl in Bezug auf die Anzahl der
479 Komparatoren als auch bezüglich der benötigten Zeit, also der Anzahl der
480 Schichten.
481
482 Das Sortiernetzwerk basiert auf einem Komparatornetzwerk, welches zwei
483 sortierte Listen zusammenfügen (Englisch: \textit{to~merge}) kann. Dieser
484 \emph{„bitone Mischer“} (Englisch: \textit{bitonic merger}) genannte Baustein
485 verleiht dem Sortiernetzwerk seinen Namen.
486
487 Da das Sortiernetzwerk rekursiv definiert ist, betrachten wir hier nur die
488 Instanzen des Netzwerks, deren Leitungszahl $n = 2^t$ eine Zweierpotenz ist.
489 Es ist jedoch möglich, das Sortiernetzwerk für beliebige~$n$ zu erzeugen.
490
491 \subsubsection{Der bitone Mischer}\label{sect:der_bitone_mischer}
492
493 Das \emph{bitone Mergesort}-Netzwerk basiert auf dem sogenannten \emph{bitonen
494 Mischer} $\operatorname{BM}(n)$, einem Kom\-parator-Netzwerk, das eine
495 beliebige \emph{bitone Folge} in eine sortierte Listen umordnen kann. Eine
496 \emph{bitone Folge} ist eine monoton steigende Folge gefolgt von einer monoton
497 absteigenden Folge, oder ein zyklischer Shift davon.
498 Abbildung~\ref{fig:beispiel-biton} zeigt die vier prinzipiellen Möglichkeiten
499 die durch zyklische Shifts entstehen können. Die wichtigsten Varianten für das
500 \emph{bitone Mergesort}-Netzwerk zeigen die
501 Abbildungen~\ref{fig:beispiel-biton-0} und~\ref{fig:beispiel-biton-1}. Sie
502 erhält man, wenn man eine aufsteigend und eine absteigend sortierte Liste
503 aneinanderhängt. Bei den anderen beiden Formen ist wichtig zu beachten, dass
504 das letzte Element nicht größer (Abbildung~\ref{fig:beispiel-biton-2}) bzw.
505 kleiner (Abbildung~\ref{fig:beispiel-biton-3}) als das erste Element der Folge
506 sein darf.
507
508 \begin{figure}
509   \centering
510   \subfigure[aufsteigend, absteigend]{\input{images/beispiel-biton-0.tex}\label{fig:beispiel-biton-0}}
511   \subfigure[absteigend, aufsteigend]{\input{images/beispiel-biton-1.tex}\label{fig:beispiel-biton-1}}
512   \subfigure[aufsteigend, absteigend, aufsteigend]{\input{images/beispiel-biton-2.tex}\label{fig:beispiel-biton-2}}
513   \subfigure[absteigend, aufsteigend, absteigend]{\input{images/beispiel-biton-3.tex}\label{fig:beispiel-biton-3}}
514   \caption{Beispiele bitoner Folgen.}
515   \label{fig:beispiel-biton}
516 \end{figure}
517
518 \begin{figure}
519   \centering
520   \subfigure[normal]{\input{images/bitonic-merge.tex}\label{fig:bitonic-merge-normal}}
521   \qquad
522   \subfigure[trichter]{\input{images/bitonic-merge-trichter.tex}\label{fig:bitonic-merge-tricheter}}
523   \caption{Schematischer Aufbau des bitonen Mischers: Jedes Element der
524   aufsteigenden Folge $u_0, u_1, \ldots$ wird mit dem entsprechenden Element
525   der absteigend sortierten Folge $v_0, v_1, \ldots$ verglichen. Die beiden
526   resultierenden Teilfolgen sind wiederum biton.}
527   \label{fig:bitonic-merge-schema}
528 \end{figure}
529
530 Der Mischer funktioniert folgendermaßen: Gegeben sind zwei Folgen mit je
531 ${m = \frac{n}{2}}$ Elementen, $U = \left(u_0, u_1, \ldots, u_{m-1}\right)$ und
532 $V = \left(v_0, v_1, \ldots, v_{m-1}\right)$. Die Folge $U$ sei aufsteigend
533 sortiert, die Folge $V$ sei absteigend sortiert:
534 \begin{eqnarray}
535  u_0 \leqq u_1 \leqq &\ldots& \leqq u_{m-1} \\
536  v_0 \geqq v_1 \geqq &\ldots& \geqq v_{m-1}
537 \end{eqnarray}
538 Im ersten Schritt werden nun jeweils die Elemente an den gleichen relativen
539 Positionen verglichen und ggf. vertauscht:
540 \begin{equation}
541 u_i \longleftrightarrow v_i, \quad 0 \leqq i < m
542 \end{equation}
543 Sei $j \in \{0 \ldots m\}$ der Index der ersten Elemente $u_j$ und $v_j$, die
544 durch den gemeinsamen Komparator vertauscht werden. Unter der Annahme, dass
545 Elemente nur vertauscht werden wenn, sie ungleich sind, muss ${u_j > v_j}$
546 gelten. Mit $u_j \leqq u_{j+1}$ und $v_j \geqq v_{j+1}$ folgt daraus $u_{j+1}
547 > v_{j+1}$. Es werden also alle Elemente $u_k$ und $v_k$ mit $k \geqq j$
548 vertauscht. $j = m$ bezeichnet den Fall, in dem das größte Element der
549 "`linken"' Folge, $u_{m-1}$, kleiner ist als das kleinste Element der
550 "`rechten"' Folge, $v_{m-1}$. Daraus folgt, dass das Resultat in zwei bitone
551 Folgen aufteilen lässt: Eine aufsteigende~/ absteigende Folge und eine
552 absteigende~/ aufsteigende Folge. Abbildung~\ref{fig:bitonic-merge-normal}
553 zeigt die Situationen vor und nach diesem Schritt des Mischers schematisch.
554
555 Um die Folge vollständig zu sortieren, müssen anschließend die beiden
556 resultierenden bitonen Folgen sortiert werden. Die geschieht ebenfalls
557 mithilfe des bitonen Mischers, mit zwei Instanzen von
558 $\operatorname{BM}(\frac{n}{2})$. Diese rekursive Definition endet mit dem
559 bitonen Mischer mit zwei Leitungen, $\operatorname{BM}(2)$, der als
560 Komparator-Netzwerk mit einem Komparator zwischen den beiden Leitungen
561 definiert ist.
562
563 Der bitone Mischer kann auch zwei aufsteigende Folgen sortieren. Dazu ist
564 lediglich eine etwas modifizierte Vergleichs-Kaskade im ersten Schritt
565 notwendig. Die folgenden, kleineren Mischer erhalten als Eingabe wieder eine
566 „echte“ bitone Folge. Abbildung~\ref{fig:bitonic-merge-tricheter} zeigt das
567 Schema des bitonen Mischers für zwei aufsteigend sortierte Folgen. Durch das
568 Umdrehen einer Folge verändert sich das Muster der Komparatoren ein wenig:
569 Statt an eine Treppe erinnert das Muster nun an einen Trichter.
570
571 Da sich die Anzahl der Leitungen in jedem Rekursionsschritt halbiert, endet
572 die Rekursion nach $\log(n)$~Schritten. In jedem Rekursionsschritt werden
573 $\frac{n}{2}$~Komparatoren eingefügt, so dass der gesamte Mischer aus
574 $\frac{1}{2} n \log(n) = \mathcal{O}\left(n \log(n)\right)$~Komparatoren
575 besteht, die in $\log(n)$~Schichten angeordnet werden können.
576
577 \subsubsection{Das bitone Mergesort-Netzwerk}
578
579 Ebenso wie der bitone Mischer $\operatorname{BM}(n)$ ist auch das \emph{bitone
580 Mergesort-Netzwerk} $\operatorname{BS}(n)$ rekursiv definiert. Es setzt sich
581 zusammen aus zwei Instanzen des bitonen Mergesort-Netzwerks halber Größe,
582 \bs{\frac{n}{2}}, für je die Hälfte der Eingänge, sowie dem bitonen Mischer
583 für $n$~Leitungen, $\operatorname{BM}(n)$. Das Rekursionsende ist das bitone
584 Mergesort-Netzwerk mit nur einer Leitung, $\operatorname{BS}(1)$, welches als
585 leeres Komparatornetzwerk definiert ist. Entsprechend sind die
586 Komparatornetzwerke $\operatorname{BM}(2)$ und $\operatorname{BS}(2)$
587 identisch.
588
589 Bei der Konstruktion kommt die trichterförmige Anordnung der Komparatoren
590 (Abbildung~\ref{fig:bitonic-merge-tricheter}) gelegen, weil so die beiden
591 rekursiven Sortiernetzwerke in die gleiche Richtung sortieren können und so
592 alle Komparatoren in die gleiche Richtung zeigen.
593
594 \begin{figure}
595   \begin{center}
596   \input{images/batcher-8.tex}
597   \end{center}
598   \caption{\bs{8}, Batchers \emph{bitones Mergesort}-Netzwerk für acht
599   Eingänge. Markiert sind die beiden Instanzen von \bs{4} (rot), die beiden
600   bitonen Mischer~\bm{4} (blau) und die Komparatoren, die im letzten
601   rekursiven Schritt hinzugefügt wurden (grün).}
602   \label{fig:bitonic-08}
603 \end{figure}
604
605 Das konkrete Netzwerk~$\operatorname{BS}(8)$ ist in
606 Abbildung~\ref{fig:bitonic-08} zu sehen. Eingezeichnet sind ebenfalls die
607 beiden Instanzen des Netzwerks~$\operatorname{BS}(4)$ (rot) sowie der bitone
608 Mischer~$\operatorname{BM}(8)$ (blau). Die trichterförmige Komparator-Kaskade,
609 die die bitone Eingabefolge in zwei bitone Ausgabefolgen transformiert, ist
610 grün hinterlegt.
611
612 Das \emph{bitone Mergesort}-Netzwerk $\bs{n = 2^d}$ besteht aus $\frac{1}{4} n
613 \log(n) \log(n+1) = \mathcal{O}\left(n (log (n))^2\right)$ Komparatoren, die
614 in $\frac{1}{2} \log(n) \log(n+1) = \mathcal{O}(\log(n))$ Schichten angeordnet
615 sind.
616
617 \subsection{Das Odd-Even-Mergesort-Netzwerk}
618
619 Obwohl der Name ähnlich klingt, haben das \emph{Odd-Even-Mergesort}-Netzwerk
620 (OES) und das \emph{Odd-Even-Transpositionsort}-Netzwerk (siehe
621 Abschnitt~\ref{sect:odd_even_transpositionsort}) wenig gemein. Vielmehr ist
622 OES dem \emph{bitonen Mergesort}-Netzwerk, das im vorherigen Abschnitt
623 vorgestellt wurde, ähnlich: Auch dieses Sortiernetzwerk ist von
624 \textit{Kenneth~E. Batcher} gefunden worden und ist ebenfalls in~\cite{B1968}
625 beschrieben und initial analysiert worden. Eine weitere Gemeinsamkeit besteht
626 darin, dass es ebenfalls rekursiv durch einen Mischer definiert ist.
627
628 \subsubsection{Der \emph{Odd-Even}-Mischer}\label{sect:der_odd_even_mischer}
629
630 Der \emph{Odd-Even}-Mischer $\operatorname{OEM}(n,m)$ ist ein
631 Komparatornetzwerk, dass zwei sortierte Folgen mit $n$ beziehungsweise $m$
632 Elementen zu einer sortierten Ausgabefolge mit $N = n+m$~Elementen
633 zusammenfügen kann. Dabei kommt es mit weniger Vergleichen aus als der
634 \emph{bitone Mischer}, der im Abschnitt~\ref{sect:der_bitone_mischer}
635 vorgestellt wurde. Im allgemeinen Fall, wenn die Anzahl der Leitungen keine
636 Zweierpotenz ist, kann das \emph{bitonic-Merge}-Netzwerk schneller sein 
637 als das \emph{Odd-Even-Merge}-Netzwerk.~\cite{KNUTH}
638
639 Der \emph{Odd-Even}-Mischer selbst ist ebenfalls rekursiv aufgebaut: Die
640 Eingabe für den Mischer mit $N = n + m$ Leitungen besteht aus den beiden
641 sortierten Folgen $U = \left(u_0, u_1, \ldots, u_{n-1}\right)$ und
642 $V = \left(v_0, v_1, \ldots, v_{m-1}\right)$. Die gesamte Eingabe sei
643 $W = \left(w_0, w_1, \ldots, w_{N-1}\right)$ mit:
644 \begin{equation}
645 w_i = \left\{ \begin{array}{ll}
646         u_i,     & i < n \\
647         v_{i-n}, & i \geqq n
648       \end{array} \right.,
649       \quad 0 \leqq i < N
650 \end{equation}
651
652 \begin{figure}
653   \begin{center}
654   \input{images/oe-merge.tex}
655   \end{center}
656   \caption{Schematischer Aufbau des \emph{Odd-Even-Merge}-Netzwerks. Im
657     Vergleich zum bitonen Mischer für Acht Leitungen kommt dieses Schema mit
658     einem Komparator weniger aus. Der Effekt wird durch den rekursiven Aufbau
659     verstärkt.}
660   \label{fig:oe-merge}
661 \end{figure}
662
663 Diese werden in insgesamt vier sortierte Folgen aufgeteilt, je eine Liste der
664 geraden Indizes und je eine Liste der ungeraden Indizes.
665 \begin{eqnarray}
666   U_{\textrm{gerade}}   &=& \left(u_0, u_2, u_4, \ldots\right) \\
667   U_{\textrm{ungerade}} &=& \left(u_1, u_3, u_5, \ldots\right) \\
668   V_{\textrm{gerade}}   &=& \left(v_0, v_2, u_4, \ldots\right) \\
669   V_{\textrm{ungerade}} &=& \left(v_1, v_3, u_5, \ldots\right)
670 \end{eqnarray}
671
672 Die geraden Folgen $U_{\textrm{gerade}}$ und $V_{\textrm{gerade}}$
673 beziehungsweise die ungeraden Folgen $U_{\textrm{ungerade}}$ und
674 $V_{\textrm{ungerade}}$ werden rekursiv von kleineren \emph{Odd-Even}-Mischern
675 zusammengefügt, so dass sich am Ausgang der Mischer die Folgen
676 \begin{eqnarray}
677   W_{\textrm{gerade}}   &=& \left(w_0, w_2, w_4, \ldots\right) \\
678   W_{\textrm{ungerade}} &=& \left(w_1, w_3, w_5, \ldots\right)
679 \end{eqnarray}
680 ergeben.
681
682 Anschließend werden die Komparatoren zwischen benachbarten Leitungen
683 hinzugefügt,
684 \begin{equation}
685   w_{2i-1} \longleftrightarrow w_{2i}, \quad 1 \leqq i < \frac{N}{2}
686 \end{equation}
687 die die Folge~$W$ sortieren. Den schematischen Aufbau des
688 \emph{Odd-Even}-Mischers zeigt Abbildung~\ref{fig:oe-merge}.
689
690 Leider bricht die Rekursion nicht so schön ab, wie das beim {\em bitonen
691 Mischer} der Fall gewesen ist. Insbesondere für ${n = m = 1}$ würde --
692 entsprechend der Konstruktionsvorschrift -- ein leeres Netzwerk entstehen, was
693 offensichtlich nicht korrekt wäre. Die Abbruchbedingungen für den rekursiven
694 Aufbau lauten:
695 \begin{itemize}
696   \item Falls ${n = 0}$ oder ${m = 0}$: Das Netzwerk ist leer.
697   \item Falls ${n = 1}$ und ${m = 1}$: Das Netzwerk besteht aus einem
698   einzelnen Komparator.
699 \end{itemize}
700
701 Dass die resultierende Folge sortiert ist, lässt sich mit dem
702 {\em 0-1-Prinzip} zeigen:
703 Da $U$ und $V$ sortiert sind, ist die Anzahl der Nullen in den geraden
704 Teilfolgen, $U_{\textrm{gerade}}$ bzw. $V_{\textrm{gerade}}$, größer oder
705 gleich der Anzahl der Nullen in den ungeraden Teilfolgen
706 $U_{\textrm{ungerade}}$ bzw. $V_{\textrm{ungerade}}$ --~die Einsen verhalten
707 sich entsprechend umgekehrt. Das trifft demnach auch auf die Folgen
708 $W_{\textrm{gerade}}$ und $W_{\textrm{ungerade}}$ entsprechend zu:
709 \begin{eqnarray}
710   \left|W_{\textrm{gerade}}\right|_0
711   &=& \left|U_{\textrm{gerade}}\right|_0
712     + \left|V_{\textrm{gerade}}\right|_0
713    =  \left\lceil \frac{1}{2} \left|U\right|_0 \right\rceil
714    +  \left\lceil \frac{1}{2} \left|V\right|_0 \right\rceil \\
715   \left|W_{\textrm{ungerade}}\right|_0
716   &=& \left|U_{\textrm{ungerade}}\right|_0
717     + \left|V_{\textrm{ungerade}}\right|_0
718    =  \left\lfloor \frac{1}{2} \left|U\right|_0 \right\rfloor
719    +  \left\lfloor \frac{1}{2} \left|V\right|_0 \right\rfloor
720 \end{eqnarray}
721 Daraus folgt, dass $W_{\textrm{gerade}}$ $0$, $1$ oder $2$ Nullen mehr enthält
722 als $W_{\textrm{ungerade}}$. In den ersten beiden Fällen ist die "`verzahnte"'
723 Ausgabe der beiden kleineren Mischer bereits sortiert. Nur im letzten Fall,
724 wenn $W_{\textrm{gerade}}$ zwei Nullen mehr enthält als
725 $W_{\textrm{ungerade}}$, muss genau eine Vertauschung stattfinden, um die
726 Ausgabe zu sortieren. Diese wird von den Komparatoren, die benachbarte
727 Leitungen miteinander vergleichen, ausgeführt. Die jeweiligen Situationen sind
728 in Abbildung~\ref{fig:oe-post-recursive} dargestellt.
729
730 \begin{figure}
731   \centering
732   \subfigure[$\left|W_{\textrm{gerade}}\right|_0 - \left|W_{\textrm{ungerade}}\right|_0 = 0$]{\input{images/oe-post-recursive-diff0.tex}}
733   \qquad
734   \subfigure[$\left|W_{\textrm{gerade}}\right|_0 - \left|W_{\textrm{ungerade}}\right|_0 = 1$]{\input{images/oe-post-recursive-diff1.tex}}
735   \qquad
736   \subfigure[$\left|W_{\textrm{gerade}}\right|_0 - \left|W_{\textrm{ungerade}}\right|_0 = 2$]{\input{images/oe-post-recursive-diff2.tex}}
737   \caption{Die drei Situationen, die nach dem Verzahnen der Ausgaben der
738   kleineren \emph{Odd-Even}-Mischer entstehen können. Ist die Differenz der
739   Anzahl der Nullen gleich $0$ oder $1$, ist die Folge bereits sortiert. Im
740   letzten Fall stellt einer der Komparatoren sicher, dass das Ergebnis
741   sortiert ist.}
742   \label{fig:oe-post-recursive}
743 \end{figure}
744
745 Da die Teilfolgen $U$ und $V$ in jedem Rekursionsschritt etwa halbiert werden,
746 bricht die Rekursion nach $\mathcal{O}\left(\log (n) + \log (m)\right)$
747 Schritten ab. Die exakte Anzahl der benötigten Rekursionsschritte (und damit
748 Schichten im Mischer-Netzwerk), hängt von der Längeren der beiden
749 Eingabefolgen ab und beträgt $1 + \lceil \log\left(\max(n, m)\right) \rceil$.
750
751 Die Anzahl der Komparatoren $K(n,m)$, die $\operatorname{OEM}(n,m)$ im
752 allgemeinen Fall verwendet, ist Gemäß der rekursiven Definition in
753 Abhängigkeit der Länge der Eingabefolgen, $n$ und $m$:
754 \begin{displaymath}
755   K(n,m) = \left\{ \begin{array}{ll}
756     nm, & \mathrm{falls} \quad nm \leqq 1 \\
757     K\left(\left\lceil \frac{n}{2} \right\rceil, \left\lceil \frac{m}{2} \right\rceil\right)
758     + K\left(\left\lfloor \frac{n}{2} \right\rfloor, \left\lfloor \frac{m}{2} \right\rfloor\right)
759     + \left\lfloor \frac{1}{2} (m + n - 1) \right\rfloor & \mathrm{falls} \quad nm > 1
760   \end{array} \right.
761 \end{displaymath}
762 Leider ist es schwierig, diese allgemeine Formel in einer geschlossenen Form
763 anzugeben. Aus der Anzahl der Rekursionsschritte ist jedoch leicht erkennbar,
764 dass $K(n,m)$ in $\mathcal{O}(N \log (N))$ enthalten ist.
765
766 Für den wichtigen Spezialfall, dass $n = m = 2^{t-1}$, lässt sich die Anzahl
767 der Komparatoren im Vergleich zum \emph{bitonen Mischer} angeben: Der erste
768 Rekursionsschritt der OEM-Konstruktion fügt
769 $\left\lfloor \frac{1}{2} (m + n - 1) \right\rfloor = \frac{N}{2} - 1$
770 Komparatoren ein -- einen Komparator weniger als der \emph{bitone Mischer} in
771 diesem Schritt. Das selbe gilt für die rekursiv verwendeten kleineren Mischer,
772 $\operatorname{OEM}(\frac{n}{2}, \frac{n}{2})$ und so weiter bis
773 einschließlich $\operatorname{OEM}(2, 2)$, von denen es $2, 4, \dots,
774 \frac{N}{4} = 2^{\log(N)-2}$ Instanzen gibt. Insgesamt werden
775 \begin{displaymath}
776   \sum_{i=0}^{\log(N)-2} 2^i = 2^{\log(N) - 1} - 1 = \frac{N}{2} - 1 = n - 1
777 \end{displaymath}
778 Komparatoren eingespart. Damit ergibt sich
779 \begin{displaymath}
780   K\left(n = 2^{t-1}, n = 2^{t-1}\right) = \frac{1}{2} N \log(N) - \frac{N}{2} + 1
781 \end{displaymath}
782 für die Anzahl der Komparatoren, die von $\operatorname{OEM}(N = 2^t)$
783 benötigt werden.
784
785 \subsubsection{Das Odd-Even-Mergesort-Netzwerk}
786
787 Das \emph{Odd-Even-Mergesort}-Netzwerk $\operatorname{OES}(n)$ besteht --~wie
788 das \emph{bitone Mergesort}-Netzwerk~-- rekursiv aus kleineren Varianten von
789 sich selbst und einem abschließenden \emph{Odd-Even}-Mischer. Die
790 effizientesten Sortiernetzwerke in Bezug auf Komparator- und Schichtzahl
791 entstehen, wenn die Anzahl der Leitungen jeweils halbiert wird. Somit besteht
792 \oes{n} aus $\oes{\left\lceil\frac{n}{2}\right\rceil}$,
793 $\oes{\left\lfloor\frac{n}{2}\right\rfloor}$ und
794 $\oem{\left\lceil\frac{n}{2}\right\rceil, \left\lfloor\frac{n}{2}\right\rfloor}$.
795 Die Rekursion endet mit $\operatorname{OES}(1)$ und $\operatorname{OES}(0)$,
796 die als leere Komparatornetzwerke definiert sind.
797
798 \begin{figure}
799   \begin{center}
800   \input{images/oe-mergesort-8.tex}
801   \end{center}
802   \caption{Das {\em Odd-Even-Mergesort-Netzwerk} für acht Eingänge. Markiert
803   sind die Instanzen von $\operatorname{OES}(4)$ (rot), die beiden
804   \emph{Odd-Even}-Mischer $\operatorname{OEM}(4)$ für gerade und ungerade
805   Leitungen (blau) und die im ersten Rekursionsschritt hinzugefügten
806   Komparatoren zwischen benachbarten Leitungen (grün).}
807   \label{fig:odd-even-mergesort-08}
808 \end{figure}
809
810 In Abbildung~\ref{fig:odd-even-mergesort-08} ist das konkrete Sortiernetzwerk
811 $\operatorname{OES}(8)$ zu sehen. Rot markiert sind die beiden rekursiven
812 Instanzen $\operatorname{OES}(4)$. Die blauen und der grüne Block stellen den
813 \emph{Odd-Even}-Mischer für acht Leitungen dar: Die beiden blauen Blöcke sind
814 die rekursiven Instanzen von $\operatorname{OEM}(4)$, der grüne Block markiert
815 die Komparatoren, die im ersten Rekursionsschritt hinzugefügt werden.
816
817 Im Allgemeinen ist die Anzahl der Komparatoren, die vom
818 \emph{Odd-Even-Mergesort-Netz\-werk} verwendet wird, $k(n)$, direkt aus der
819 Definition beziehungsweise der Konstruktionsanleitung abzulesen:
820 \begin{displaymath}
821   k(n) = k\left(\left\lceil\frac{n}{2}\right\rceil\right)
822        + k\left(\left\lfloor\frac{n}{2}\right\rfloor\right)
823        + K\left(\left\lceil\frac{n}{2}\right\rceil, \left\lfloor\frac{n}{2}\right\rfloor\right)
824 \end{displaymath}
825 Eine geschlossene Form dieser Formel ist schon alleine deshalb schwierig, weil
826 sie für $K(n,m)$ schwierig anzugeben ist. Es ist allerdings bekannt, dass
827 $k(n)$ in $\mathcal{O}\left(n \left(\log (n)\right)^2\right)$ enthalten ist.
828
829 Für den wichtigen Spezialfall, dass $n = 2^t$ eine Zweierpotenz ist, kann die
830 Anzahl der Komparatoren wieder explizit angegeben werden. \textit{Kenneth
831 Batcher} zeigt in~\cite{B1968}, dass in diesem Fall
832 \begin{displaymath}
833   k(n = 2^t) = \frac{1}{4} n \left(\log (n)\right)^2 - \frac{1}{4}n\log(n) + n - 1
834 \end{displaymath}
835 gilt.
836
837 % gnuplot:
838 % 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))
839 % oem1(n) = oem(ceil(.5*n),floor(.5*n))
840 % oes(n) = (n <= 1.0) ? 0 : oes(ceil(0.5*n)) + oes(floor(0.5*n)) + oem1(n)
841
842 %\begin{itemize}
843 %\item Pairwise sorting-network
844 %\end{itemize}
845
846 \subsection{Das Pairwise-Sorting-Netzwerk}
847
848 Das \emph{Pairwise-Sorting}-Netzwerk \ps{n} ist eine Konstruktionsvorschrift
849 für Sortiernetzwerke, die 1992 von \textit{Ian Parberry} in seiner Arbeit „The
850 Pairwise Sorting Network“ \cite{P1992} definiert wurde. Wenn die Anzahl der
851 Leitungen $n = 2^d$ eine Zweierpotenz ist, hat das
852 \emph{Pairwise-Sorting}-Netzwerk die selbe Effizienz und Geschwindigkeit wie
853 das \emph{Odd-Even-Mergesort}-Netzwerk.
854
855 \newpage
856 \section{Transformation von Sortiernetzwerken}
857 \label{sect:tranformation}
858
859 \subsection{Komprimieren}
860
861 Komparatoren, die unterschiedliche Leitungen miteinander vergleichen, können
862 gleichzeitig ausgewertet werden, wie bereits in
863 Abschnitt~\ref{sect:einleitung_sortiernetzwerke} beschrieben. Durch manche
864 Transformationen, insbesondere das Entfernen einer Leitung, das in
865 Abschnitt~\ref{sect:leitungen_entfernen} beschrieben wird, kann es vorkommen,
866 dass die Komparatoren eines Sortiernetzwerks nicht mehr in der
867 kleinstmöglichen Anzahl von \emph{Schichten} angeordnet sind. Unter
868 \emph{Komprimierung} wird eine (Neu-)Gruppierung der Komparatoren verstanden,
869 die jeden Komparator so früh wie möglich ausführt. So entsteht die
870 kleinstmögliche Anzahl von \emph{Schichten}, in die sich ein Sortiernetzwerk
871 unterteilen lässt.
872
873 Diese Anzahl ist insbesondere beim automatisierten Bewerten von
874 Komparatornetzwerken interessant, wie in Abschnitt~\ref{sect:bewertung}
875 beschrieben. Die Anzahl der Schichten kann künstlich vergrößert werden, indem
876 Komparatoren später angewendet werden. Deshalb sollte vor einer Bewertung, die
877 die Anzahl der Schichten als Bewertungskriterium verwendet, immer eine
878 Komprimierung durchgeführt werden.
879
880 \subsection{Normalisieren}
881 \label{sect:normalisieren}
882
883 \begin{figure}
884   \centering
885   \subfigure[$S(8)$ (nach Konstruktion)]{\input{images/batcher-8-nonstd.tex}\label{fig:bitonic-nonstd}}
886   \subfigure[$S(8)$ (normalisiert)]{\input{images/batcher-8-std.tex}\label{fig:bitonic-std}}
887   \caption{Jedes Sortiernetzwerk kann in ein Standard-Sortiernetzwerk
888   transformiert werden. Gezeigt ist das bitone Sortiernetzwerk nach der
889   intuitiven Konstruktion und die normalisierte Variante.}
890   \label{fig:beispiel_normalisieren}
891 \end{figure}
892
893 Ein \emph{Standard-Sortiernetzwerk} oder \emph{normalisiertes Sortiernetzwerk}
894 ist ein Sortiernetzwerk, dessen Komparatoren alle in die selbe Richtung
895 zeigen.\footnote{Die Konvention in dieser Arbeit ist, dass in diesem Fall alle
896 Pfeile nach unten zeigen. Das Minimum wird auf der untersten, das Maximum auf
897 der obersten Leitung ausgegeben.} Jedes Sortiernetzwerk kann in eine
898 normaliesierte Variante transformiert werden. Dazu gibt beispielsweise
899 \emph{Donald~E. Knuth} in~\cite{KNUTH} einen Algorithmus an.
900
901 Abbildung~\ref{fig:beispiel_normalisieren} zeigt das das \emph{bitone
902 Mergesort}-Netzwerk in zwei Varianten. Abbildung~\ref{fig:bitonic-nonstd}
903 zeigt das Netzwerk nach der Konstruktionsvorschrift, siehe auch
904 Abbildung~\ref{fig:bitonic-merge-normal}: In den ersten drei Schichten werden
905 die untere und die obere Hälfte gegenläufig sortiert. Das heißt dass nach drei
906 Schritten die eine Hälfte auf- und die andere Hälfte absteigend sortiert ist.
907 In den Schichten~4 bis~6 folgt der bitone Mischer entsprechend der rekursiven
908 Definition.
909
910 In Abbildung~\ref{fig:bitonic-std} ist die normalisierte Version des bitonen
911 Mergesort-Netzwerks zu sehen. Alle Komparatoren zeigen hier in die gleiche
912 Richtung. Statt dem typischen „Treppenmuster“ sind abwechselnd das Treppen-
913 und das Trichtermuster zu sehen.
914
915 \subsection{Zwei Netzwerke kombinieren}
916
917 Um Sortiernetzwerke als \emph{Individuen} evolutionärer Algorithmen verwenden
918 zu können, muss es möglich sein, zwei Sortiernetzwerke zu einem neuen
919 Sortiernetzwerk zusammenzufassen.
920
921 Wir haben diese Technik in den vorangegangen Abschnitten bereits verwendet,
922 beispielsweise um zwei \emph{bitone Mergesort}-Netzwerke mit jeweils der
923 halben Leitungszahl, $\operatorname{BS}\left(\frac{n}{2}\right)$, zu einem
924 einzigen Sortiernetzwerk $\operatorname{BS}(n)$ zu kombinieren. Auch das
925 \emph{Odd-Even-Mergesort}-Netzwerk $\operatorname{OES}(n)$ wurde auf diese Art
926 und Weise rekursiv aufgebaut.
927
928 Die vorgestellten \emph{Mischer} erwarten als Eingabe zwei bereits sortierte
929 Folgen. \emph{Wie} diese Folgen sortiert wurden, ist unerheblich. Entsprechend
930 können wir beliebige Sortiernetzwerke einsetzen, um die beiden Eingabefolgen
931 zu sortieren, und die Ausgaben mit einem der beschriebenen Mischer
932 zusammenfügen.
933
934 Beispielsweise kann man die Ausgabe von zwei \emph{bitonen
935 Mergesort-Netzwerken} $\operatorname{BS}(8)$ mit je acht Leitungen mit dem
936 \emph{Odd-Even-Merge}-Netzwerk $\operatorname{OEM(8,8)}$ zu einer sortierten
937 Gesamtfolge zusammenfügen. Das resultierende Sortiernetzwerk besitzt
938 73~Komparatoren (zum Vergleich: $\operatorname{BS}(16)$ benötigt
939 80~Komparatoren, $\operatorname{OES}(16)$ nur 63).
940
941 Verbesserungen der Effizienz (die Anzahl der benötigten Komparatoren)
942 beziehungsweise der Geschwindigkeit (die Anzahl der Schichten) eines „kleinen“
943 Sortiernetzwerks übertragen sich direkt auf das resultierende Gesamtnetzwerk.
944 Das \emph{Odd-Even-Mergesort}-Netzwerk $\operatorname{OES}(9)$ benötigt
945 beispielsweise 26~Komparatoren, die in in neun Schichten angeordnet sind. Es
946 sind allerdings Sortiernetzwerke mit neun Eingängen bekannt, die lediglich
947 25~Komparatoren in sieben Schichten benötigen. Kombiniert man zwei dieser
948 Netzwerke mit dem \emph{Odd-Even}-Mischer erhält man ein Sortiernetzwerk mit
949 18~Eingängen, das 80~Komparatoren in 11~Schichten benötigt --
950 $\operatorname{OES}(18)$ benötigt 82~Komparatoren in 13~Schichten. Damit ist
951 das resultierende Netzwerk so schnell wie das Sortiernetzwerk mit
952 18~Eingängen, das \textit{Sherenaz~W. Al-Haj Baddar} und \textit{Kenneth~E.
953 Batcher} in ihrer Arbeit „An 11-Step Sorting Network for
954 18~Elements“~\cite{BB2009} vorstellen, benötigt aber 6~Komparatoren weniger.
955
956 Das Zusammenfassen von zwei Sortiernetzwerken durch Hintereinanderausführung
957 ist nicht sinnvoll: Da die Ausgabe des ersten Sortiernetzwerks bereits
958 sortiert ist, ist das zweite Sortiernetzwerk überflüssig. Eine
959 Aneinanderreihung der Art „die ersten $x$~Schichten des einen, dann die
960 letzten $y$~Schichten des anderen Sortiernetzwerks“ zerstören im Allgemeinen
961 die Sortiereigenschaft. Die Sortiereigenschaft des resultierenden
962 Komparatornetzwerks müsste überprüft werden, was nach heutigem Wissensstand
963 nur mit exponentiellem Aufwand möglich ist.
964
965 \subsection{Leitungen entfernen}
966 \label{sect:leitungen_entfernen}
967
968 Im vorherigen Abschnitt haben wir gesehen, dass es mithilfe von
969 \emph{Mischern} möglich ist, aus zwei Sortiernetzwerken mit je $n$~Eingängen
970 ein neues Sortiernetzwerk mit $2n$~Eingängen zu erzeugen. Für einen
971 beabsichtigen \emph{evolutionären Algorithmus} ist es jedoch notwendig, dass
972 sich die Anzahl der Eingänge nicht verändert. Das heißt, dass wir wieder ein
973 Sortiernetzwerk mit $n$~Eingängen erhalten müssen.
974
975 Man kann ein gegebenes Sortiernetzwerk mit $n$~Eingängen auf ein
976 Sortiernetzwerk mit ${n-1}$~Leitungen verkleinern, indem man eine Leitung
977 „eliminiert“. Dazu nehmen wir an, dass das Minimum oder das Maximum an einem
978 bestimmten Eingang anliegt. Der Weg, den das Minimum beziehungsweise das
979 Maximum durch das Sortiernetzwerk nimmt, ist eindeutig bestimmt und endet an
980 einem der „Ränder“, also auf der Leitung mit dem höchsten oder dem niedrigsten
981 Index. Insbesondere ist bekannt, welche Komparatoren „berührt“ werden und
982 welche dafür sorgen, dass der Wert die Leitung gewechselt, da das Minimum
983 jeden Vergleich „verliert“ und das Maximum jeden Vergleich „gewinnt“. Die
984 Abbildung~\ref{fig:oe-transposition-cut0} zeigt den Weg eines Maximums durch
985 das \emph{Odd-Even-Transpositionsort}-Netzwerk.
986
987 \begin{figure}
988   \centering
989   \subfigure[Auf der Leitung~4 wird $-\infty$ angelegt. Dadurch ist der Pfad
990   durch das Sortiernetzwerk eindeutig festgelegt.]{\input{images/oe-transposition-cut0.tex}\label{fig:oe-transposition-cut0}}
991   \subfigure[Komparatoren, die einen Wechsel der Leitungen bewirken, werden
992   durch sich kreuzende Leitungen ersetzt.]{\input{images/oe-transposition-cut1.tex}\label{fig:oe-transposition-cut1}}
993   \subfigure[Leitung~4 wurde entfernt. Übrig bleibt ein Sortiernetzwerk mit
994   7~Leitungen.]{\input{images/oe-transposition-cut2.tex}\label{fig:oe-transposition-cut2}}
995   \subfigure[Die Leitungen wurden wieder gerade eingezeichnet und die
996   Komparatoren regelmäßig angeordnet. Blau eingezeichnet ist \oet{7}.]{\input{images/oe-transposition-cut3.tex}\label{fig:oe-transposition-cut3}}
997   \caption{Eine Leitung wird aus dem
998   \emph{Odd-Even-Transpositionsort}-Netzwerk \oet{8} entfernt: Auf der rot
999   markierten Leitung wird $-\infty$ angelegt. Da der Wert bei jedem Komparator
1000   am unteren Ende herauskommt, ist der Pfad fest vorgegeben. Da die restlichen
1001   Werte trotzdem noch richtig sortiert werden müssen, kann dieser Pfad
1002   heraus getrennt werden. In der letzten Abbildung ist \oet{7} markiert.}
1003   \label{fig:oe-transposition-cut}
1004 \end{figure}
1005
1006 Im nächsten Schritt werden alle beteiligten Komparatoren gelöscht
1007 beziehungsweise ersetzt: Komparatoren, die {\em nicht} zu einem Wechsel der
1008 Leitung geführt haben, werden ersatzlos gelöscht. Diese Komparatoren sind in
1009 Abbildung~\ref{fig:oe-transposition-cut0} grün markiert. Die Komparatoren, die
1010 zum Wechsel der Leitung geführt haben, werden durch sich kreuzende Leitungen
1011 ersetzt. Das Resultat ist eine Leitung, auf der das Minimum beziehungsweise
1012 das Maximum angenommen wird, die an unterster oder oberster Stelle endet und
1013 auf die keine Komparatoren mehr berührt
1014 (Abbildung~\ref{fig:oe-transposition-cut1}).
1015
1016 Die Werte auf den verbleibenden $(n-1)$~Leitungen müssen vom restlichen
1017 Komparatornetzwerk immer noch sortiert werden: Wir haben lediglich die
1018 Position des Minimums oder des Maximums angenommen. Ein Sortiernetzwerk muss
1019 die Eingabe sortieren, egal auf welcher Leitung das Minimum~/ das Maximum
1020 liegt. Wir haben nur angefangen, das Sortiernetzwerk unter diese Annahme
1021 auszuwerten -- über die verbleibenden Eingänge haben wir keine Aussage
1022 getroffen. Entsprechend müssen die verbleibenden Ausgänge eine sortierte Liste
1023 mit $(n-1)$~Elementen darstellen.
1024
1025 Wenn man die Minimum- beziehungsweise Maximum-Leitung entfernt, wie in
1026 Abbildung~\ref{fig:oe-transposition-cut2} dargestellt, bleibt das
1027 Sortiernetzwerk für $(n-1)$~Leitungen übrig. Je nachdem, ob auf einer Leitung
1028 ein Minimum oder ein Maximum angenommen wird, bezeichnen wir das eliminieren
1029 einer Leitung auf diese Art und Weise als \emph{Minimum-Schnitt}
1030 beziehungsweise \emph{Maximum-Schnitt}.
1031
1032 Die letzte Abbildung, \ref{fig:oe-transposition-cut3}, zeigt das
1033 Sortiernetzwerk wieder mit den üblichen geraden Leitungen und die rot
1034 markierten Komparatoren wurden verschoben, so dass sich eine kompaktere
1035 Darstellung ergibt. Außerdem ist das
1036 \emph{Odd-Even-Transpositionsort}-Netzwerk für sieben Werte markiert. Der
1037 zusätzliche Komparator vor dem \oet{7} hat keinen Einfluss auf die Ausgabe und
1038 kann entfernt werden.
1039
1040 Durch das Ersetzen von Komparatoren durch gekreuzte Leitungen werden häufig
1041 \emph{Nicht-Standard-Sortiernetzwerke} erzeugt. Im Anschluss an einen
1042 \emph{Schnitt} empfiehlt es sich deshalb, das Sortiernetzwerk zu
1043 \emph{normalisieren}, wie in Abschnitt~\ref{sect:normalisieren} beschrieben.
1044
1045 \subsubsection{Anzahl möglicher und unterschiedlicher Schnittmuster}
1046 \label{sect:anzahl_schnittmuster}
1047
1048 Der Eliminierungsschritt kann iterativ angewendet werden, um aus einem
1049 Sortiernetzwerk mit $n$~Ein\-gängen Sortiernetzwerke mit $n-1$, $n-2$,
1050 $n-3$,~\dots Eingängen zu erzeugen. Insbesondere können auf diese Art und
1051 Weise Sortiernetzwerke mit $2n$~Eingängen auf Sortiernetzwerke mit
1052 $n$~Eingängen reduziert werden. $k$~Minimum- und Maximum-Schnitte, die
1053 nacheinander angewendet ein $n$-Sortiernetzwerk auf ein
1054 ${(n-k)}$-Sortiernetz\-werk reduzieren, bezeichnen wir als
1055 \emph{$k$-Schnittmuster}.
1056
1057 Zwei Schnittmuster heißen \emph{äquivalent} bezüglich~$S$, wenn ihre Anwendung
1058 auf das Sortiernetzwerk~$S$ das selbe Ergebnis liefert. Ansonsten heißen die
1059 Schnittmuster \emph{unterschiedlich} bezüglich~$S$. 
1060
1061 Bei einem Sortiernetzwerk mit $n$~Eingängen gibt es $2n$~Möglichkeiten eine
1062 Leitung zu entfernen: Auf jeder der $n$~Leitungen kann sowohl das Minimum als
1063 auch das Maximum angenommen werden. Wendet man das Verfahren iterativ an, um
1064 ein $n$-Sortiernetzwerk auf ein ${(n-k)}$-Sortiernetzwerk zu reduzieren,
1065 ergeben sich insgesamt
1066 \begin{displaymath}
1067   \prod_{i=n}^{1+n-k} 2i = 2^k \cdot \frac{n!}{(n-k)!}
1068   \quad (n > m)
1069 \end{displaymath}
1070 \emph{mögliche} Schnittmuster. Diese Schnittmuster sind nicht alle
1071 unterschiedlich. Legt man beispielsweise das Minimum auf die unterste Leitung
1072 und das Maximum auf die oberste Leitung eines Standard-Sortiernetzwerks,
1073 führen beide Reihenfolgen zum selben Ergebnis.
1074
1075 \textit{Moritz Mühlenthaler} zeigt in seiner Arbeit~\cite{M2009}, dass es
1076 möglich ist, mehrere Eingänge gleichzeitig mit Minimum beziehungsweise Maximum
1077 vorzubelegen, ohne die Menge der erreichbaren Sortiernetzwerke einzuschränken.
1078 Dadurch wird die Anzahl der möglichen Schnittmuster reduziert, die Menge der
1079 so erzeugbaren Sortiernetzwerke bleibt aber unverändert. Die Anzahl der
1080 möglichen Schnittmuster setzt sich zusammen aus der Anzahl von Möglichkeiten,
1081 $k$~Leitungen aus $n$~Leitungen auszuwählen, und die möglichen Minimum-~/
1082 Maximum-Muster. Damit ergibt sich folgende Formel für die Anzahl der möglichen
1083 Schnittmuster:
1084 \begin{equation}\label{eqn:anzahl_schnittmuster}
1085   2^k \cdot \left( \begin{array}{c} n \\ k \end{array} \right)
1086   = 2^{k} \cdot \frac{n!}{k! (n-k)!}
1087   = 2^{k} \cdot \frac{n!}{(n-k)!} \cdot \frac{1}{k!}
1088   \quad (1 \leqq k < n)
1089 \end{equation}
1090
1091 Die Anzahl der möglichen Schnittmuster wird mit der Anzahl der zu entfernenden
1092 Leitungen sehr schnell sehr groß. Um ein Sortiernetzwerk mit 32~Eingängen auf
1093 ein Sortiernetzwerk mit 16~Eingängen zu reduzieren, ist ein Schnittmuster mit
1094 16~Schnitten notwendig, für das es bereits etwa ${3,939 \cdot 10^{13}}$
1095 Möglichkeiten gibt. Ein Ausprobieren aller Möglichkeiten ist für große
1096 Netzwerke nicht oder nur unter erheblichem Ressourcenaufwand möglich.
1097
1098 Die Anzahl der \emph{unterschiedlichen} Schnittmuster ist allerdings kleiner
1099 als die Anzahl der möglichen Schnittmuster. Für jeden Komparator auf der
1100 ersten Stufe gibt es neun verschiedene Eingangskonfigurationen: Für beide
1101 Eingänge gibt es drei mögliche Eingangswerte, Minimum, Maximum und
1102 unspezifiziert. Es gibt drei Konfigurationen, bei denen an beiden Eingängen
1103 der gleiche Wert angelegt wird, und sechs Konfigurationen, bei denen sich die
1104 Werte unterscheiden.
1105
1106 Bei diesen letzten sechs Konfigurationen werden je zwei auf das selbe
1107 Ausgangsmuster abgebildet, weil die Position des Minimums beziehungsweise des
1108 Maximums durch den Komparator vorgegeben wird. Das heißt, dass die neun
1109 unterschiedlichen Eingangsmuster nur sechs unterschiedliche Ausgangsmuster
1110 erzeugen. In der zweiten und allen folgenden Schichten kann man diesen
1111 Unterschied nicht mehr erkennen. In allen sechs Fällen, in denen sich die
1112 Eingänge unterscheiden, wird anschließend der Komparator entfernt, so dass
1113 sich die Resultate auch in der ersten Schicht nicht unterscheiden.
1114
1115 \begin{figure}
1116   \begin{center}
1117     \includegraphics[viewport=0 0 425 262,width=15cm]{images/count-cuts-16.pdf}
1118   \end{center}
1119   \caption{Anzahl der \emph{unterschiedlichen} Sortiernetzwerke, die durch
1120   8-Schnittmuster aus $\operatorname{OES}(16)$, $\operatorname{BS}(16)$ und
1121   $\operatorname{PS}(16)$ hervorgegangen sind. Die Anzahl der
1122   unterschiedlichen Netzwerke nach $10^6$~Iterationen ist 3519 für das
1123   \emph{Odd-Even-Mergesort}-Netzwerk, 4973 für das \emph{bitone
1124   Mergesort}-Netzwerk und 18764 für das \emph{Pairwise-Sorting}-Netzwerk.}
1125   \label{fig:count-cuts-16}
1126 \end{figure}
1127
1128 Alleine durch Betrachten der ersten Schicht von Komparatoren konnte die Anzahl
1129 der \emph{unterschiedlichen} Schnittmuster auf höchstens $\frac{2}{3}$ der
1130 \emph{möglichen} Schnittmuster reduziert werden. Um die Anzahl der
1131 \emph{unterschiedlichen} Schnittmuster experimentell zu ermitteln, wurden je
1132 eine Million zufällige 8-Schnittmuster auf die 16-Sortiernetzwerke \oes{16},
1133 \bs{16} und \ps{16} angewandt. Anschließend wurde mithilfe einer Hashtabelle
1134 überprüft, ob das resultierende Sortiernetzwerk schon von einem
1135 \emph{äquivalenten} Schnittmuster erzeugt wurde. Falls das Sortiernetzwerk
1136 noch nicht in der Hashtabelle enthalten war, wurde der Zähler für
1137 unterschiedliche Schnittmuster erhöht und das Sortiernetzwerk eingefügt.
1138
1139 Abbildung~\ref{fig:count-cuts-16} trägt die Anzahl der
1140 \emph{unterschiedlichen} Schnittmuster gegen die Anzahl der zufälligen
1141 Schnittmuster auf. Klar zu sehen ist, dass sich die Anzahl der erzeugten
1142 Sortiernetzwerke nach $500.000$~Iterationen nur noch gering verändert und der
1143 Wert nach $1.000.000$~Iterationen allem Anschein nach dem Endwert schon sehr
1144 nahe ist.
1145
1146 Die Anzahl der möglichen 8-Schnittmuster ist entsprechend der
1147 Formel~\eqref{eqn:anzahl_schnittmuster} 3.294.720. Diese möglichen
1148 Schnittmuster führen aber nur zu wenigen \emph{unterschiedlichen}
1149 Sortiernetzwerken: 3519 ($\approx 0,1\%$) im Fall des
1150 \emph{Odd-Even-Mergesort}-Netzwerks, 4973 ($\approx 0,15\%$) beim
1151 \emph{bitonen Mergesort}-Netzwerk und 18764 ($\approx 0,57\%$) beim
1152 \emph{Pairwise-Sorting}-Netzwerk. Zwar ist es möglich, dass mehr Iterationen
1153 die Anzahl der unterschiedlichen Schnittmuster noch wachsen lässt. Die Graphen
1154 in Abbildung~\ref{fig:count-cuts-16} geben jedoch Grund zu der Annahme, dass
1155 die Anzahl dieser zusätzlichen, unterschiedlichen Schnittmuster
1156 vernachlässigbar klein ist.
1157
1158 Bedingt durch die sehr große Anzahl möglicher Schnittmuster ist dieses
1159 Experiment für größere Sortiernetzwerke leider nicht sinnvoll durchführbar.
1160 Die Hashtabelle würde mehr Arbeitsspeicher benötigen als in derzeitigen
1161 Rechnern vorhanden ist, bevor ein entsprechender Graph den linearen Bereich
1162 für „kleine“ x-Werte verlässt.
1163
1164 Um die Anzahl der unterschiedlichen Schnittmuster trotzdem abschätzen zu
1165 können, kann man sich einer stochastischen Methode bedienen, der sogenannten
1166 \emph{Monte-Carlo-Methode}, die \textit{Rolf Wanka} in~\cite{W2006} für
1167 schwierige Zählprobleme vorstellt. Zunächst generiert man eine Menge~$S$ von
1168 $k$~unterschiedlichen Schnittmustern. Anschließend werden $n$~Schnittmuster
1169 zufällig erzeugt und überprüft, ob sie in der Menge~$S$ enthalten sind. Unter
1170 der Annahme, dass auf diese Art und Weise Sortiernetzwerke zufällig und
1171 gleichverteilt erzeugt werden, entspricht das Verhältnis der zufälligen
1172 Schnittmuster, die in $S$ enthalten sind, und $n$ gleich dem Verhältnis von
1173 $k$ und der Anzahl der unterschiedlichen Schnittmuster insgesamt. Damit kann
1174 die Anzahl der unterschiedlichen Schnittmuster abgeschätzt werden.
1175
1176 \begin{figure}
1177   \begin{center}
1178     \includegraphics[viewport=0 0 425 262,width=15cm]{images/collisions-10000-1000000-32.pdf}
1179   \end{center}
1180   \caption{Abschätzung der unterschiedlichen Schnittmuster mit der
1181   \emph{Monte-Carlo-Methode} für $\operatorname{OES}(32)$ und
1182   $\operatorname{BS}(32)$.}
1183   \label{fig:collisions-10000-1000000-32}
1184 \end{figure}
1185
1186 In Abbildung~\ref{fig:collisions-10000-1000000-32} ist das Ergebnis des
1187 Monte-Carlo-Algorithmus für 16-Schnittmuster zu sehen, die auf
1188 $\operatorname{OES}(32)$ und $\operatorname{BS}(32)$ angewandt wurden: Von
1189 jedem Sortiernetzwerk wurden zunächst eine Menge~$S$ von 10.000
1190 \emph{unterschiedlichen} Schnittmustern erzeugt. Anschließend wurden 1.000.000
1191 zufällige Schnittmuster erzeugt und der Anteil der zufälligen Schnittmuster,
1192 die \emph{äquivalent} zu einem in~$S$ enthalten Schnittmuster sind, berechnet.
1193 Für $\operatorname{OES}(32)$ war dieser Anteil etwa $0,19 \%$, für
1194 $\operatorname{BS}(32)$ etwa $0,29 \%$. Das ergibt eine Abschätzung von $5,2
1195 \cdot 10^6$ unterschiedlichen 16-Schnittmustern für $\operatorname{OES}(32)$
1196 und $3,4 \cdot 10^6$ für $\operatorname{BS}(32)$.
1197
1198 \begin{figure}
1199   \begin{center}
1200     \includegraphics[viewport=0 0 425 262,width=15cm]{images/collisions-100000-1000000-32-ps.pdf}
1201   \end{center}
1202   \caption{Abschätzung der unterschiedlichen Schnittmuster mit der
1203   \emph{Monte-Carlo-Methode} für $\operatorname{PS}(32)$. 385 von 1.000.000
1204   zufälligen Schnittmustern waren äquivalent zu einem Schnittmuster in einer
1205   Menge von 100.000. Daraus ergibt sich eine Schätzung von $2,6 \cdot 10^8$
1206   unterschiedlichen Schnittmustern.}
1207   \label{fig:collisions-100000-1000000-32-ps}
1208 \end{figure}
1209
1210 Im vorherigen Abschnitt wurde das \emph{Pairwise-Sorting}-Netzwerk
1211 $\operatorname{PS}(32)$ nicht betrachtet, da es für dieses Netzwerk viel mehr
1212 unterschiedliche 16-Schnittmuster gibt als für $\operatorname{OES}(32)$ und
1213 $\operatorname{BS}(32)$. In Anbetracht der Tatsache, dass die Anzahl der
1214 unterschiedlichen 8-Schnittmuster für $\operatorname{PS}(16)$ in
1215 Abbildung~\ref{fig:count-cuts-16} bereits mehr als dreimal größer war als die
1216 Anzahl für $\operatorname{OES}(16)$ beziehungsweise $\operatorname{BS}(16)$,
1217 ist dieser Umstand wenig verwunderlich. Entsprechend hätte man in einem
1218 kombinierten Graphen keine Details mehr erkennen können. Aufgrund der hohen
1219 Anzahl unterschiedlicher Schnittmuster, wurde für das gleiche Experiment mit
1220 $\operatorname{PS}(32)$ eine initiale Menge von 100.000 unterschiedlichen
1221 Schnittmustern erzeugt. Trotzdem wurden nach 1.000.000 Iterationen nur 385
1222 Schnittmuster gefunden, die zu einem Schnittmuster in der Menge äquivalent
1223 waren. Daraus ergibt sich eine Abschätzung von $2,6 \cdot 10^8$
1224 unterschiedlichen Schnittmustern -- zwei Zehnerpotenzen mehr als bei den
1225 vorherigen Sortiernetzwerken, aber immer noch fünf Zehnerpotenzen kleiner als
1226 die Anzahl der \emph{möglichen} Schnittmuster.
1227
1228 \newpage
1229 \section{Der \textsc{SN-Evolution}-Algorithmus}
1230 \label{sect:sn-evolution}
1231
1232 Der \textsc{SN-Evolution}-Algorithmus ist ein \emph{evolutionärer
1233 Algorithmus}, der die in den vorherigen Abschnitten beschriebenen Mischer
1234 (Abschnitt~\ref{sect:konstruktive_netzwerke}) und Schnittmuster
1235 (Abschnitt~\ref{sect:leitungen_entfernen}) verwendet, um „möglichst gute“
1236 Sortiernetzwerke zu erzeugen. Was ein „gutes“ Sortiernetzwerk ausmacht, wird
1237 in Abschnitt~\ref{sect:bewertung} behandelt.
1238
1239 \subsection{Bewertungsfunktion}\label{sect:bewertung}
1240
1241 Um Sortiernetzwerke überhaupt optimieren zu können, muss zunächst die
1242 {\em Güte} eines Netzwerks definiert werden. Prinzipiell gibt es zwei Ziele,
1243 die bei Sortiernetzwerken verfolgt werden können:
1244 \begin{itemize}
1245   \item Möglichst wenige Komparatoren („effizient“)
1246   \item Möglichst wenige Schichten („schnell“)
1247 \end{itemize}
1248
1249 Diese Ziele führen im Allgemeinen zu unterschiedlichen Netzwerken. Das
1250 effizienteste bekannte Sortiernetzwerk für 16~Eingänge besteht aus
1251 60~Komparatoren in 10~Schichten. Das schnellste bekannte 16-Sortiernetzwerk
1252 besteht aus 61~Komparatoren in nur 9~Schichten.
1253
1254 Eine Gütefunktion, die die beiden Ziele "`effizient"' und "`schnell"'
1255 berücksichtigen kann, hat die folgende allgemeine Form:
1256 \begin{equation}
1257   \operatorname{Guete}(S) = w_{\mathrm{Basis}}
1258                     + w_{\mathrm{Komparatoren}} \cdot \left|S\right|_\mathrm{Komparatoren}
1259                     + w_{\mathrm{Schichten}} \cdot \left|S\right|_\mathrm{Schichten}
1260 \end{equation}
1261 Die Parameter $w_{\mathrm{Komparatoren}}$ und $w_{\mathrm{Schichten}}$ dienen
1262 dabei der Festlegung des Optimierungsziels. Wenn einer der beiden Parameter
1263 gleich Null ist, wird nur das jeweils andere Ziel verfolgt. Sind beide
1264 Parameter gleich Null, werden alle Netzwerke mit der gleich Güte bewertet --
1265 jegliche Ergebnisse sind dann rein zufälliger Natur.\footnote{Dass dies nicht
1266 so schlecht ist wie man intuitiv vermuten könnte, zeigt der
1267 \textsc{SN-Markov}-Algorithmus in Abschnitt~\ref{sect:markov}.}
1268
1269 Da möglichst effiziente und schnelle Sortiernetzwerke gefunden werden sollen,
1270 ist ein kleiner Wert von $\operatorname{Guete}(S)$ besser als ein großer Wert.
1271 Das heißt, dass das Ziel von \textsc{SN-Evolution} ist,
1272 $\operatorname{Guete}(S)$ zu \emph{minimieren}.
1273
1274 Mit dem Parameter $w_{\mathrm{Basis}}$ kann auf die Selektion Einfluss
1275 genommen werden. Ist er groß, wird der relative Unterschied der Güten
1276 verschiedener Netzwerke kleiner, was die {\em Exploration}, das Absuchen des
1277 gesamten Lösungsraums, begünstigt. Wählt man $w_{\mathrm{Basis}}$ hingegen
1278 klein -- in Abhängigkeit von den anderen beiden Parametern sind auch negative
1279 Werte möglich -- werden die relativen Unterschiede groß. Dadurch wird die {\em
1280 Exploitation}, das Finden (lokaler) Optima, bevorzugt.
1281
1282 Diese Parameter haben einen großen Einfluss auf die Geschwindigkeit, mit der
1283 der \textsc{SN-Evolution}-Algorithmus konvergiert und ob er tatsächlich gute
1284 Lösungen findet oder sich in \emph{lokalen} Optima verrennt. Leider gibt es
1285 kein Patentrezept für die Wahl der Parameter, so dass für verschiedene
1286 Leitungszahlen und Mischer-Typen experimentiert werden muss.
1287
1288 Als guter Standardansatz für \textsc{SN-Evolution} haben sich die folgenden
1289 Werte herausgestellt:
1290 \begin{eqnarray*}
1291 w_{\mathrm{Basis}} &=& 0 \\
1292 w_{\mathrm{Komparatoren}} &=& 1 \\
1293 w_{\mathrm{Schichten}} &=& \left|S\right|_\mathrm{Leitungen}
1294 \end{eqnarray*}
1295
1296 \subsection{Selektion}
1297
1298 Die \emph{Selektion} sorgt dafür, dass bessere Individuen eine größere
1299 Wahrscheinlichkeit haben zur nächsten Generation beizutragen. Diese
1300 Ungleichbehandlung von Individuen verschiedener Güte ist der Grund für das
1301 Streben des Algorithmus nach besseren Lösungen.
1302
1303 Obwohl dieser Vorteil für gute Individuen intuitiv als sehr gering erscheint,
1304 ist es sehr häufig, dass die \emph{Exploitation} überhand gewinnt und der
1305 Algorithmus vorschnell in Richtung eines lokalen Optimums optimiert.
1306
1307 Die in \textsc{SN-Evolution} implementierte Selektion lässt sich mithilfe von
1308 Pseudocode wie folgt beschreiben:
1309 \begin{verbatim}
1310   Gütesumme := 0
1311   Auswahl := (leer)
1312   
1313   für jedes Individuum in Population
1314   {
1315     reziproke Güte := 1.0 / Guete(Individuum)
1316     Wahrscheinlichkeit P := reziproke Güte / (Gütesumme + reziproke Güte)
1317     Gütesumme := Gütesumme + reziproke Güte
1318   
1319     mit Wahrscheinlichkeit P
1320     {
1321       Auswahl := Individuum
1322     }
1323   }
1324   gib Auswahl zurück
1325 \end{verbatim}
1326
1327 \subsection{Rekombination}
1328 \label{sect:sn-evolution:rekombination}
1329
1330 Bei der Rekombination werden zwei Individuen --~hier Sortiernetzwerke~-- zu
1331 einer neuen Lösung kombiniert. Dazu verwenden wir einen Mischer, zum Beispiel
1332 den {\em bitonen Mischer} (Abschnitt~\ref{sect:der_bitone_mischer}) oder den
1333 \emph{Odd-Even}-Mischer (Abschnitt~\ref{sect:der_odd_even_mischer}), um die
1334 beiden Netzwerke zu einem Netzwerk mit $2n$~Leitungen zusammenzufügen.
1335 Anschließend werden zufällig $n$~Leitungen mit einem $n$-Schnittmuster wie in
1336 Abschnitt~\ref{sect:leitungen_entfernen} beschrieben entfernt.
1337
1338 Dieses Verfahren hat den großen Vorteil, dass es die Sortiereigenschaft
1339 erhält. Entsprechend muss nicht aufwendig überprüft werden, ob das
1340 Komparatornetzwerk die Sortiereigenschaft besitzt. Der Nachteil ist, dass
1341 nicht alle Sortiernetzwerke auf diese Art und Weise erzeugt werden können.
1342
1343 \subsection{Mutation}
1344
1345 Zu einem vollständigen evolutionären Algorithmus gehört außerdem die Mutation
1346 --~eine zufällige Veränderung einer Lösung. Leider ist es nicht möglich ein
1347 Sortiernetzwerk zufällig zu verändern und dabei die Sortiereigenschaft zu
1348 erhalten. Selbst das \emph{Hinzufügen} eines zufälligen Komparators kann diese
1349 Eigenschaft zerstören.
1350
1351 Nach einer Mutation müsste man überprüfen, ob das neue Komparatornetzwerk die
1352 Sortiereigenschaft noch besitzt. Nach heutigem Wissenstand ist diese
1353 Überprüfung nur mit exponentiellem Aufwand möglich, etwa durch das
1354 Ausprobieren aller $2^n$~Bitmuster, wie in Abschnitt~\ref{sect:0-1-prinzip}
1355 beschrieben.
1356
1357 Um das Potenzial einer Mutation abzuschätzen wurde in \textsc{SN-Evolution}
1358 eine Überprüfung eingebaut: Unmittelbar vor dem Einfügen in die Population
1359 überprüft eine Funktion die Notwendigkeit jedes einzelnen Komparators. Dazu
1360 wird nacheinander jeder Komparator entfernt und überprüft, ob das verbleibende
1361 Netzwerk die Sortiereigenschaft noch besitzt. Trotz des hohen Rechenaufwands
1362 -- bei 16-Sortiernetzwerken sind gut 4~Millionen Tests notwendig, um alle
1363 Komparatoren zu überprüfen -- waren die Ergebnisse ernüchternd: Nach circa
1364 1~Million Iterationen mit 16-Sortiernetzwerken fand der so modifizierte
1365 Algorithmus keinen einzigen Komparator, den er hätte entfernen können. Daher
1366 wurde beim \textsc{SN-Evolution}-Algorithmus auf eine Mutation verzichtet.
1367
1368 \subsection[Bitoner Mischer]{Versuche mit dem bitonen Mischer}
1369
1370 \begin{figure}
1371   \begin{center}
1372     \input{images/16-e1-bitonic-1296542566.tex}
1373   \end{center}
1374   \caption{Sortiernetzwerk mit 16~Leitungen und 67~Komparatoren in
1375     10~Schichten. Das Netzwerk wurde von dem Algorithmus
1376     \textsc{SN-Evolution} unter Verwendung des \emph{bitonen Mischers}
1377     erzeugt.}
1378   \label{fig:16-e1-bitonic-1296542566}
1379 \end{figure}
1380
1381 Verwendet man den \emph{bitonen Mischer} in der Rekombinationsphase von
1382 \textsc{SN-Evolution}, so erhält man Netzwerke wie das in
1383 Abbildung~\ref{fig:16-e1-bitonic-1296542566} dargestellte: Der Algorithmus
1384 wurde mit dem \emph{Odd-Even-Transpositionsort}-Netzwerk als triviale
1385 Initiallösung gestartet. Das Ergebnis ist ein Netzwerk, das effizienter ist
1386 als das \emph{bitone Mergesort}-Netzwerk: \bs{16} benötigt 80~Komparatoren,
1387 das Sortiernetzwerk in Abbildung~\ref{fig:16-e1-bitonic-1296542566} benötigt
1388 lediglich~67. Die Effizienz des \emph{Odd-Even-Mergesort}-Netzwerks wurde
1389 leider mit keiner Leitungszahl erreicht.
1390
1391 \subsection[Odd-Even-Mischer]{Versuche mit dem Odd-Even-Mischer}
1392
1393 \begin{figure}
1394   \begin{center}
1395     \input{images/16-e1-oddeven-1296543330.tex}
1396   \end{center}
1397   \caption{Sortiernetzwerk mit 16~Leitungen und 63~Komparatoren in
1398     10~Schichten. Das Netzwerk wurde von dem Algorithmus
1399     \textsc{SN-Evolution} unter Verwendung des \emph{Odd-Even}-Mischers
1400     erzeugt.}
1401   \label{fig:16-e1-oddeven-1296543330}
1402 \end{figure}
1403
1404 Leider lies sich das Ergebnis des bitonen Mischers -- die von
1405 \textsc{SN-Evolution} ausgegebenen Netzwerke waren effizienter als das
1406 rekursiv aus dem verwendeten Mischer aufgebaute Sortiernetzwerk -- mit dem
1407 \emph{Odd-Even-Merge}-Netzwerk nicht wiederholen. Zwar erreichen die
1408 Sortiernetzwerke, die \textsc{SN-Evolution} unter Verwendung des
1409 \emph{Odd-Even}-Mischers findet, das \emph{Odd-Even-Mergesort}-Netzwerk
1410 bezüglich Geschwindigkeit und Effizienz, ein Beispiel hierfür ist in
1411 Abbildung~\ref{fig:16-e1-oddeven-1296543330} zu sehen. Sortiernetzwerkde, die
1412 effizienter als $\operatorname{OES}(n)$ sind, konnten leider nicht beobachtet
1413 werden. Wenn $n$ keine Zweietpotenz ist, kann \textsc{SN-Evolution} unter
1414 Umständen Sortiernetzwerke ausgeben, die schneller als \oes{n} sind.
1415
1416 %\begin{figure}
1417 %\begin{center}
1418 %\input{images/08-e2-1237993371.tex}
1419 %\end{center}
1420 %\caption{{\tt images/08-e2-1237993371.tex}: 19~Komparatoren in 6~Schichten}
1421 %\label{fig:08-e2-1237993371}
1422 %\end{figure}
1423 %
1424 %\begin{figure}
1425 %\begin{center}
1426 %\input{images/09-e2-1237997073.tex}
1427 %\end{center}
1428 %\caption{{\tt images/09-e2-1237997073.tex}: 25~Komparatoren in 8~Schichten}
1429 %\label{fig:09-e2-1237997073}
1430 %\end{figure}
1431 %
1432 %\begin{figure}
1433 %\begin{center}
1434 %\input{images/09-e2-1237999719.tex}
1435 %\end{center}
1436 %\caption{{\tt images/09-e2-1237999719.tex}: 25~Komparatoren in 7~Schichten}
1437 %\label{fig:09-e2-1237999719}
1438 %\end{figure}
1439 %
1440 %\begin{figure}
1441 %\begin{center}
1442 %\input{images/10-e2-1239014566.tex}
1443 %\end{center}
1444 %\caption{{\tt images/10-e2-1239014566.tex}: 29~Komparatoren in 8~Schichten}
1445 %\label{fig:10-e2-1239014566}
1446 %\end{figure}
1447
1448 %\input{shmoo-aequivalenz.tex}
1449
1450 \newpage
1451 \section{Der \textsc{SN-Evolution-Cut}-Algorithmus}
1452 \label{sect:sn-evolution-cut}
1453
1454 Das Programm \textsc{SN-Evolution-Cut} implementiert einen evolutionären
1455 Algorithmus, der zu einem gegebenen Sortiernetzwerk und einer gewünschten
1456 Leitungszahl ein Schnittmuster sucht, dass ein Sortiernetzwerk mit einer
1457 möglichst geringen Anzahl von Komparatoren und Schichten ergibt. Zur Bewertung
1458 von Sortiernetzwerken siehe auch Abschnitt~\ref{sect:bewertung}. Mit diesem
1459 Algorithmus wurden zu einer Reihe von „interessanten“ Netzwerken möglichst
1460 gute Schnittmuster gesucht.
1461
1462 Der \textsc{SN-Evolution-Cut}-Algorithmus verwendet \emph{Schnittmuster}, die
1463 in Abschnitt~\ref{sect:anzahl_schnittmuster} definiert wurden, als Individuen.
1464 Ein Individuum besteht aus einer Liste von $n$~Zahlen, die entweder 1, $-1$
1465 oder 0 sind. Dieser Werte entsprechen Maximum, Minimum und unbelegt. Bei einem
1466 $k$-Schnittmuster sind genau $k$ Zahlen nicht Null.
1467
1468 Um zwei Individuen zu rekombinieren werden die ersten $r$~Werte des einen
1469 Schnittmusters und die letzten ${n-r}$~Schnitte des zweiten Schnittmusters
1470 verwendet. $r$ ist eine Zufallsvariable mit $0 \leqq r \leqq n$. Anschließend
1471 werden zufällig Werte auf Null beziehungsweise 1 oder $-1$ gesetzt, um die
1472 Anzahl der Schnitte zu korrigieren.
1473
1474 Die Mutation vertauscht entweder die Werte von zwei zufälligen Positionen oder
1475 multipliziert den Wert einer Leitung mit $-1$, um die Schnittrichtung zu
1476 invertieren.
1477
1478 \subsection[Bitones Mergesort-Netzwerk]{Versuche mit dem bitonen Mergesort-Netzwerk}
1479
1480 \textit{Moritz Mühlenthaler} und \textit{Rolf Wanka} zeigen in~\cite{MW2010},
1481 wie man einen bitonen Mischer, der nach Batchers Methode konstruiert wurde,
1482 durch systematisches Entfernen von Leitungen in einen ebenfalls bitonen
1483 Mischer mit der Hälfte der Leitungen transformiert. Diese alternativen Mischer
1484 sparen im Vergleich zu den Mischern, die nach Batchers Methode konstruiert
1485 werden, Komparatoren ein.
1486
1487 Beispielsweise geben \textit{Mühlenthaler} und \textit{Wanka} ein
1488 Sortiernetzwerk mit 16~Eingängen an, das mithilfe der alternativen Mischer
1489 konstruiert wurde. Dieses Sortiernetzwerk be\-nö\-tigt 68~Komparatoren,
1490 12~weniger als das \emph{bitone Mergesort}-Netzwerk nach Batchers Methode.
1491 Gegenüber Batchers Methode sparen so konstruierte Sortiernetzwerke
1492 ${\frac{1}{4}n(\log n - 1)}$ Komparatoren ein.
1493
1494 \begin{figure}
1495   \begin{center}
1496     \input{images/16-ec-from-bs32.tex}
1497   \end{center}
1498   \caption{Sortiernetzwerk mit 16~Leitungen und 68~Komparatoren in
1499     10~Schichten. Das Netzwerk wurde von dem Algorithmus
1500     \textsc{SN-Evolution-Cut} aus dem \emph{bitonen Mergesort-Netzwerk}
1501     $\operatorname{BS}(32)$ durch 16~Schnitte erzeugt.}
1502   \label{fig:16-ec-from-bs32}
1503 \end{figure}
1504
1505 \begin{figure}
1506   \begin{center}
1507     \input{images/16-ec-from-bs32-normalized.tex}
1508   \end{center}
1509   \caption{Sortiernetzwerk mit 16~Leitungen und 68~Komparatoren in
1510     10~Schichten. Das Netzwerk wurde von dem Algorithmus
1511     \textsc{SN-Evolution-Cut} aus dem bitonen Mergesort-Netzwerk
1512     $\operatorname{BS}(32)$ durch 16~Schnitte erzeugt.}
1513   \label{fig:16-ec-from-bs32-normalized}
1514 \end{figure}
1515
1516 Startet man {\sc SN-Evolution-Cut} mit dem \emph{bitonen Mergesort}-Netzwerk
1517 $\operatorname{BS}(32)$ und der Vorgabe 16~Leitungen zu entfernen, liefert der
1518 Algorithmus Sortiernetzwerke, die ebenfalls aus 68~Komparatoren bestehen. Ein
1519 16-Sortiernetzwerk, das auf diese Weise generiert wurde, ist in den
1520 Abbildungen~\ref{fig:16-ec-from-bs32} und~\ref{fig:16-ec-from-bs32-normalized}
1521 zu sehen. Abbildung~\ref{fig:16-ec-from-bs32} zeigt $\operatorname{BS}(32)$
1522 und das Schnittmuster ${\operatorname{MIN}(0, 5, 9, 11, 15, 17, 20, 22, 26,
1523 29, 30)}$, ${\operatorname{MAX}(2, 4, 13, 19, 24)}$, das durch
1524 \textsc{SN-Evolution-Cut} gefunden wurde.
1525 Abbildung~\ref{fig:16-ec-from-bs32-normalized} zeigt das 16-Sortiernetzwerk
1526 nachdem das Schnittmuster angewandt und das Netzwerk normalisiert wurde. Eine
1527 Ähnlichkeit zu $\operatorname{BS}(32)$ oder $\operatorname{BS}(16)$ ist in
1528 diesem Netzwerk nicht mehr erkennbar -- insbesondere die ersten Schichten des
1529 Netzwerks scheinen rein zufällig zu sein.
1530
1531 \begin{figure}
1532   % 0:MAX 1:MAX 4:MIN 6:MAX 9:MAX 11:MAX 14:MIN 15:MAX 18:MAX 19:MAX 21:MAX
1533   % 23:MIN 24:MAX 25:MAX 30:MIN 31:MIN 32:MAX 34:MAX 36:MIN 37:MAX 40:MAX
1534   % 43:MAX 46:MIN 47:MAX 48:MAX 49:MAX 54:MIN 55:MAX 56:MAX 58:MIN 60:MAX
1535   % 63:MAX
1536   \begin{center}
1537     \input{images/32-ec-from-bs64.tex}
1538   \end{center}
1539   \caption{Sortiernetzwerk mit 32~Leitungen und 206~Komparatoren in
1540     15~Schichten. Das Netzwerk wurde von dem Algorithmus
1541     \textsc{SN-Evolution-Cut} aus dem bitonen Mergesort-Netzwerk
1542     $\operatorname{BS}(64)$ durch 32~Schnitte erzeugt. Das zugehörige
1543     Schnittmuster ist
1544     $\operatorname{MIN}(4, 14, 23, 30, 31, 36, 46, 54, 58)$,
1545     $\operatorname{MAX}(0, 1, 6, 9, 11, 15, 18, 19, 21, 24, 25, 32, 34, 37,
1546     40, 43, 47, 48, 49, 55, 56, 60, 63)$.}
1547   \label{fig:32-ec-from-bs64}
1548 \end{figure}
1549
1550 Das Ergebnis von \textit{Mühlenthaler} und \textit{Wanka}, die den bitonen
1551 Mischer optimiert und anschließend aus diesen Mischern ein Sortiernetzwerk
1552 konstruiert haben, kann demnach auch erreicht werden, wenn
1553 $\operatorname{BS}(32)$ auf ein 16-Sortiernetzwerk reduziert wird. Bei anderen
1554 Größen, beispielsweise wenn man $\operatorname{BS}(64)$ auf ein
1555 32-Sortiernetzwerk reduziert, kann das Ergebnis sogar noch übertroffen werden,
1556 wie in Abbildung~\ref{fig:32-ec-from-bs64} zu sehen: Ein nach Batchers Methode
1557 konstruiertes Sortiernetzwerk benötigt 240~Komparatoren, ein aus den
1558 optimierten Mischern aufgebautes Netzwerk verbessert die Kosten auf
1559 208~Komparatoren. Das in Abbildung~\ref{fig:32-ec-from-bs64} dargestellte
1560 Sortiernetzwerk benötigt lediglich 206~Komparatoren. Die Komparatoren aller
1561 dieser Netzwerke können in 15~Schichten angeordnet werden, so dass die
1562 Geschwindigkeit dieser Sortiernetzwerke gleich ist.
1563
1564 Leider sind die Schnittmuster, die \textsc{SN-Evolution-Cut} ausgibt, sehr
1565 unregelmäßig. Bisher ist es nicht gelungen eine Konstruktionsanweisung für
1566 gute Schnittmuster anzugeben.
1567
1568 Entscheidend für das Ergebnis eines Schnittmusters scheint beim \emph{bitonen
1569 Mergesort}-Netzwerk die Aufteilung der Minimum- und Maximumschnitte zu sein.
1570 Von Hundert 16-Schnittmustern für $\operatorname{BS}(32)$, die in
1571 Sortiernetzwerken mit 68~Komparatoren in 10~Schichten resultieren, hatten 73
1572 ein Verhältnis von $5/11$, 13 hatten ein Verhältnis von $4/12$ und 14 hatten
1573 ein Verhältnis von $3/13$ Minimum- beziehungsweise Maximumschnitten. Da sich
1574 die Schnittmuster aufgrund der Symmetrie des bitonen Mergesort-Netzwerks
1575 leicht invertieren lassen, werden der Fall, dass es mehr Minimumschnitte, und
1576 der Fall, dass es mehr Maximumschnitte gibt, nicht unterschieden.
1577
1578 \begin{figure}
1579   \centering
1580   \subfigure[11-Sortiernetzwerk aus 37~Komparatoren in 9~Schichten. Das
1581   Netzwerk wurde von \textsc{SN-Evolution-Cut} aus \bs{22} erzeugt.]{\input{images/11-ec-from-bs22-fast.tex}\label{fig:11-ec-from-bs22-fast}}
1582   \subfigure[12-Sortiernetzwerk aus 42~Komparatoren in 9~Schichten. Das
1583   Netzwerk wurde von \textsc{SN-Evolution-Cut} aus \bs{24} erzeugt.]{\input{images/12-ec-from-bs24-fast.tex}\label{fig:12-ec-from-bs24-fast}}
1584   \caption{Startet man \textsc{SN-Evolution-Cut} mit \bs{22} und \bs{24}, kann
1585   der Algorithmus schnelle Sortiernetzwerke ausgeben.}
1586   \label{fig:11-12-ec-from-bs22-bs24}
1587 \end{figure}
1588
1589 Verwendet man als Eingabe für \textsc{SN-Evolution-Cut} Instanzen des
1590 \emph{bitonen Mergesort}-Netzwerks, deren Leitungszahl keine Zweierpotenz ist,
1591 können Sortiernetzwerke zurückgegeben werden, die sowohl schneller als auch
1592 effizienter als das entsprechende \emph{bitone Mergesort}-Netzwerk sind. Die
1593 folgende Tabelle listet einige interessante Fälle auf. Die Eingabe für
1594 \textsc{SN-Evolution-Cut} war jeweils das \emph{bitone Mergesort}-Netzwerk mit
1595 der doppelten Leitungszahl. Die Abbildungen~\ref{fig:11-12-ec-from-bs22-bs24}
1596 und~\ref{fig:23-ec-from-bs46} zeigen beispielhaft ein 11-, 12- und
1597 23-Sortiernetzwerk, die aus \bs{22}, \bs{24} und \bs{46} generiert wurden.
1598
1599 \begin{center}
1600 \begin{tabular}{|r|r|r|r|r|}
1601 \hline
1602 Leitungen  & Komparatoren & Schichten & Komparatoren & Schichten \\
1603            & \textsc{SN-EC} & \textsc{SN-EC} & \bs{n} &
1604            \bs{n} \\
1605 \hline
1606 11 &  37 &  9 &  39 & 10 \\
1607 12 &  42 &  9 &  46 & 10 \\
1608 19 &  93 & 13 &  98 & 14 \\
1609 20 & 102 & 13 & 106 & 14 \\
1610 % 20: # sn-cut 2:MAX 3:MIN 4:MIN 9:MIN 10:MIN 13:MIN 14:MIN 15:MIN 19:MIN 20:MAX 24:MAX 26:MIN 27:MAX 29:MIN 31:MAX 33:MIN 34:MAX 35:MIN 37:MIN 39:MAX
1611 21 & 109 & 14 & 114 & 15 \\
1612 22 & 116 & 14 & 123 & 15 \\
1613 23 & 124 & 14 & 133 & 15 \\
1614 \hline
1615 \end{tabular}
1616 \end{center}
1617
1618 \begin{figure}
1619   \begin{center}
1620     \input{images/23-ec-from-bs46-fast.tex}
1621   \end{center}
1622   \caption{23-Sortiernetzwerk mit 124~Komparatoren in 14~Schichten. Das
1623   Netzwerk wurde von \textsc{SN-Evolution-Cut} aus \bs{46} mit dem
1624   Schnittmuster $\operatorname{MIN}(2, 4, 9, 12, 20, 22, 28, 30, 32, 33, 37,
1625   38, 41)$, $\operatorname{MAX}(1, 5, 16, 19, 21, 24, 25, 35, 36, 43)$
1626   erzeugt.}
1627   \label{fig:23-ec-from-bs46}
1628 \end{figure}
1629
1630 Dass die Ergebnisse von \textsc{SN-Evolution-Cut} keine erkennbare Struktur
1631 haben, ist jedoch kein Eigenschaft des Algorithmus, sondern hängt insbesondere
1632 von der Eingabe ab. Wird \textsc{SN-Evolution-Cut} beispielsweise mit dem
1633 \emph{Odd-Even-Transpositionsort-Netzwerk} $\operatorname{OET}(n)$ und
1634 $m$~Schnitten gestartet, so ist das beste Ergebnis immer das
1635 $\operatorname{OET}(n-m)$-Netzwerk. 
1636
1637 \subsection[Pairwise-Sorting-Netzwerk]{Versuche mit dem Pairwise-Sorting-Netzwerk}
1638
1639 Anders verhält sich das \emph{Pairwise-Sorting-Netzwerk}
1640 $\operatorname{PS}(n)$, das \textit{Ian Parberry} in seiner Arbeit „The
1641 Pairwise Sorting Network“ \cite{P1992} definiert. Startet man
1642 \textsc{SN-Evolution-Cut} mit $\operatorname{PS}(32)$ und der Vorgabe,
1643 16~Leitungen zu entfernen, erhält man ein Sortiernetzwerk, dass die gleiche
1644 Anzahl Komparatoren und Schichten hat wie $\operatorname{PS}(16)$ und
1645 $\operatorname{OES}(16)$. Eines dieser Sortiernetzwerke ist in
1646 Abbildung~\ref{fig:16-ec-from-ps32} dargestellt.
1647
1648 \begin{figure}
1649   \begin{center}
1650     \input{images/16-ec-from-ps32.tex}
1651   \end{center}
1652   \caption{Sortiernetzwerk mit 16~Leitungen und 63~Komparatoren in
1653     10~Schichten. Das Netzwerk wurde von dem Algorithmus
1654     \textsc{SN-Evolution-Cut} aus dem \emph{Pairwise-Sorting-Netzwerk}
1655     $\operatorname{PS}(32)$ durch 16~Schnitte erzeugt.}
1656   \label{fig:16-ec-from-ps32}
1657 \end{figure}
1658
1659 Obwohl das \emph{Pairwise-Sorting-Netzwerk} den \emph{Odd-Even}-Mischer nicht
1660 einsetzt und auch nicht auf einem Mischer basiert, ist das
1661 \emph{Odd-Even-Merge}-Netzwerk $\operatorname{OEM}(8,8)$ im Sortiernetzwerk in
1662 Abbildung~\ref{fig:16-ec-from-ps32} eindeutig erkennbar (Schichten~7--10). In
1663 den Schichten~1--6 erkennt man zwei unabhängige Sortiernetzwerke, die
1664 strukturell sehr ähnlich zu $\operatorname{PS}(8)$ sind -- lediglich die
1665 Schichten~1 und~2 sowie 4~und~5 sind vertauscht.
1666
1667 \begin{figure}
1668   \begin{center}
1669     \input{images/32-pairwise-cut-16-pairwise.tex}
1670   \end{center}
1671   \caption{Das \ps{32}-Netzwerk mit 8~Maximum- und 8~Minimumschnitten. Gut zu
1672     sehen sind die verbleibenden Komparatoren, die das \ps{16}-Netzwerk
1673     bilden.}
1674   \label{fig:ps16-from-ps32}
1675 \end{figure}
1676
1677 Für das \emph{Pairwise-Sorting-Netzwerk} ist es vergleichsweise einfach
1678 regelmäßige Schnittmuster anzugeben, die aus dem Netzwerk einen kleineres
1679 schnelles und effizientes Sortiernetzwerk erzeugen. Beispielsweise führt das
1680 einfache Schnittmuster
1681 \begin{displaymath}
1682 \textit{Eingang}_i = \left\{ \begin{array}{rl}
1683   -\infty & \quad \textrm{falls } i < \frac{1}{4} n \\
1684    \infty & \quad \textrm{falls } i \geqq \frac{3}{4} n \\
1685         ? & \quad \mathrm{sonst}
1686   \end{array} \right.
1687 \end{displaymath}
1688 für $\operatorname{PS}\left(n = 2^d\right)$ zum Sortiernetzwerk
1689 $\operatorname{PS}\left(\frac{1}{2}n\right)$. Die Art und Weise, mit der
1690 dieses Schnittmuster Komparatoren eliminiert und welche Komparatoren das
1691 verbleibende Netzwerk ausmachen, ist in Abbildung~\ref{fig:ps16-from-ps32}
1692 dargestellt. Die matt blauen und roten Leitungen und Komparatoren sind
1693 diejenigen, die Aufgrund eines Minimums oder eines Maximums im resultierenden
1694 Netzwerk nicht mehr enthalten sind. Da die Minima und Maxima bereits auf den
1695 „richtigen“ Leitungen angelegt werden, müssen keine Leitungen vertauscht
1696 werden und das Ergebnis ist bereits normalisiert. Daher ist das resultierende
1697 Netzwerk in schwarz gut zu erkennen.
1698
1699 \begin{figure}
1700   \begin{center}
1701     \input{images/16-pairwise.tex}
1702   \end{center}
1703   \caption{Das $\operatorname{PS}(16)$-Sortiernetzwerk mit 8~Schnitten
1704     ($\operatorname{MIN}(0, 2, 4, 6), \operatorname{MAX}(9, 11, 13, 15)$). Das
1705     resultierende 8-Sortiernetzwerk ist $\operatorname{OES}(8)$.}
1706   \label{fig:16-pairwise}
1707 \end{figure}
1708
1709 Ein Spezialfall ergibt sich, wenn man \textsc{SN-Evolution-Cut} auf
1710 $\operatorname{PS}(16)$ anwendet: In diesem Fall kann man durch ein
1711 8-Schnittmuster das \emph{Odd-Even-Mergesort}-Netzwerk \oes{8} erhalten. Für
1712 größere Sortiernetzwerke ist dies hingegen nicht mehr möglich, beispielsweise
1713 kann $\operatorname{PS}(32)$ nicht durch ein 16-Schnittmuster in \oes{16}
1714 konvertiert werden. Die Verwandtschaft von $\operatorname{PS}(n)$ und \oes{n}
1715 untersucht \textit{Moritz Mühlenthaler} ausführlich in~\cite{M2009}.
1716
1717 \subsection[Odd-Even-Mergesort-Netzwerk]{Versuche mit dem Odd-Even-Mergesort-Netzwerk}
1718 \label{sect:sn-evolution-cut:oes}
1719
1720 In Abschnitt~\ref{sect:anzahl_schnittmuster} wurde bereits untersucht, wie
1721 viele \emph{unterschiedliche} Schnittmuster die konstruktiven Sortiernetzwerke
1722 $\operatorname{OES}(32)$, $\operatorname{BS}(32)$ und $\operatorname{PS}(32)$
1723 besitzen. Eines der Ergebnisse war, dass von diesen Sortiernetzwerken das
1724 \emph{Odd-Even-Mergesort}-Netzwerk die wenigsten unterschiedlichen
1725 16-Schnittmuster besitzt -- nur etwa $5,2$~Millionen. Entsprechend ist es
1726 wenig verwunderlich, dass \textsc{SN-Evolution-Cut} gestartet mit
1727 $\operatorname{OES}(32)$ sehr schnell\footnote{Auf dem Computer, auf dem diese
1728 Arbeit geschrieben wurde, dauerte es in den meisten Fällen weniger als eine
1729 Sekunde bis ein entsprechendes Schnittmuster gefunden wurde.} ein gutes
1730 16-Schnittmuster findet.
1731
1732 Eines der 16-Schnittmuster für \oes{32}, die ein Sortiernetzwerk erzeugen, das
1733 bezüglich Effizienz und Geschwindigkeit identisch ist zu \oes{16}, ist
1734 $\operatorname{MIN}(1, 6, 11, 14, 17, 23, 26, 29)$, $\operatorname{MAX}(2, 7,
1735 8,$ $13, 18, 21, 27, 31)$. Das Schnittmuster ist in
1736 Abbildung~\ref{fig:16-ec-from-oes32-cut} veranschaulicht, das resultierende
1737 Netzwerk ist in Abbildung~\ref{fig:16-ec-from-oes32} zu sehen.
1738
1739 \begin{figure}
1740   \begin{center}
1741     \input{images/16-ec-from-oes32-cut.tex}
1742   \end{center}
1743   \caption{Visualisierung eines 16-Schnittmusters, das auf
1744   $\operatorname{OES}(32)$ angewendet wieder ein schnelles und effizientes
1745   Sortiernetzwerk ergibt.}
1746   \label{fig:16-ec-from-oes32-cut}
1747 \end{figure}
1748
1749 \begin{figure}
1750   \begin{center}
1751     \input{images/16-ec-from-oes32.tex}
1752   \end{center}
1753   \caption{16-Sortiernetzwerk mit 63~Komparatoren in 10~Schichten. 
1754     Das Netzwerk wurde von dem Algorithmus \textsc{SN-Evolution-Cut} aus dem
1755     \emph{Odd-Even-Mergesort}-Netzwerk $\operatorname{OES}(32)$ durch
1756     16~Schnitte erzeugt.}
1757   \label{fig:16-ec-from-oes32}
1758 \end{figure}
1759
1760 Bei diesem Schnittmuster fällt auf, dass es für jeweils vier Eingänge (0--3,
1761 4--7, \dots, 28--31) einen Minimum- und einen Maximumschnitt gibt. Aus dieser
1762 Beobachtung kann man das regelmäßige Schnittmuster
1763 \begin{displaymath}
1764 \textit{Eingang}_i = \left\{ \begin{array}{rl}
1765    \infty & \quad \textrm{falls } i \bmod 4 = 0 \\
1766   -\infty & \quad \textrm{falls } i \bmod 4 = 3 \\
1767         ? & \quad \mathrm{sonst}
1768   \end{array} \right.
1769 \end{displaymath}
1770 ableiten. Es entfernt die Hälfte der Leitungen, vorausgesetzt die Anzahl der
1771 Leitungen ist durch Vier teilbar. Das Schnittmuster erzeugt effiziente
1772 Netzwerke, wenn die Anzahl der Leitungen $n = 2^d$ eine Zweierpotenz ist. Ein
1773 32-Sortiernetzwerk, das mit diesem Schnittmuster aus \oes{64} erzeugt wurde,
1774 ist in Abbildung~\ref{fig:32-ec-from-oes64} zu sehen.
1775
1776 \begin{figure}
1777   \begin{center}
1778     \input{images/32-ec-from-oes64.tex}
1779   \end{center}
1780   \caption{32-Sortiernetzwerk mit 191~Komparatoren in 15~Schichten. 
1781     Das Netzwerk wurde mit einem regelmäßigen Schnittmuster aus dem
1782     \emph{Odd-Even-Mergesort}-Netzwerk \oes{64} erzeugt.}
1783   \label{fig:32-ec-from-oes64}
1784 \end{figure}
1785
1786 Wenn die Anzahl der Leitungen keine Zweierpotenz ist, erreichen die so
1787 erzeugten Sortiernetzwerke die Effizienz des
1788 \emph{Odd-Even-Mergesort}-Netzwerks nicht. Wendet man das Schnittmuster
1789 beispielsweise auf \oes{24} an, so erhält man ein Sortiernetzwerk mit
1790 43~Komparatoren -- \oes{12} kommt mit 41~Komparatoren aus. Die Geschwindigkeit
1791 beider Sortiernetzwerke ist mit 10~Schichten identisch.
1792
1793 Startet man hingegen den \textsc{SN-Evolution-Cut}-Algorithmus mit \oes{24}
1794 und dem Ziel, ein gutes 12-Schnittmuster zu finden, hängt die Ausgabe von der
1795 verwendeten Gütefunktion ab. Werden effiziente Netzwerke bevorzugt, findet der
1796 Algorithmus Schnittmuster wie $\operatorname{MIN}(6, 7, 8, 9, 16, 17, 20,
1797 22)$, $\operatorname{MAX}(2, 4, 12, 14)$, dessen Ergebnis in
1798 Abbildung~\ref{fig:12-ec-from-oes24-efficient} zu sehen ist. Das resultierende
1799 Sortiernetzwerk besteht aus 41~Komparatoren, die in 10~Schichten angeordnet
1800 werden können. Damit ist das Netzwerk bezüglich Effizienz und Geschwindigkeit
1801 gleichauf mit \oes{12}. Werden hingegen schnelle Sortiernetzwerke bevorzugt,
1802 werden stattdessen Schnittmuster wie $\operatorname{MIN}(6, 7, 11, 12, 15,
1803 16)$, $\operatorname{MAX}(1, 3, 10, 17, 20, 23)$ ausgegeben. Das Ergebnis
1804 dieses Schnittmusters ist in Abbildung~\ref{fig:12-ec-from-oes24-fast} zu
1805 sehen. Das Sortiernetzwerk besteht aus 43~Komparatoren, die in 9~Schichten
1806 angeordnet sind. Das heißt, dass das resultierende Netzwerk zwar nicht so
1807 effizient wie \oes{12}, dafür aber schneller als \oes{12} und \bs{12} ist.
1808
1809 \begin{figure}
1810   \centering
1811   \subfigure[Effizientes 12-Sortiernetzwerk aus 41~Komparatoren in
1812   10~Schichten, das von \textsc{SN-Evolution-Cut} aus dem
1813   \emph{Odd-Even-Mergesort}-Netzwerk generiert
1814   wurde.]{\input{images/12-ec-from-oes24-efficient.tex}\label{fig:12-ec-from-oes24-efficient}}
1815   \subfigure[Schnelles 12-Sortiernetzwerk aus 43~Komparatoren in 9~Schichten,
1816   das von \textsc{SN-Evolution-Cut} aus dem \emph{Odd-Even-Mergesort}-Netzwerk
1817   generiert
1818   wurde.]{\input{images/12-ec-from-oes24-fast.tex}\label{fig:12-ec-from-oes24-fast}}
1819   \caption{Startet man \textsc{SN-Evolution-Cut} mit \oes{24}, hängt das
1820   Ergebnis von der Bewertungsfunktion ab.}
1821   \label{fig:12-ec-from-oes24}
1822 \end{figure}
1823
1824 Das \oes{24}-Sortiernetzwerk ist kein Einzelfall: \textsc{SN-Evolution-Cut}
1825 findet Sortiernetzwerke, die schneller sind als das entsprechende
1826 \emph{Odd-Even-Mergesort}-Netzwerk, unter anderem für das Sortiernetzwerke mit
1827 22, 24, 38, 40, 42, 44 und 46 Leitungen. In der folgenden Tabelle sind einige
1828 schnelle Netzwerke, die von \textsc{SN-Evolution-Cut} generiert werden können,
1829 charakterisiert. Die Eingabe für \textsc{SN-Evolution-Cut} war jeweils das
1830 \emph{Odd-Even-Mergesort}-Netzwerk mit der doppelten Leitungszahl.
1831 \begin{center}
1832 \begin{tabular}{|r|r|r|r|r|}
1833 \hline
1834 Leitungen  & Komparatoren   & Schichten      & Komparatoren & Schichten \\
1835            & \textsc{SN-EC} & \textsc{SN-EC} &      \oes{n} &   \oes{n} \\
1836 \hline
1837 11 &  38 &  9 &  37 & 10 \\
1838 12 &  43 &  9 &  41 & 10 \\
1839 19 &  93 & 13 &  91 & 14 \\
1840 20 & 101 & 13 &  97 & 14 \\
1841 21 & 108 & 14 & 107 & 15 \\
1842 22 & 116 & 14 & 114 & 15 \\
1843 23 & 125 & 14 & 122 & 15 \\
1844 \hline
1845 \end{tabular}
1846 \end{center}
1847 Abbildung~\ref{fig:23-ec-from-oes46} zeigt beispielhaft ein
1848 23-Sortiernetzwerk, das aus \oes{46} generiert wurde. Bemerkenswert an diesem
1849 Sortiernetzwerk ist insbesondere, dass \textsc{SN-Evolution-Cut} mit der
1850 Eingabe \bs{46} ein besseres Ergebnis liefert als mit der Eingabe \oes{46}. In
1851 beiden Fällen wird ein Sortiernetzwerk zurückgegeben, das im Vergleich zu
1852 \bs{23} beziehungsweise \oes{23} eine Schicht einspart. Allerdings ist das
1853 Sortiernetzwerk auf Basis von \bs{46} (Abbildung~\ref{fig:23-ec-from-bs46})
1854 effizienter, da es nur 124~Komparatoren benötigt.
1855
1856 \begin{figure}
1857   \begin{center}
1858     \input{images/23-ec-from-oes46-fast.tex}
1859   \end{center}
1860   \caption{23-Sortiernetzwerk mit 125~Komparatoren in 14~Schichten. 
1861     Das Netzwerk wurde von \textsc{SN-Evolution-Cut} aus \oes{46} mit dem
1862     Schnittmuster $\operatorname{MIN}(6, 7, 9, 17, 19, 22, 29, 30, 32, 34, 38,
1863     44)$, $\operatorname{MAX}(4, 5, 11, 16, 18, 25, 31, 36, 39, 42, 45)$
1864     erzeugt.}
1865   \label{fig:23-ec-from-oes46}
1866 \end{figure}
1867
1868 \newpage
1869 \section{Der \textsc{SN-Markov}-Algorithmus}
1870 \label{sect:markov}
1871
1872 Der evolutionäre \textsc{SN-Evolution}-Algorithmus aus dem vorherigen
1873 Abschnitt verwendet immer zwei zufällige Sortiernetzwerke („Individuen“) aus
1874 einer Population. Da die beiden „Eltern“ zufällig und unabhängig voneinander
1875 ausgewählt werden, kann es vorkommen, dass das selbe Sortiernetzwerk zweimal
1876 verwendet und mit sich selbst kombiniert wird.
1877
1878 Macht man diesen Spezialfall zum Regelfall, indem man \emph{immer} das
1879 aktuelle Netzwerk mit sich selbst kombiniert und anschließend die Hälfte aller
1880 Leitungen eliminiert, lassen sich einige interessante Beobachtungen anstellen.
1881 Netzwerke, die aus einem Netzwerk $S_0$ durch die beschriebene Kombination von
1882 $S_0$ mit sich selbst und anschließendem Eliminieren der Hälfte der Leitungen
1883 hervorgehen können, heißen \emph{Nachfolger} von $S_0$.
1884
1885 Beim beschriebenen Vorgehen kann man die Sortiernetzwerke als Knoten in einem
1886 (gerichteten) Graphen betrachten. Zwei Knoten $V_0$ und $V_1$, die zwei
1887 Sortiernetzwerke $S_0$ und $S_1$ repräsentieren, sind genau dann mit einer
1888 Kante ${E_{0,1} = (V_0, V_1)}$ verbunden, wenn $S_1$ ein \emph{Nachfolger} von
1889 $S_0$ ist, das heißt dass man $S_1$ durch die Rekombination von $S_0$ mit sich
1890 selbst erzeugen kann.
1891
1892 Wie in Abschnitt~\ref{sect:anzahl_schnittmuster} beschrieben, ist die Anzahl
1893 der \emph{unterschiedlichen} Schnittmuster und damit die Anzahl der Nachfolger
1894 sehr groß. Bei den untersuchten 16-Sortiernetzwerken lag die Anzahl der
1895 Nachfolger zwar noch unter 20.000, bei den untersuchten
1896 32-Sortier\-netz\-werken wurden jedoch bereits bis zu $2,6 \cdot 10^8$
1897 unterschiedliche Schnittmuster geschätzt.
1898
1899 Der Algorithmus {\sc SN-Markov} legt auf diesem Nachfolger-Graph einen
1900 zufälligen Weg (englisch: \textit{random walk}) zurück. Er startet auf einem
1901 gegebenen Sortiernetzwerk. Um von einem Sortiernetzwerk zum Nächsten zu
1902 gelangen, rekombiniert der Algorithmus das aktuelle Sortiernetzwerk mit sich
1903 selbst und erhält so einen zufälligen Nachfolger. In Pseudocode lässt dich der
1904 Algorithmus wie folgt beschreiben:
1905
1906 \begin{verbatim}
1907   Netzwerk := Eingabe
1908   
1909   für n Iterationen
1910   {
1911     Nachfolger := kombiniere (Netzwerk, Netzwerk)
1912     Netzwerk   := Nachfolger
1913   }
1914   
1915   gib Netzwerk zurück
1916 \end{verbatim}
1917
1918 Die Graphen in Abbildung~\ref{fig:markov-comparators} zeigen die Anzahl der
1919 Komparatoren der Sortiernetzwerke, die \textsc{SN-Markov} auf seinem
1920 zufälligen Pfad durchläuft (rot). Für jeden Graphen wurde der
1921 \textsc{SN-Markov}-Algorithmus auf einem entsprechenden
1922 \emph{Odd-Even-Transpositionsort}-Netzwerk gestartet hat mindestens
1923 1.000.000~Iterationen durchlaufen. In jedem Schritt wurde die Anzahl der
1924 Komparatoren des Sortiernetzwerks bestimmt und ein entsprechender Zähler
1925 erhöht. In Abbildung~\ref{fig:markov-comparators} ist die resultierende
1926 prozentuale Verteilung zu sehen.
1927
1928 Ebenfalls in die Graphen in Abbildung~\ref{fig:markov-comparators}
1929 eingezeichnet ist eine \emph{Gamma-Verteilung} (grün), die die gemessenen
1930 Daten gut annähert. Die Gamma-Verteilung verwendet einen Offset~$\delta$, der
1931 um Eins kleiner als die kleinste erreichte Komparatorzahl gewählt wurde.
1932 Beispielsweise war die kleinste erreichte Komparatorzahl bei
1933 16-Sortiernetzwerken~63, entsprechend wurde der Offset $\delta = 63 - 1$
1934 gesetzt und die Gamma-Verteilung $g(x - 62)$ eingezeichnet. Die Parameter $k$
1935 und $\theta$, die eine Gamma-Verteilung charakterisieren, wurden mit einem
1936 Fitting-Algorithmus bestimmt. Der konkrete Offset ist als Parameter~$\delta$
1937 unter den Graphen angegeben.
1938
1939 \begin{figure}
1940   \centering
1941   \subfigure[12 Leitungen, $k = 8,267$, $\theta = 0,962$, $\delta = 40$]{\includegraphics[viewport=0 0 425 262,width=7cm]{images/markov-comparators-12-pct.pdf}}
1942   \subfigure[14 Leitungen, $k = 9,522$, $\theta = 0,867$, $\delta = 52$]{\includegraphics[viewport=0 0 425 262,width=7cm]{images/markov-comparators-14-pct.pdf}}
1943   \subfigure[16 Leitungen, $k = 17,939$, $\theta = 1,091$, $\delta = 62$]{\includegraphics[viewport=0 0 425 262,width=7cm]{images/markov-comparators-16-pct.pdf}}
1944   \subfigure[18 Leitungen, $k = 10,724$, $\theta = 0,766$, $\delta = 81$]{\includegraphics[viewport=0 0 425 262,width=7cm]{images/markov-comparators-18-pct.pdf}}
1945   \caption{Anzahl der Komparatoren von Sortiernetzwerken,
1946   die von {\sc SN-Markov} durchlaufen wurden (rot). Ebenfalls eingezeichnet
1947   ist jeweils eine \emph{Gamma-Verteilung} (grün), die eine gute Näherung der
1948   gemessenen Daten darstellt.}
1949   \label{fig:markov-comparators}
1950 \end{figure}
1951
1952 \begin{figure}
1953   \begin{center}
1954     \includegraphics[viewport=0 0 425 262,width=15cm]{images/comparison-comparators-16.pdf}
1955   \end{center}
1956   \caption{Anzahl der Komparatoren, die 16-Sortiernetzwerke von
1957   \textsc{SN-Markov} und \textsc{SN-Evolution} (mit dem
1958   \emph{Odd-Even}-Mischer und dem \emph{bitonen Mischer}) besaßen.}
1959   \label{fig:comparison-comparators}
1960 \end{figure}
1961
1962 Dass der \textsc{SN-Markov}-Algorithmus nicht schlechter als der
1963 \textsc{SN-Evolution}-Algo\-rith\-mus ist, ist aus dem Graphen in
1964 Abbildung~\ref{fig:comparison-comparators} ersichtlich. Analog zu dem Versuch
1965 mit \textsc{SN-Markov}, wurde beim \textsc{SN-Evolution}-Algorithmus die
1966 Anzahl der Komparatoren jedes neuen Individuums ermittelt und gespeichert. Als
1967 Startnetzwerk diente bei beiden Algorithmen das
1968 \emph{Odd-Even-Transpositionsort}-Netzwerk \oet{16}. Der Graph zeigt auf der
1969 x-Achse die Anzahl der Komparatoren, auf der y-Achse die Häufigkeit, mit der
1970 ein Sortiernetzwerk mit dieser Komparatorzahl durch die Rekombination erzeugt
1971 wurde. Die Ergebnisse von \textsc{SN-Evolution} unterscheiden außerdem nach
1972 dem verwendeten Mischer-Netzwerk -- \oem{32} beziehungsweise \bm{32}.
1973
1974 Sowohl der \textsc{SN-Markov}-Algorithmus, der das
1975 \emph{Odd-Even-Merge}-Netzwerk verwendet, als auch \textsc{SN-Evolution} mit
1976 \oem{32} erreichen eine Komparatorzahl von~63 und finden Sortiernetzwerke, die
1977 bezüglich Effizienz und Geschwindigkeit identisch zu \oes{16} sind.
1978 Interessanterweise erzeugt \textsc{SN-Markov} derartige Netzwerke häufiger:
1979 Während nur $0,000017 \%$ der Individuen von \textsc{SN-Evolution} mit
1980 63~Komparatoren auskamen, ist die Rate bei \textsc{SN-Markov} mit $0,000335
1981 \%$ rund 20~mal höher.
1982
1983 Erwartungsgemäß sind die besten Netzwerke, die \textsc{SN-Evolution} mit dem
1984 \emph{bitonen Mischer} findet, aus 67~Komparatoren aufgebaut. Überraschend ist
1985 jedoch, dass in dieser Konfiguration Sortiernetzwerke auftreten können, die
1986 mehr Komparatoren besitzen als \emph{Odd-Even-Transpositionsort} -- \oet{16}
1987 ist aus 120~Komparatoren aufgebaut, bei dem Lauf, der die Daten für
1988 Abbildung~\ref{fig:comparison-comparators} lieferte, trat auch jeweils ein
1989 Sortiernetzwerk mit 121 und 124~Komparatoren auf. Da Sortiernetzwerke mit so
1990 vielen Komparatoren im Verlauf des Experiments selbst nach über 100~Millionen
1991 Iterationen nicht noch einmal erzeugt wurden, handelt es sich vermutlich um
1992 ein Phänomen, das mit der Initialisierung mit dem
1993 \emph{Odd-Even-Transpositionsort}-Netzwerk zusammenhängt.
1994
1995 %\begin{figure}
1996 %  \begin{center}
1997 %  \includegraphics[viewport=0 0 425 262,width=15cm]{images/markov-comparators-14-pct.pdf}
1998 %  \end{center}
1999 %  \caption{Anzahl der Komparatoren von Sortiernetzwerken (mit 14~Leitungen),
2000 %  die von {\sc SN-Markov} durchlaufen wurden. Grün eingezeichnet ist die
2001 %  \emph{Gamma-Verteilung} $f(x - 52)$ mit $k = 9,522$ und $\theta = 0,867$.}
2002 %  \label{fig:markov-comparators-14}
2003 %\end{figure}
2004 %
2005 %\begin{figure}
2006 %  \begin{center}
2007 %  \includegraphics[viewport=0 0 425 262,width=15cm]{images/markov-comparators-16-pct.pdf}
2008 %  \end{center}
2009 %  \caption{Anzahl der Komparatoren von Sortiernetzwerken (mit 16~Leitungen),
2010 %  die von {\sc SN-Markov} durchlaufen wurden. Grün eingezeichnet ist die
2011 %  \emph{Gamma-Verteilung} $f(x - 62)$ mit $k = 17,939$ und $\theta = 1,091$.}
2012 %  \label{fig:markov-comparators-16}
2013 %\end{figure}
2014 %
2015 %\begin{figure}
2016 %  \begin{center}
2017 %  \includegraphics[viewport=0 0 425 262,width=15cm]{images/markov-comparators-18-pct.pdf}
2018 %  \end{center}
2019 %  \caption{Anzahl der Komparatoren von Sortiernetzwerken (mit 18~Leitungen),
2020 %  die von {\sc SN-Markov} durchlaufen wurden. Grün eingezeichnet ist die
2021 %  \emph{Gamma-Verteilung} $f(x - 81)$ mit $k = 10,724$ und $\theta = 0,766$.}
2022 %  \label{fig:markov-comparators-18}
2023 %\end{figure}
2024
2025 %\begin{figure}
2026 %  \begin{center}
2027 %  \includegraphics[viewport=0 0 425 262,width=15cm]{images/markov-cycles-16.pdf}
2028 %  \end{center}
2029 %  \caption{Zyklen, die beim \textit{Random Walk} des
2030 %  \textsc{SN-Markov}-Algorithmus detektiert wurden. Auf der x-Achse sind die
2031 %  Anzahl der Schritte, die \textsc{SN-Markov} zurückgelegt hat, auf der
2032 %  y-Achse die Längen der gefundenen Zyklen aufgetragen. Das initiale
2033 %  Start-Sortiernetzwerk war $\operatorname{OET}(16)$.}
2034 %  \label{fig:markov-cycles-16}
2035 %\end{figure}
2036
2037 \newpage
2038 \section{Fazit und Ausblick}
2039
2040 Dass sich mithilfe des Entfernens von Leitungen aus bekannten Sortiernetzwerke
2041 interessante Ergebnisse erzielen lassen, zeige \textit{Moritz Mühlenthaler}
2042 bereits in~\cite{M2009}. Die in dieser Arbeit vorgestellten Methoden und
2043 Resultate machen deutlich, dass sich mit diesem Verfahren noch weitere
2044 interessante Beobachtungen machen lassen.
2045
2046 Das \emph{Odd-Even-Mergesort}-Netzwerk wird sowohl von \textsc{SN-Evolution},
2047 \textsc{SN-Evolution-Cut} und \textsc{SN-Markov} erreicht. Wenn die Anzahl der
2048 Leitungen keine Zweierpotenz ist, kann gegebenenfalls ein schnelleres
2049 Sortiernetzwerk erzeugt werden. Einige Beispiele hierfür wurden in
2050 Abschnitt~\ref{sect:sn-evolution-cut:oes} aufgezeigt.
2051
2052 Das \emph{bitone Mergesort}-Netzwerk kann in Bezug auf Effizienz von den
2053 vorgestellten Algorithmen übertroffen werden. Der Algorithmus
2054 \textsc{SN-Evolution-Cut} kann das Ergebnis von \textit{Mühlenthaler} und
2055 \textit{Wanka} (\cite{MW2010}) für ein 16-Sortiernetzwerk reproduzieren und
2056 für ein 32-Sortiernetzwerk sogar noch übertreffen. Der
2057 \textsc{SN-Evolution}-Algorithmus fand 16-Sortiernetzwerke, die gegenüber dem
2058 Ergebnis von \textsc{SN-Evolution-Cut} beziehungsweise~\cite{MW2010} einen
2059 weiteren Komparator einsparen.
2060
2061 Leider weisen die Sortiernetzwerke, die von den angegebenen Algorithmen
2062 zurückgegeben werden, keine Struktur auf, die sich zur Angabe einer
2063 Konstruktionsanweisung eigenen würde. Für das \emph{Pairwise-Sorting}- und das
2064 \emph{Odd-Even-Mergesort}-Netzwerk mit Zweierpotenzen als Leitungszahl wurden
2065 regelmäßige Schnittmuster angegeben, die Sortiernetzwerke ergeben, die so
2066 schnell und effizient sind wie die vergleichbaren \oes{n} und \ps{n}
2067 Netzwerke.
2068
2069 Die Anzahl der \emph{unterschiedlichen} Schnitte von verschiedenen
2070 Sortiernetzwerken wurde experimentell bestimmt und gezeigt, dass es deutlich
2071 weniger \emph{unterschiedliche} als \emph{mögliche} Schnittmuster gibt. Das
2072 bedeutet im Umkehrschluss, dass die gewonnenen Sortiernetzwerke mit mehreren
2073 Schnittmustern erreicht werden können.
2074
2075 Die Möglichkeiten, die Evolutionäre Algorithmen bei der Optimierung von
2076 Sortiernetzwerken bieten, sind durch die in dieser Arbeit vorgestellten
2077 Herangehensweisen bei weitem nicht erschöpft. Im Folgenden werden Ansätze
2078 umrissen, mit denen an die Untersuchungen in dieser Arbeit nahtlos angeknöpft
2079 werden könnte.
2080
2081 \subsection{Ausblick: Das \textit{Pairwise-Sorting}-Netzwerk und \textsc{SN-Evolution}}
2082
2083 Die aktuelle Implementierung von \textsc{SN-Evolution}
2084 (Abschnitte~\ref{sect:sn-evolution}
2085 beziehungsweise~\ref{sect:implementierung}) kann sowohl den \emph{bitonen
2086 Mischer} als auch den \emph{Odd-Even}-Mischer verwenden, um zwei Individuen zu
2087 rekombinieren. Das \emph{Pairwise-Sorting}-Netzwerk verwendet zwar keinen
2088 Mischer, es ist aber ebenfalls rekursiv über kleinere Versionen von sich
2089 selbst definiert. Das heißt, dass \ps{n} aus zwei Instanzen von
2090 $\ps{\frac{n}{2}}$ und zusätzlichen Komparatoren besteht, die die Eingabe für
2091 die kleineren Sortiernetzwerke vorbereiten und anschließend für eine sortierte
2092 Ausgaben sorgen. Anstelle von $\ps{\frac{n}{2}}$ kann man natürlich beliebige
2093 Sortiernetzwerke mit $\frac{n}{2}$~Leitungen verwenden.
2094
2095 Dies ließe sich für \textsc{SN-Evolution} nutzen, um zwei Individuen zu
2096 rekombinieren. Da es für das \emph{Pairwise-Sorting}-Netzwerk sehr viele
2097 \emph{unterschiedliche} Schnittmuster gibt
2098 (Abschnitt~\ref{sect:anzahl_schnittmuster}), ist es möglich, dass die
2099 Verwendung dieser Rekombinationsmethode neue Ergebnisse ermöglicht. Leider
2100 wird die Aussicht auf Erfolg durch die Tatsache geschmälert, dass keine
2101 $n$-Schnittmuster für \ps{2n} gefunden werden konnten, die zu besseren
2102 $n$-Sortiernetzwerken als \ps{n} führen.
2103
2104 \subsection{Ausblick: Kooperation von \textsc{SN-Evolution} und \textsc{SN-Evolution-Cut}}
2105
2106 Ähnlich zu der parasitären \emph{Co-Evolution}, die \textit{W.~Daniel Hillis}
2107 in~\cite{H1992} beschreibt, könnte man die Algorithmen \textsc{SN-Evolution}
2108 und \textsc{SN-Evolution-Cut} versuchen zu kombinieren. Nach dem Zusammenfügen
2109 von zwei $n$-Sortiernetzwerken könnte der Algorithmus
2110 \textsc{SN-Evolution-Cut} beispielsweise einen möglichst guten Schnitt für
2111 \emph{dieses} Netzwerk ermitteln. Da sich die Lösungen, die Evolutionäre
2112 Algorithmen in ihre Population aufnehmen, in den ersten Schritten rasch
2113 verbessern, könnten selbst weniger Iterationen von \textsc{SN-Evolution-Cut}
2114 die Zwischenlösungen von \textsc{SN-Evolution} deutlich verbessern.
2115
2116 Alternativ könnte man -- analog zur Herangehensweise von \textit{Hillis} --
2117 eine zweite Population von Schnittmustern evolvieren, die für die
2118 Sortiernetzwerke in der Population von \textsc{SN-Evolution} besonders gut
2119 funktionieren. In jeder Iteration wendet man alle oder eine zufällige Menge
2120 Schnittmuster auf das zusammengeführte Netzwerk an und gibt dem besten
2121 Ergebnis den Zuschlag. Anschließend erfährt das entsprechende Schnittmuster
2122 eine Aufwertung, so dass es wahrscheinlicher wird, dass \emph{dieses}
2123 Schnittmuster zur nächsten Generation beiträgt. Im Gegensatz zum Ansatz der
2124 parasitären Eingaben entsteht eine \emph{Synergie} zweier Populationen, die
2125 das Gesamtergebnis oder zumindest die Konvergenzgeschwindigkeit verbessern
2126 könnte.
2127
2128 \newpage
2129 \section{Implementierung}
2130 \label{sect:implementierung}
2131
2132 Alle in dieser Arbeit beschriebenen Versuche wurden mit einer eigens
2133 entwickelten C-Bibliothek, \textit{libsortnetwork}, und zugehörigen
2134 Kommandozeilen-Programmen durchgeführt. Die Bibliothek wurde unter der
2135 \textit{GNU Lesser General Public License} (LGPL) in der Version~2.1
2136 veröffentlicht; die Kommandozeilen-Programme, die in vielen Fällen lediglich
2137 Funktionalität der Bibliothek auf der Kommandozeile zur Verfügung stellen,
2138 stehen unter der \textit{GNU General Public License}, Version~2. Diese
2139 Lizenzen räumen einem Benutzer weitreichende Rechte ein, unter anderem das
2140 Programm beliebig zu verwenden, zu studieren, zu verändern sowie veränderte
2141 und unveränderte Kopien zu veröffentlichen.
2142
2143 Die Programmierschnittstelle (API) der Bibliothek orientiert sich an
2144 Paradigmen der \textit{objektorientierten Programmierung}. Beispielsweise kann
2145 mit der Funktion \texttt{sn\_network\_ create()} ein neues Zustands-Objekt
2146 erzeugt werden, für das mehrere Manipulations-Methoden, zum Beispiel
2147 \texttt{sn\_network\_comparator\_add()}, zur Verfügung stehen. Auf diese Art
2148 und Weise kann die Bibliothek leicht erweitert werden, ohne dass bestehende
2149 Programme angepasst werden müssen.
2150
2151 Die meisten Kommandozeilen-Programmen lesen ein Komparatornetzwerk von der
2152 Standard-Eingabe und schreiben ihr Ergebnis auf die Standard-Ausgabe. Um
2153 Beispielsweise eine \emph{normalisierte} Variante des \emph{bitonen
2154 Mergesort}-Netzwerks \bs{42} zu erzeugen, kann folgendes Kommando verwendet
2155 werden:
2156 \begin{verbatim}
2157   $ sn-bitonicsort 42 | sn-normalize >sn-42
2158 \end{verbatim}
2159 Dieses Prinzip, kleine Programme \emph{eine} Aufgabe erledigen zu lassen und
2160 es einfach zu ermöglichen, Programme zu verketten, ist eines der
2161 Grundprinzipien des UNIX-Be\-triebs\-sys\-tems. Es hat sich in den letzten
2162 Jahrzehnten und beim Verfassen dieser Arbeit als sehr flexibel und mächtig
2163 erwiesen.
2164
2165 Funktionen, die von Kommandozeilen-Programmen zur Verfügung gestellt werden,
2166 sind unter anderem das Erzeugen des \emph{Odd-Even-Mergesort}-, \emph{bitonen
2167 Mergesort}- und \emph{Pairwise-Sorting}-Netzwerks, das Normalisieren von
2168 Sortiernetzwerken, Anwendung von Schnittmustern auf Sortiernetzwerke und
2169 Anwendung eines Komparatornetzwerks auf eine Eingabepermutation. Das
2170 Darstellen von Sortiernetzwerken wird ebenfalls angeboten, beispielsweise
2171 wurden die Sortiernetzwerke in dieser Arbeit mit dem Kommando \texttt{sn-tex}
2172 visualisiert.
2173
2174 \textit{libsortnetwork} kann unter der Web-Adresse
2175 \url{http://octo.it/libsortnetwork/} unentgeltlich heruntergeladen werden.
2176
2177 \newpage
2178 \bibliography{references}
2179 \bibliographystyle{plain}
2180
2181 %\listoffigures
2182
2183 \end{document}
2184
2185 % vim: set shiftwidth=2 softtabstop=2 tabstop=8 fdm=marker tw=78 spelllang=de :