Der Technischen Fakultät der Friedrich-Alexander-Universität Erlangen-Nürnberg zur Erlangung des Doktorgrades. Doktor-Ingenieur

Größe: px
Ab Seite anzeigen:

Download "Der Technischen Fakultät der Friedrich-Alexander-Universität Erlangen-Nürnberg zur Erlangung des Doktorgrades. Doktor-Ingenieur"

Transkript

1 Vergleich gebräuchlicher Parallelrechensysteme für die Beschleunigung evolutionärer Algorithmen demonstriert für den Entwurf miniaturisierter optischer und elektronischer Bauelemente Der Technischen Fakultät der Friedrich-Alexander-Universität Erlangen-Nürnberg zur Erlangung des Doktorgrades Doktor-Ingenieur vorgelegt von Dipl.-Inf. Steffen Limmer aus Nordhausen

2 Als Dissertation genehmigt von der Technischen Fakultät der Friedrich-Alexander-Universität Erlangen-Nürnberg Tag der mündlichen Prüfung: Vorsitzende des Promotionsorgans: Gutachter: Prof. Dr.-Ing. habil. Marion Merklein Prof. Dr.-Ing. Dietmar Fey Prof. Dr. Johannes Jahn

3 Abstract Evolutionary algorithms are one of the most popular forms of optimization algorithms. They are comparatively easy to use and were successfully employed for a wide variety of practical applications. However, frequently it is necessary to execute them in parallel in order to reduce the runtime. There are a number of different approaches for the parallelization of evolutionary algorithms and various hardware platforms can be used for the parallel execution. However, not every platform is equally suitable for any kind of parallelization of evolutionary algorithms. In addition, it also depends on properties of the concrete optimization problem to be solved and on the used evolutionary algorithm, which platform is best suited for the execution. This work deals with the question of the circumstances under which an architecture is better suited for executing a parallel evolutionary algorithm than another, and examines the common forms of parallelization of evolutionary algorithms on the most widely used parallel computing systems (multi-core CPUs, grids, clusters and graphics cards). Furthermore, the solution of four real-world examples from the field of the design of miniaturized optical and electronic devices with help of parallel evolutionary algorithms is described and the results of the previous studies to the parallelization forms and parallel platforms are discussed on these concrete examples. In addition, a framework for the execution of distributed evolutionary algorithms on grid platforms is presented. iii

4

5 Zusammenfassung Evolutionäre Algorithmen zählen zu einer der populärsten Formen von Optimierungsalgorithmen. Sie sind vergleichsweise leicht in der Handhabung und konnten bereits für eine Vielzahl praktischer Anwendungen erfolgreich eingesetzt werden. In etlichen Fällen weisen sie jedoch eine lange Laufzeit auf, sodass eine Beschleunigung über eine parallele Ausführung notwendig ist. Für die Parallelisierung evolutionärer Algorithmen existieren eine Reihe unterschiedlicher Ansätze und es kommen unterschiedliche Hardware-Plattformen für die parallele Ausführung infrage. Nicht jede Plattform eignet sich jedoch gleich gut für jede Form der Parallelisierung von evolutionären Algorithmen. Zusätzlich hängt es auch von Eigenschaften des konkret zu lösenden Optimierungsproblems beziehungsweise des eingesetzten evolutionären Algorithmus ab, welche Plattform sich am besten für die Ausführung eignet. Diese Arbeit beschäftigt sich mit der Fragestellung, unter welchen Umständen eine Architektur besser als eine andere Architektur zur Ausführung eines parallelen evolutionären Algorithmus geeignet ist, und untersucht die gängigen Parallelisierungsformen von evolutionären Algorithmen auf den gebräuchlichen Parallelrechensystemen (Multicore-CPUs, Grids, Cluster und Grafikkarten). Weiterhin wird die Lösung von vier Realweltbeispielen aus dem Bereich des Entwurfs miniaturisierter optischer und elektronischer Bauelemente mittels paralleler evolutionärer Algorithmen beschrieben und die Ergebnisse der vorangegangenen Untersuchungen werden an diesen konkreten Beispielen diskutiert. Darüber hinaus wird ein Framework vorgestellt, welches der Ausführung verteilter evolutionärer Algorithmen auf Grid-Plattformen dient. v

6

7 Danksagung Mein besonderer Dank gilt meinem Doktorvater, Prof. Dr.-Ing. Dietmar Fey, für die Betreuung der vorliegenden Arbeit und das mir entgegengebrachte Vertrauen. Ohne seine Unterstützung und Ratschläge würde diese Dissertation nicht existieren. Weiterhin herzlichen Dank an Prof. Dr. Johannes Jahn, der freundlicherweise die Rolle des Zweitgutachters übernommen hat. Teile der hier beschriebenen Arbeiten entstanden in Kooperation mit dem Lehrstuhl für optische Kommunikation der Fernuniversität Hagen, bei dem ich mich insbesondere in Person von Prof. Dr. Ulrich Lohmann für die angenehme Zusammenarbeit bedanken möchte. Ebenfalls danke ich meinen Kollegen vom Lehrstuhl für Rechnerarchitektur für das sehr gute Arbeitsklima und die Möglichkeit, verschiedenste technische Probleme zu diskutieren. Und zu guter Letzt möchte ich meinen Eltern danken, die mich all die Jahre unterstützt haben. vii

8

9 Inhaltsverzeichnis Abbildungsverzeichnis Tabellenverzeichnis Liste der Algorithmen xiii xix xxi 1 Einleitung 1 2 Evolutionäre Algorithmen Repräsentation Die Populationsgröße Elternselektion Variationsoperatoren Selektion von Überlebenden und Aktualisierungsstrategie Genetische Algorithmen Evolutionsstrategien Evolutionäre Programmierung Genetische Programmierung Erweiterungen von evolutionären Algorithmen Verwandte Ansätze Formen der Parallelisierung von evolutionären Algorithmen 41 4 Parallelrechensysteme Multicore-Prozessoren Grafikkarten Cluster Grids Frog-EA Die Frog-EA-Nutzerschnittstelle Die Ausführung eines EA durch Frog-EA ix

10 5.3 Evaluation von Frog-EA Untersuchung paralleler evolutionärer Algorithmen auf verschiedenen Architekturen Die parallele Mehrfachausführung Das Inselmodell Das Inselmodell auf der GPU Das Inselmodell im Cluster Das Inselmodell im Grid Zusammenfassung Inselmodell auf verschiedenen Architekturen Die globale Parallelisierung Die globale Parallelisierung auf der GPU Die globale Parallelisierung im Cluster Die globale Parallelisierung im Grid Zusammenfassung globale Parallelisierung auf den untersuchten Architekturen Die parallele Bewertung Anwendungsbeispiele aus dem Bereich Entwurf miniaturisierter optischer und elektronischer Bauelemente Entwurf eines binären reversiblen Signed-Digit-Addierers Signed-Digit-Repräsentation Reversible Logik Evolutionärer Algorithmus für den Entwurf reversibler Schaltungen Optimierungsergebnisse Parallelisierung des EA für reversible Logik Entwurf der Anordnung von passiven freiraumoptischen Netzwerkverbindungen Problembeschreibung Der evolutionäre Algorithmus zum Entwurf passiver freiraumoptischer Netzwerke Parallele Ausführung und Ergebnisse der Optimierung passiver freiraumoptischer Netzwerke x

11 7.3 Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks Optimierungsproblem Der evolutionäre Algorithmus zum Entwurf des aktiven freiraumoptischen Netzwerks Parallelisierung und Ergebnisse der Optimierung aktiver freiraumoptischer Netzwerke Entwurf plasmonischer Wellenleiter Das Optimierungsproblem Algorithmus, Parallelisierung und Ergebnisse der Optimierung Zusammenfassung 191 A Die Funktionen 4mod5 und graycode6 195 B Parameter der Benchmark-Optimierungen für reversible Logik 197 C Berechnung der Eingangswinkel von Strahlen zur Verbindung eines gegebenen Eingangs mit einem gegebenen Ausgang in einem aktiven PIFSO-Netzwerk 199 Literaturverzeichnis 203 xi

12

13 Abbildungsverzeichnis 2.1 Selektionswahrscheinlichkeit p bei der linearen und der nichtlinearen rangbasierten Selektion Beispiel für die Codierung beim kanonischen GA Beispiel der One-Point-Rekombination Beispiele zweidimensionaler Normalverteilungen Beispiel für ein Programm eines GP Beispiel für die Teilbaum-Rekombination Beispiel für eine Approximation der Pareto-Front Ablauf des Inselmodells mit vier Inseln Ablauf der globalen Parallelisierung über das Master-Worker- Modell Anordnung der Individuen eines zellulären EA Architektur einer NVIDIA-GPU Aufbau unterschiedlicher NVIDIA-Stream-Multiprozessoren Beispiel für eine Grid-Infrastruktur mit fünf Systemen Migration beim Inselmodell über Frog-EA Ausführung eines EA durch Frog-EA in einem Grid Ersetzung von Kanten bei der 2-Opt-Heuristik Beispiel für die GSX-Rekombination Durchschnittliche Laufzeiten der Optimierungen über Frog-EA Durchschnittliche Verläufe der Optimierungen über Frog-EA Master-Worker-Implementierung des Inselmodells auf der GPU Das verteilte Inselmodell auf der GPU Durchschnittliche Laufzeiten der Tournament-Selektion zuzüglich One-Point-Rekombination auf GPU und CPU Bildung der Präfixsumme mit 3 Threads xiii

14 6.5 Durchschnittliche Laufzeiten der Roulette-Selektion zuzüglich One-Point-Rekombination auf GPU und CPU Durchschnittliche Laufzeiten der Gauß-Mutation auf GPU und CPU Durchschnittliche Laufzeiten der BGA-Mutation auf GPU und CPU Durchschnittliche Laufzeiten der Populationsaktualisierung auf GPU und CPU Kernelaufrufe für das Inselmodell auf der GPU unter Nutzung des Shared Memory Durchschnittliche Laufzeiten der Optimierung mit dem Inselmodell auf GPU und CPU Ablauf der Kommunikation beim IMB SendRecv-Benchmark Ergebnisse des IMB SendRecv-Benchmarks Vielfaches ψ von n c an Kernen im Grid, die für Geschwindigkeitsvorteil nötig sind, abhängig von der Länge der Berechnung im Cluster mit n c Kernen Mindestwert für die Rechenzeit t gen (SC) für eine Generation auf einem Singlecore, damit das Grid sich im Vergleich zu einem Cluster lohnt, für n c = 120 und δt sync = 10 s Anforderungen an die Rechenzeit t gen (SC) für eine Generation auf einem Singlecore analog Abb für δt sync = 10 min Zeit für die Berechnung eines Migrationsintervalls auf einer Einkern-CPU, ab der ein Geschwindigkeitsgewinn im Grid verglichen mit der GPU möglich ist Richtlinien zur Auswahl einer geeigneten Architektur für das Inselmodell Durchschnittliche Zeiten für den Transfer verschieden großer Daten von der CPU auf die GPU und wieder zurück zur CPU Speed-Up für die Berechnung der Fitnesswerte der Nachkommen einer Generation inkl. Datentransfers auf der GPU im Vergleich zu einer Singlecore-CPU Speed-Up analog Abb mit 16 KiB Daten xiv

15 6.21 Laufzeit der Bewertung von Nachkommen einer Generation mit Funktion (6.6) auf CPU (4 Kerne) und GPU Speed-Up der GPU gegenüber der CPU für die Evaluation nach Funktion (6.6) Laufzeit der Bewertung von Nachkommen einer Generation mit Funktion (6.7) auf CPU (4 Kerne) und GPU Verhältnis Berechnung zu Datentransfers für Fitnessfunktionen (6.6) und (6.7) Speed-Up der GPU gegenüber der CPU (4 Kerne) für Fitnessfunktion (6.7) Zeiten für Scatter und Gather unter Nutzung von 10 Gbit/s InfiniBand Zeiten für Scatter und Gather unter Nutzung von Gigabit Ethernet Speed-Up für die Bewertung einer Generation im Cluster im Vergleich zu einem Singlecore für 4 MiB Eingangsdaten und 16 KiB Ausgangsdaten Speed-Up analog Abb unter der Annahme, dass im Cluster Gigabit Ethernet genutzt wird Speed-Up für die Bewertung einer Generation im Cluster im Vergleich zu einer GPU analog Abb Speed-Up analog Abb.6.30 mit Gigabit Ethernet Gewinn in der reinen Rechenzeit pro Generation im Grid verglichen mit dem Cluster Richtlinien zur Auswahl einer geeigneten Architektur für die globale Parallelisierung Aufbau eines hybriden n-bit-sd-addierers Das NOT-Gatter Das CONTROLLED NOT-Gatter Das TOFFOLI-Gatter Das FREDKIN-Gatter Das SWAP-Gatter Hinsichtlich der Transistoranzahl minimaler reversibler 1-Bit- Addierer xv

16 7.8 Allgemeiner Aufbau eines reversiblen Schaltkreises Codierung eines reversiblen Schaltkreises in einem Individuum des EA Beispiel für ein Individuum des EA und der zugehörige reversible Schaltkreis Evolvierte reversible Schaltung für den ersten Schritt der SD- Addition Evolvierte reversible Schaltung für den zweiten Schritt der SD- Addition Laufzeit der Optimierung für das ham7 -Problem auf der CPU und im Cluster Laufzeit der Optimierung für das ham7 -Problem auf der CPU und der GPU Struktur eines n n-clos-netzwerks Aufbau eines opto-elektronischen dreistufigen Clos-Netzwerks Ein PIFSO-Netzwerk Draufsicht auf die Stecker eines n n-pifso-netzwerks mit n = Seitenansicht eines Lichtstrahls in einem PIFSO-Netzwerk Maßstabsgetreue Darstellung eines Steckers für ein Netzwerk Beispielhafte Steckeranordnung zweier Elternindividuen Mögliche Nachkommen der Elternindividuen aus Abb Effekt des Austauschs von Steckern Verdeutlichung der Werte, die für die Mutation eines Steckers berechnet werden Beste manuell gefundene Steckeranordnung Durchschnittlicher Optimierungsverlauf für ein Netzwerk Durchschnitte und Standardabweichungen über die Laufzeiten der parallelen Optimierungen in Grid und Cluster Durchschnitte und Standardabweichungen über die Verläufe der parallelen Optimierungen in Grid und Cluster xvi

17 7.29 Beste gefundene Steckeranordnung für ein passives Netzwerk in PIFSO-Technologie Ein Mikrospiegelarray, ein Fasermatrixstecker und ein Mikrolinsenarray Ein Strahl des aktiven PIFSO-Netzwerks aus drei verschiedenen Perspektiven Drei mögliche Beziehungen zwischen einer Ein- und einer Ausgangsposition eines aktiven PIFSO-Netzwerks Intensitätsplot der Fitness abhängig von der x- und y-position des ersten Eingangs Laufzeiten der Optimierung eines Netzwerks Der evolvierte Aufbau des aktiven freiraumoptischen Netzwerks Zwei mögliche Formen gerippter plasmonischer Wellenleiter Die Parameter des gerippten Wellenleiters Berechnung des elektromagnetischen Feldes um und entlang des plasmonischen Wellenleiters Aus den fünf Optimierungen resultierende Approximation der Pareto-Front xvii

18

19 Tabellenverzeichnis 5.1 Resultate der Laufzeitmessungen für die serielle Ausführung des TSP-GA Die drei Konfigurationen, mit denen der TSP-GA zur Evaluation von Frog-EA ausgeführt wurde Evolvierte Konstanten für die Funktionen zur Modellierung der Laufzeiten von Scatter und Gather Wahrheitswerttabelle für den zweiten Schritt der SD-Addition Benötigte Anzahl Transistoren für reversible Gatter Quantenkosten reversibler Gatter Ergebnisse Benchmark-Optimierungen reversibler Logik Wahrheitswerttabelle für den ersten Schritt der SD-Addition in reversibler Logik Wahrheitswerttabelle für den zweiten Schritt der SD-Addition in reversibler Logik Genutzte Konfigurationen für das Inselmodell bei den Ausführungen im Grid und im Cluster Fitnesswerte der besten gefundenen Lösungen für Netzwerke der Dimensionen 8 8 bis A.1 Wahrheitswerttabelle für 4mod A.2 Wahrheitswerttabelle für graycode B.1 Parameter für die Benchmark-Optimierungen für reversible Logik aus Abschnitt xix

20

21 Liste der Algorithmen 1 Ablauf eines Basis-EA Ablauf des kanonischen genetischen Algorithmus nach Holland Ablauf der Mutation eines Gens g i bei der BGA-Mutation Ablauf einer (µ, λ)- bzw. (µ + λ)-evolutionsstrategie Bestimmung von L für die Rekombination in Differential Evolution Ablauf des Optimierungsalgorithmus für aktive PIFSO-Netzwerke xxi

22

23 Einleitung 1 Im alltäglichen Leben sehen wir uns wiederkehrend der Fragestellung ausgesetzt, welche von mehreren verschiedenen Alternativen hinsichtlich eines bestimmten Ziels die optimale Alternative darstellt. So stellen sich zum Beispiel die Fragen, bei welcher Warteschlange man in einem Geschäft am schnellsten bedient wird, welcher Weg einen am schnellsten an ein bestimmtes Ziel führt, welche Strategie in einem Gesellschaftsspiel zu den höchsten Erfolgschancen führt oder welches von verschiedenen ähnlichen Produkten das beste Preis- Leistungs-Verhältnis aufweist. Damit sind Optimierungsprobleme ein selbstverständlicher Bestandteil unseres Alltags, auch wenn es sich dabei meist um triviale Probleme handelt, welche sich über Intuition oder mit Hilfe von Erfahrungswerten lösen lassen. In der Wissenschaft, der Industrie und dem Finanzwesen sieht man sich ebenfalls häufig mit Optimierungsproblemen konfrontiert, welche jedoch im Allgemeinen komplexer ausfallen als jene des alltäglichen Lebens. So kann sich beispielsweise die Suche nach einer optimalen Konfiguration für die Entwurfsparameter eines neu zu entwickelnden Produkts als sehr anspruchsvoll erweisen. Nicht selten erstreckt sich der Suchraum über Tausende, Millionen oder mehr unterschiedliche Lösungskandidaten. Formal handelt es sich bei einem Optimierungsproblem um die Suche nach einem Element x eines Suchraums Ω, welches eine Zielfunktion f : Ω R minimiert (bzw. maximiert): arg minf(x). x Ω Für die Lösung komplexer Optimierungsprobleme bieten sich rechnergestützte Verfahren an. Dies gilt insbesondere für Optimierungsprobleme, welche sich nicht analytisch (z. B. über Nullstellenbestimmung der Ableitung der Zielfunktion) lösen lassen. Handelt es sich bei dem Suchraum Ω um eine endliche Menge 1, so besteht die einfachste Methode zur Lösung des Optimierungsproblems 1 Da der Speicher eines Rechners begrenzt ist, arbeitet dieser zwangsweise immer auf endlichen Suchräumen. 1

24 2 Kapitel 1: Einleitung in einer Brute-Force-Suche, bei der die Zielfunktion für jedes Element des Zielraums berechnet wird. Dies lässt sich aber häufig aufgrund eines zu großen Suchraums und/oder einer zu rechenintensiven Zielfunktion nicht in akzeptabler Zeit umsetzen. Um die Rechenzeit zu verringern, könnte die Brute-Force- Suche auf einer groben Rasterung oder auf rein zufällig gewählten Elementen des Suchraums durchgeführt werden. Dies garantiert zwar nicht das Auffinden einer optimalen Lösung, kann aber unter Umständen trotzdem eine zumindest hinreichend gute Lösung liefern. In der Tat folgt aus dem No-Free-Lunch- Theorem [224] von 1997, dass es auf der Gesamtheit aller Optimierungsprobleme betrachtet keinen Optimierungsalgorithmus gibt, der besser ist als eine reine Zufallssuche. Gemittelt über alle beliebigen Zielfunktionen weisen nämlich alle Optimierungsalgorithmen dasselbe durchschnittliche Verhalten auf. In der Praxis hat man es jedoch nicht mit beliebigen Optimierungsproblemen zu tun und es ist zweifelhaft, ob das No-Free-Lunch-Theorem auch eingeschränkt auf die Klasse aller praxisrelevanten Optimierungsprobleme gilt. Es ist zumindest festzustellen, dass sich in der Praxis bestimmte Optimierungsansätze stärker als andere etablieren konnten. Für lineare Optimierungsprobleme, das heißt, Probleme mit einer linearen Zielfunktion und einem Suchraum Ω R n, der sich über lineare Gleichungen und Ungleichungen beschreiben lässt, ist beispielsweise das Simplex-Verfahren [52] sehr populär. Für nichtlineare Optimierungsprobleme, die nur wenige lokale Optima aufweisen oder für die gute Näherungen für das Optimum bekannt sind, eignen sich lokale Optimierungsverfahren, die ausgehend von einem Startwert zu einem nächstgelegenen lokalen Optimum konvergieren. Bekannte Vertreter für solche Ansätze sind z. B. der Gradientenabstieg, das Verfahren der konjugierten Gradienten [94] oder der Levenberg-Marquardt-Algorithmus [118, 142]. Wenn es nicht möglich ist, eine gute Näherung für das Optimum anzugeben und die Zielfunktion viele lokale Optima aufweist, so sind globale Optimierungsverfahren gegenüber lokalen Verfahren zu bevorzugen. Diese sind darauf ausgelegt, dass die Suche aus lokalen Optima entkommen kann und sind somit in der Lage, das globale Optimum unabhängig vom Startwert aufzufinden. Neben weiteren bekannten Ansätzen, wie Simulated Annealing [108, 214] oder der Tabu-Suche [80], stellen evolutionäre Algorithmen (EAs) [57] eines der populärsten, wenn nicht das populärste globale Verfahren zur Lösung nichtli-

25 Kapitel 1: Einleitung 3 nearer Optimierungsprobleme dar. Die Arbeitsweise von EAs ist inspiriert von der biologischen Evolution. So wie sich in der Natur Spezies durch Evolution weiterentwickeln und sich ihren Lebensräumen anpassen, werden bei EAs Lösungskandidaten durch eine künstliche Evolution hinsichtlich der Zielfunktion verbessert. EAs zählen zu der Klasse sogenannter Metaheuristiken. Das heißt, dass sie näherungsweise Verfahren sind und ein Auffinden des globalen Optimums nicht garantiert ist. Im Gegensatz zu klassischen Heuristiken sind sie jedoch nicht problemspezifisch und lassen sich auf eine breite Klasse von Optimierungsproblemen anwenden. Allgemein ist ein Vorteil von EAs, dass sie praktisch keine Anforderungen an das zu lösende Problem stellen. Sie lassen sich auf nahezu beliebige kontinuierliche und kombinatorische Optimierungsprobleme anwenden. Ein weiterer Vorteil ist, dass sie nur wenig beziehungsweise gar kein Problemwissen oder Wissen über die Gestalt des Zielraums voraussetzen. Dies macht sie praktisch in der Handhabung. Andererseits kann es sich nachteilig auf die Laufzeit eines EA auswirken, dass er bei der Suche nach dem Optimum kein Problemwissen einsetzt. Hinzu kommt, dass EAs stets auf einer ganzen Menge von Lösungskandidaten arbeiten. Daher gelten sie als vergleichsweise rechenintensive Optimierungsverfahren. Ein Optimierungslauf für ein komplexes Realweltproblem kann durchaus im Bereich mehrerer Stunden, Tage oder gar Wochen liegen. EAs eignen sich jedoch gut für eine Beschleunigung mittels einer parallelen Ausführung. In der Literatur finden sich verschiedene Ansätze zur Parallelisierung von EAs, deren Nutzen anhand unterschiedlichster Benchmark- und Realweltprobleme demonstriert wurde. Zur parallelen Ausführung eines EA stehen dem Anwender aus Industrie oder Wissenschaft heutzutage üblicherweise verschiedene Plattformen zur Verfügung. Gängige parallele Architekturen sind Multicore-CPUs, Grafikkarten, Cluster und Grids. Ausgehend von einem seriellen EA zur Lösung eines bestimmten Optimierungsproblems stellt sich dem Anwender oft die Frage, auf welcher Architektur sich der EA am besten beschleunigen lässt. Die Antwort darauf hängt nicht nur von der genutzten Parallelisierungsform ab, sondern auch von den konkreten Eigenschaften des vorliegenden Optimierungsproblems und der verfügbaren parallelen Plattformen (z. B. die Anzahl der Kerne eines verfügbaren Clusters). Daher kann sich

26 4 Kapitel 1: Einleitung die Abschätzung, welche Plattform am geeignetsten ist, als durchaus schwierig gestalten. Mittels Laufzeitmessungen lässt sich freilich Gewissheit erlangen, jedoch setzt dies die vorherige Implementierung des parallelen EA für alle infrage kommenden Plattformen voraus, was einen hohen Aufwand bedeutet. In der Literatur lassen sich nur bedingt praxisrelevante Informationen zu der angesprochenen Problematik finden. Es existieren zwar zahlreiche Publikationen, welche sich mit verschiedenen Parallelisierungsformen oder verschiedenen Architekturen befassen, jedoch werden meist nur zwei verschiedene Parallelisierungsformen oder zwei Architekturen verglichen. Für gewöhnlich beschränkt sich die Untersuchung auf einen Vergleich eines parallelen EA auf einer bestimmten Plattform mit einem seriellen EA auf einer CPU. Zudem wird sich meist auf spezielle Optimierungsprobleme bezogen und es werden keine allgemeinen Aussagen getroffen. Daher ist es das Ziel der vorliegenden Arbeit, verschiedene Plattformen und Parallelisierungsformen von EAs gegenüberzustellen und quantitative Aussagen zu treffen, die Anwender bei der Auswahl einer parallelen Plattform zur Ausführung eines parallelen EA unterstützen. Dazu wird anhand empirischer und analytischer Untersuchungen ermittelt, welche Voraussetzungen ein EA erfüllen muss, damit sich eine Plattform A hinsichtlich der zu erwartenden Rechenzeit besser zur Ausführung des EA eignet als eine Plattform B. Aus den Ergebnissen der Untersuchungen werden Richtlinien abgeleitet, die Anwendern eine grobe Abschätzung erlauben, welche Plattform für einen gegebenen EA zu bevorzugen ist. Damit soll ein Beitrag zur Schließung der Lücke zwischen der Theorie paralleler EAs auf der einen Seite und der Anwendung paralleler EAs auf der anderen Seite geleistet werden. Weiterhin werden vier konkrete EAs, die zur Lösung von vier Realweltproblemen aus dem Bereich des Entwurfs miniaturisierter optischer und elektronischer Bauelemente entwickelt wurden, vorgestellt und deren parallele Ausführung im Kontext der oben genannten Untersuchungen diskutiert. Bei einer der untersuchten Plattformen handelt es sich um Grids. Diese sind von der Handhabung sehr komplex und erfordern in der Regel eine gewisse Einarbeitungszeit. Daher wurde ein Framework entwickelt, welches es Anwendern erlaubt, verteilte EAs in Grids auszuführen, ohne sich eingehend mit Gridtechnologie auseinandersetzen zu müssen. Dieses Framework wird ebenfalls in der vorliegenden Arbeit beschrieben.

27 Kapitel 1: Einleitung 5 Folgende drei Punkte ergeben sich als die wesentlichen Beiträge der Arbeit zum aktuellen Stand der Technik und Wissenschaft: Herleitung und Diskussion quantitativer Kriterien zur Auswahl einer geeigneten Architektur für die Ausführung eines parallelen EA Beschreibung und Evaluation eines Frameworks zur verteilten Ausführung von EAs in Grids Vorstellung von EAs zur Lösung konkreter Realweltprobleme Der Rest der Arbeit gliedert sich wie folgt: In Kapitel 2 wird die Arbeitsweise von EAs beschrieben und auf die grundlegenden Entwurfsparameter und Formen von EAs eingegangen. Kapitel 3 gibt einen Überblick über die gängigen Parallelisierungsformen von EAs und dem aktuellen Stand der Forschung bezüglich paralleler EAs. Anschließend werden in Kapitel 4 die in dieser Arbeit berücksichtigten parallelen Plattformen beschrieben, bevor in Kapitel 5 das Framework zur Ausführung paralleler EAs in Grids vorgestellt wird. In Kapitel 6 werden die Untersuchungen der in Kapitel 3 genannten Parallelisierungsformen auf den in Kapitel 4 beschriebenen Parallelrechensystemen beschrieben. Darauf folgt in Kapitel 7 die Vorstellung und Diskussion der vier Realweltprobleme, welche mittels EAs mit unterschiedlichen Parallelisierungsformen auf unterschiedlichen Plattformen gelöst wurden. Kapitel 8 schließt die Arbeit mit einer Zusammenfassung ab.

28

29 Evolutionäre Algorithmen 2 Die Basis eines evolutionären Algorithmus bildet eine Menge (Population) von Lösungskandidaten (Individuen). Jedem Individuum kann eine Fitness zugeordnet werden, welche ausdrückt, wie gut/schlecht das Individuum im Sinne des Optimierungskriteriums bzw. der Zielfunktion ist. Der Ablauf eines Basis-EA ist in Algorithmus 1 dargestellt. Allen EAs ist gemeinsam, dass eine Algorithmus 1 Ablauf eines Basis-EA 1. Initialisiere Startpopulation P 0 mit µ Individuen 2. Berechne Fitness der Individuen aus P 0 und setze t = 0 3. until Abbruchkriterium erfüllt do: 3.1 Erzeuge λ Nachkommen aus Elternindividuen von P t 3.2 Berechne Fitness der Nachkommen 3.3 Bilde neue Population P (t+1) von µ Individuen aus P t und den in Schritt 3.1 erzeugten Nachkommen 3.4 Setze t = t + 1 Population der Größe µ iterativ verändert wird. Dazu werden in jeder Iteration (auch Generation genannt) Elternindividuen aus der Population selektiert, aus welchen λ neue Individuen (Nachkommen) erzeugt werden. Die Nachkommen werden dann bewertet und nach einer bestimmten Aktualisierungs- bzw. Ersetzungsstrategie in die Population eingefügt und verdrängen dort andere Individuen. Die Auswahl von Elternindividuen und/oder von zu ersetzenden Individuen am Ende einer Iteration wird üblicherweise in Abhängigkeit der Fitnesswerte der Individuen gesteuert. Beim Entwurf eines neuen EA und indirekt auch bei der Auswahl eines bereits existierenden EA muss entschieden werden, wie die Schritte des in Algorithmus 1 dargestellten allgemeinen Ablaufs konkret umgesetzt werden. Zusätzlich müssen gewisse Parameter, wie µ und λ, gesetzt werden. Die Entscheidung hat einen erheblichen Einfluss darauf, wie der Suchraum eines Optimie- 7

30 8 Kapitel 2: Evolutionäre Algorithmen rungsproblems vom EA durchsucht wird und damit auf das Leistungsvermögen des EA. Damit ein EA möglichst zuverlässig und mit möglichst wenigen Schritten eine optimale Lösung finden kann, bedarf es einer guten Balance zwischen Exploration und Exploitation. Exploration bezeichnet das Auffinden von Regionen des Suchraums, die bisher noch nicht besucht wurden und Exploitation ist die Suche in der Nachbarschaft bereits aufgefundener Lösungen. Je höher die Exploration ist, umso größer ist die Chance, vielversprechende Gebiete des Suchraums aufzufinden und je höher die Exploitation ist, umso besser lassen sich lokale Optima innerhalb vielversprechender Gebiete auffinden. Je mehr Zeit der Optimierung in die Exploration investiert wird, umso weniger Zeit kann in die Exploitation investiert werden und umgekehrt. Ist die Exploration zu hoch, so gleicht die Suche einer Zufallssuche. Ist hingegen die Exploitation zu hoch, so gleicht die Suche einer klassischen Bergsteigersuche (hill climbing) und der EA konvergiert schnell gegen eine suboptimale Lösung. Daher bedarf es einer geeigneten Mischung aus Exploration und Exploitation. Wie die Parameter eines EA optimal zu wählen sind und was eine geeignete Balance zwischen Exploration und Exploitation darstellt, hängt vom zu lösenden Optimierungsproblem ab [196]. Allgemein bedarf es bei einem Problem mit einer sprunghaften Fitnesslandschaft mit vielen lokalen Optima mehr Exploration als bei einem Problem mit einer glatten Fitnesslandschaft mit wenigen lokalen Optima. Im Folgenden soll auf die wesentlichen Entwurfskriterien und Parameter von EAs eingegangen werden. 2.1 Repräsentation Um einen EA auf einem gewissen Suchraum anwenden zu können, müssen die Objekte des Suchraums in maschinenverarbeitbarer Form codiert werden. Ein Individuum was ein Objekt des Suchraums repräsentiert ist für gewöhnlich eine Kette einer konstanten Anzahl L von Genen. Diese Gene sind für gewöhnlich Binärwerte, natürliche oder reelle Zahlen. Die genaue Form der Codierung wird als Genotyp bezeichnet, während die Interpretation dieser Codierung als Phenotyp bezeichnet wird. Der Phenotyp könnte bspw. eine Folge von n ganzzahligen Parametern sein. Diese könnten genotypisch ebenfalls als Folge ganzer

31 2.2. Die Populationsgröße 9 Zahlen codieren werden. Sie könnten aber auch als eine Folge von Bits codiert werden. Die Bewertung von Individuen findet auf dem Phenotyp statt und die Variation von Individuen findet auf dem Genotyp statt. Unterschiedliche Genotypen erfordern daher in der Regel unterschiedliche Variationsoperatoren, während ein und derselbe EA für unterschiedliche Phenotypen angewendet werden kann, solange ihr Genotyp gleich ist. Wenn bei einer Repräsentation benachbarte Genotypen zu ebenfalls benachbarten Phenotypen gehören, so spricht man von einer hohen Lokalität der Repräsentation. Untersuchungen [180, 76] legen nahe, dass für die meisten Realweltprobleme eine hohe Lokalität für eine effiziente Suche nötig ist. 2.2 Die Populationsgröße Dadurch, dass ein EA eine Population von Individuen hält, birgt die Suche eines EA eine implizite Parallelität. Zu einem gegebenen Zeitpunkt befindet sich der EA nicht nur an einem Punkt des Suchraums, sondern an mehreren Punkten und kann die Informationen über all diese Punkte nutzen, um die Suche in eine geeignete Richtung fortzusetzen. Die Größe der Population beeinflusst dabei den Verlauf der Suche. Eine kleine Population führt zu einer schnellen Konvergenz des EA. Ist sie zu klein, so ist die Gefahr groß, dass der EA zu einer suboptimalen Lösung konvergiert. Eine größere Population führt zu einer höheren Exploration und damit zu einer höheren Chance, eine optimale Lösung zu finden. Ist die Populationsgröße jedoch zu hoch, wird gegebenenfalls unnötig viel Zeit in die globale Suche im Suchraum investiert und somit unnötig viel Rechenzeit verbraucht. Die Leistungsfähigkeit eines EA kann je nach Optimierungsproblem sehr sensitiv bezüglich der Populationsgröße sein. So hat beispielsweise Storch [202] Fitnessfunktionen entwickelt, für die die Suche nach dem Optimum mit einem simplen EA effizient (polynomial viele Schritte) ist, solange die Populationsgröße über einer gewissen Grenze liegt und ineffizient (exponentiell viele Schritte), falls die Populationsgröße darunter liegt. Die Ineffizienz bei zu kleiner Populationsgröße kommt dadurch zustande, dass der EA mit hoher Wahrscheinlichkeit in einem lokalen Optimum stecken bleibt. Was ein geeigneter Wert für die Größe der Population eines gegebenen EAs

32 10 Kapitel 2: Evolutionäre Algorithmen ist, hängt vom zu lösenden Problem ab. In [83] wird eine problemabhängige Formel für eine geeignete Populationsgröße von genetischen Algorithmen (GAs) angegeben. Die Herleitung basiert auf der Baustein-Hypothese (Building Block Hypothesis) [81]. Diese Hypothese besagt, dass die Funktionsweise eines GA darauf basiert, dass der GA implizit aufgrund von Stichproben Bausteine möglicher Lösungen bewertet und gute Bausteine kombiniert. Bei kleinen Populationen kann der GA aufgrund der kleinen Stichprobenmenge aber Fehler bei der Beurteilung konkurrierender Bausteine machen. Die Formel für die Populationsgröße nach [83] soll gewährleisten, dass die Rate der Fehlentscheidungen des GA im Schnitt unter einem gewissen Niveau liegt. Die Populationsgröße ist dabei proportional zur Länge der Codierung der Individuen des GA. Harik et al. [91] leiten ebenfalls basierend auf der Baustein-Hypothese eine alternative Formel für die Populationsgröße in GAs her. Die Formeln aus [83] und [91] lassen sich in der Praxis aber nur schwer anwenden, da dies konkretes Wissen über die Bausteine des zu lösenden Problems verlangt. Smith und Smuda [197] schlagen eine Methode basierend auf den theoretischen Grundlagen aus [83] vor, welche während der Laufzeit einer Optimierung versucht, empirisch Informationen über die Bausteine zu gewinnen und die Population entsprechend zu vergrößern oder zu verkleinern. Einen anderen Ansatz zum automatischen Auffinden einer geeigneten Populationsgröße schlagen Harik und Lobo [92] vor. Dabei wird ein EA parallel mit unterschiedlich großen Populationen ausgeführt. Je kleiner die Population, umso mehr Rechenzeit bzw. Fitnessbewertungen bekommt die Optimierung auf der Population zugesprochen. Sobald eine Population konvergiert, das heißt, alle Individuen der Population sind gleich, so wird die Optimierung auf ihr abgebrochen. Weiterhin wird die Optimierung auf einer Population abgebrochen, sobald die Optimierung auf einer größeren Population bei einer besseren Fitness angelangt ist. 2.3 Elternselektion Bevor aus Individuen der Population Nachkommen erzeugt werden, muss zunächst entschieden werden, welche Individuen der Population als Elternindividuen ausgewählt werden. Die Selektion ist dafür zuständig, die Suche in Richtung vielversprechender Regionen des Suchraums zu führen. Es existieren

33 2.3. Elternselektion 11 eine Reihe gebräuchlicher Selektionsoperatoren, welche sich in deterministische Selektion und stochastische Selektion klassifizieren lassen. Ein Beispiel für deterministische Selektion ist die neutrale Selektion der evolutionären Programmierung (EP) (siehe Abschnitt 2.8), bei der jedes Individuum der Population selektiert wird und einen Nachkommen erzeugt. Ein anderes Beispiel ist die Truncation-Selection, wie sie üblicherweise bei den Evolutionsstrategien (ES) (Abschnitt 2.7) für die Selektion der Überlebenden angewendet wird. Dabei werden von den µ Individuen der Population die ρ λ besten selektiert, wobei ρ die Anzahl der Eltern darstellt, die zur Erzeugung eines Nachkommen benötigt werden. Eine oft genutzte Form der stochastischen Selektion ist die fitnessproportionale Selektion, auch Roulette-Selektion genannt, wie sie von Holland ursprünglich für GAs vorgeschlagen wurde. Dabei werden Elternindividuen zufällig gewählt, wobei die Wahrscheinlichkeit für ein Individuum, selektiert zu werden, proportional zu seiner Fitness ist. Wird die Fitnessfunktion f genutzt und die Population besteht aus den Individuen I 1,..., I µ, so berechnet sich die Wahrscheinlichkeit p(i k ), mit der das Individuum I k (1 k µ) selektiert wird, als p(i k ) = f(i k) µ i=1 f(i i ). Falls in der Population eine kleine Anzahl von Individuen mit einer im Vergleich zu den restlichen Individuen sehr hohen Fitness existiert, so werden diese wenigen Individuen bei der Roulette-Selektion sehr stark gegenüber den anderen Individuen bevorzugt. Dies soll bei der rangbasierten Selektion verhindert werden. Bei ihr werden die Individuen der Population aufsteigend nach ihrer Fitness sortiert und die Wahrscheinlichkeit dafür, dass ein bestimmtes Individuum selektiert wird, hängt entweder linear oder nichtlinear von dessen Position in der sortierten Liste ab. Bei der linearen rangbasierten Selektion berechnet sich die Selektionswahrscheinlichkeit für das i-te Individuum der Liste zu p(i i ) = 1 ( µ (2 S) + 2 (S 1) i 1 ). (2.1) µ 1 Von der nichtlinearen rangbasierte Selektion existieren verschiedene Varianten. Ein Beispiel ist die folgende Berechnung der Selektionswahrscheinlichkeit für das i-te Individuum der sortierten Liste: p(i i ) = (S 1) (2 S) µ i. (2.2)

34 12 Kapitel 2: Evolutionäre Algorithmen Der Parameter S (1 < S < 2) in (2.1) und (2.2) steuert dabei den Selektionsdruck. Ein hoher Selektionsdruck bedeutet, dass ein Individuum sehr gut im Vergleich zu den anderen Individuen der Population sein muss, um eine realistische Chance zu haben, selektiert zu werden und damit sein Genmaterial an Nachkommen weiterzugeben. Ein niedriger Selektionsdruck sorgt dafür, dass auch schlechte Individuen eine gute Chance haben, sich fortzupflanzen. Das sorgt für eine hohe Exploration, führt allerdings auch zu einer niedrigen Exploitation. Damit lässt sich das Verhältnis zwischen Exploration und Exploitation über den Selektionsdruck steuern. Abb. 2.1 zeigt die Selektionswahrscheinlich- 0,8 0,7 lineare rangbasierte Selektion (S = 1,8) lineare rangbasierte Selektion (S = 1,2) nichtlineare rangbasierte Selektion (S = 1,8) nichtlineare rangbasierte Selektion (S = 1,2) 0,6 0,5 p 0,4 0,3 0,2 0, Position i Abbildung 2.1: Selektionswahrscheinlichkeit bei der linearen rangbasierten Selektion nach (2.1) und der nichtlinearen rangbasierten Selektion nach (2.2), abhängig von der Position i in der nach Fitness aufsteigend sortierten Population der Größe 10 für S = 1,8 und S = 1,2. keiten der linearen und nichtlinearen Selektion entsprechend (2.1) und (2.2) für eine Population der Größe 10 und für S = 1,8 und S = 1,2. Man kann sehen, dass die nichtlineare Selektion einen höheren Selektionsdruck verursacht als die lineare Selektion. Individuen mit guter Fitness werden stärker gegenüber Individuen mit schlechter Fitness bevorzugt. Eine weitere oft genutzte Form der stochastischen Selektion ist die Tournament-Selektion. Dabei werden k Individuen zufällig mit gleichverteilter Wahrscheinlichkeit aus der Population ausgewählt und das beste dieser k Individuen wird als Elternindividuum selektiert. Für k = 2 spricht man auch von binärer

35 2.4. Variationsoperatoren 13 Tournament-Selektion. Je größer k ist, umso größer ist der Selektionsdruck. Damit verfügt die Tournament-Selektion, wie die rangbasierte Selektion, über einen Parameter, der zur Steuerung des Selektionsdrucks und damit zur Steuerung der Balance zwischen Exploration und Exploitation genutzt werden kann. Es kann gezeigt werden, dass sich die Tournament-Selektion mit k = 2 im Mittel wie lineare rangbasierte Selektion verhält und dass durch nichtlineare rangbasierte Selektion das gleiche Verhalten erreicht werden kann wie mit der Tournament-Selektion mit k > 2 [82]. Aufsteigend nach Selektionsdruck geordnet, ergibt sich folgende Reihenfolge für die genannten Selektionsoperatoren [18, 57, S. 58]: 1. neutrale Selektion 2. Roulette-Selektion 3. lineare rangbasierte Selektion und binäre Tournament-Selektion 4. nichtlineare rangbasierte Selektion und Tournament-Selektion mit k > 2 5. Truncation-Selektion 2.4 Variationsoperatoren Die Variationsoperatoren sind dafür zuständig, aus Elternindividuen Nachkommen zu bilden. Die elementaren Variationsoperatoren von EAs sind dabei die asexuelle Mutation auf nur einem Elternindividuum und die sexuelle Rekombination auf zwei oder mehr Elternindividuen. Bei der Mutation werden die Gene eines Individuums mit einer gewissen Mutationswahrscheinlichkeit pm zufällig variiert. Je größer die Mutationswahrscheinlichkeit und die durchschnittliche Schrittweite der Variation ist, umso größer ist die durch die Mutation entstehende Exploration. Die Rekombination erzeugt einen oder mehrere Nachkommen durch das Kombinieren der Gene der Elternindividuen. Grundgedanke ist dabei, dass durch die Kombination guter Eltern ein noch besserer Nachkomme erzeugt wird. Laut der Baustein-Hypothese [81] beruht der Erfolg einer guten Rekombination darauf, unterschiedliche gute Teile (Bausteine) der Eltern zu kombinieren. Demgegenüber steht die Genetic-Repair-Hypothese nach Beyer [27],

36 14 Kapitel 2: Evolutionäre Algorithmen welche besagt, dass die Funktionsweise der Rekombination darauf beruht, gleiche Teile der Eltern in die nächste Generation zu vererben, da diese Teile offensichtlich zu einer hohen Fitness beitragen. Da die Population im Verlauf der Optimierung konvergiert und sich die Individuen immer weiter angleichen, wird die durch die Rekombination verursachte Variation mit Fortschreiten der Optimierung zunehmend geringer. Damit nimmt die Exploration ab und die Exploitation nimmt zu. Die Variation durch die Mutation ist hingegen unabhängig von der Konvergenz der Population und wird somit mit Fortschreiten der Optimierung immer wichtiger für die Exploration. Beispiele für gängige Mutations- und Rekombinationsoperatoren werden in den Abschnitten im Kontext von den verschiedenen Formen von EAs diskutiert. 2.5 Selektion von Überlebenden und Aktualisierungsstrategie Beim Entwurf eines EA stellt sich die Frage, wie viele Nachkommen erzeugt werden, bevor eine neue Population gebildet wird und welche Individuen in die neue Population übernommen werden oder kurz gesagt, nach welcher Strategie die Population aktualisiert wird. Man unterscheidet Strategien zur Aktualisierung der Population in Modelle sich überlappender Generationen und Modelle sich nicht überlappender Generationen. Bei Letzteren wird die neue Population ausschließlich aus Nachkommen gebildet und bei Modellen sich überlappender Generationen können auch Individuen der alten Population in die neue Population einfließen. Zwei Spezialfälle sind das Steady-State-(Gleichgewichts)- Modell, auch (µ + 1)-Modell genannt, und das Generationen-Modell. Bei dem Steady-State-Modell werden ein oder je nach Rekombinationsoperator auch zwei Nachkommen direkt nach deren Erzeugung in die Population eingefügt. Bei dem Generationen-Modell werden genau µ Nachkommen erzeugt, die unabhängig von ihrer Fitness die komplette alte Population ersetzen. De Jong [58] führte den Begriff der Generationslücke (Generation Gap) für das Modell sich überlappender Generationen als das Verhältnis zwischen der Anzahl λ der Nachkommen pro Generation und der Populationsgröße µ ein. Ei-

37 2.6. Genetische Algorithmen 15 ne kleine Generationslücke (im Extremfall 1/µ, wie beim Steady-State-Modell) bedeutet, dass Nachkommen schon sehr bald nach ihrer Erzeugung in die Population eingefügt werden und dort schlechte Individuen verdrängen. Damit fließt neu erworbenes Wissen über die Fitnesslandschaft schnell in die Suche ein. Je größer die Generationslücke ist, umso länger können auch schlechtere Individuen in der Population verbleiben und umso geringer ist damit der Selektionsdruck [42]. Ebenfalls einen Einfluss auf den Selektionsdruck hat die Strategie, mit der die Überlebenden der nächsten Generation ausgewählt werden. Beim Modell sich überlappender Generationen werden die Überlebenden aus der alten Population und den Nachkommen ausgewählt, während sie bei dem Modell sich nicht überlappender Generationen nur aus der Menge der Nachkommen ausgewählt werden. Zur Selektion der Überlebenden können analoge Operatoren wie für die Selektion der Eltern eingesetzt werden. Oftmals wird die Truncation- Selektion eingesetzt, bei der die µ besten Individuen überleben. Wenn sichergestellt ist, dass das beste Individuum überlebt, spricht man auch von Elitismus (Elitism). Mit der Zeit haben sich gewisse Grundformen von EAs herausgebildet, welche sich hinsichtlich der Repräsentation der Individuen, der Selektionsstrategie und/oder den Variationsoperatoren unterscheiden. Die vier bekanntesten Formen sind genetische Algorithmen, Evolutionsstrategien, evolutionäre Programmierung und genetische Programmierung (GP). Die ersten drei genannten Formen entstanden unabhängig voneinander durch Arbeiten verschiedener Gruppen in den 1960er und 1970er Jahren. Bei der genetischen Programmierung handelt es sich um eine vergleichsweise junge Form von EAs, welche in den 1990er Jahren entstand und sich rasch etablieren konnte. In den folgenden Abschnitten soll auf diese vier gängigen Formen von EAs näher eingegangen werden. 2.6 Genetische Algorithmen Als Begründer von GAs gilt John Holland. Mit seinem Werk Adaption in Natural and Artificial Systems [97] von 1975 legte er die entscheidenden Grundlagen und entwickelte mit seinem Schemasatz den theoretischen Hintergrund

38 16 Kapitel 2: Evolutionäre Algorithmen von GAs. Vor allem Kenneth De Jong und David Goldberg trugen in den Folgejahren maßgeblich zur Weiterentwicklung von GAs bei. Beim Original-GA dem sogenannten kanonischen GA nach Holland wird eine binäre Codierung von Individuen genutzt. Jedes Gen kann also nur die Werte 0 oder 1 annehmen. Die komplette Gensequenz eines Individuums wird als Chromosom bezeichnet. Abb. 2.2 zeigt ein Beispiel der Codierung des kanonischen GA. Die Intuition hinter der binären Codierung ist, dass der GA Abbildung 2.2: Beispiel für die Codierung von 3 Integer-Werten {0,..., 7} nach dem kanonischen GA. unabhängig vom Phenotyp ausschließlich auf Bits arbeitet und damit universell einsetzbar ist. Den Ablauf des kanonischen GA zeigt Algorithmus 2. Bei der dabei verwendeten Bit-Flip-Mutation werden die Bits des Individuums mit der Mutationswahrscheinlichkeit pm pro Bit invertiert. Häufig wird pm = 1/L gesetzt, wobei L der Anzahl der Bits eines Individuums entspricht. Damit wird im Schnitt pro Anwendung der Bit-Flip-Mutation ein Bit invertiert. Für die Rekombination kommt die One-Point-Rekombination zum Einsatz. Diese ist in Abb. 2.3 dargestellt. Es wird ein zufälliger Index p mit 1 p < L Abbildung 2.3: Rekombination zweier Elternindividuen P 1 und P 2 zu einem Nachkommen O über One-Point-Rekombination mit dem Schnittpunkt p = 2.

39 2.6. Genetische Algorithmen 17 Algorithmus 2 Ablauf des kanonischen GA nach Holland. Dabei bezeichnet unif orm(0, 1) eine auf dem Intervall [0, 1] gleichverteilte Zufallszahl. Input: µ (Populationsgröße) pm [0, 1] (Mutationsrate) pc [0, 1] (Rekombinationsrate) Initialisiere Population P mit µ zufälligen Individuen Bewerte Individuen aus P while Abbruchkriterium nicht erfüllt do O for i in 1... µ do P 1 Roulette-Selektion(P ) P 2 Roulette-Selektion(P ) if uniform(0, 1) pc then O One-Point-Rekombination(P 1,P 2 ) else O P 1 end if Bit-Flip-Mutation(O,pm) Bewerte O O = O {O} end for P O end while bestimmt und die Gene 1,..., p des Nachkommen werden vom ersten Elternindividuum übernommen und die Gene (p + 1),..., L vom zweiten Elternindividuum. Damit ließe sich leicht noch ein zweiter Nachkomme bilden, bei dem die Gene genau umgekehrt übernommen werden. Auch lässt sich die One- Point-Rekombination zu einer k-point-rekombination verallgemeinern, bei der k Schnittpunkte ausgewählt werden. Häufig kommt zum Beispiel die Two- Point-Rekombination mit k = 2 zum Einsatz. Die Anzahl der Schnittpunkte muss nicht zwangsläufig fest vorgegeben sein, sondern kann auch bei jeder Anwendung zufällig bestimmt werden, so wie es bei der Uniform-Rekombination

40 18 Kapitel 2: Evolutionäre Algorithmen [205] der Fall ist. Dabei wird für jedes Gen des Nachkommen zufällig mit gleichverteilter Wahrscheinlichkeit entschieden, ob das Gen vom ersten oder vom zweiten Elternteil übernommen wird. Damit existieren bei der Uniform- Rekombination im Durchschnitt L/2 Schnittpunkte für Individuen mit L Genen [205]. Bei der One- und Two-Point-Rekombination hat der Abstand zwischen zwei Genen im Chromosom einen Einfluss darauf, wie hoch die Wahrscheinlichkeit ist, dass beide Gene vom selben Elternindividuum übernommen werden. Zwei weit voneinander entfernte Gene haben im Schnitt eine geringere Wahrscheinlichkeit vom selben Elternindividuum übernommen zu werden als zwei im Chromosom benachbarte Gene. Dieser Effekt tritt bei der Uniform-Rekombination nicht auf, was sich für eine Vielzahl von Optimierungsproblemen beziehungsweise Codierungen positiv auf die Effizienz der Rekombination auswirkt. Allerdings steigt mit der Anzahl der Schnittpunkte der Grad der Variation, welche durch die Rekombination hervorgerufen wird, und die Variation der Uniform-Rekombination ist in vielen Fällen zu hoch. Daher wurde von Spears und De Jong [198] die sogenannte parametrisierte Uniform- Rekombination vorgeschlagen. Dabei liegt die Wahrscheinlichkeit, dass ein Gen vom ersten Elternteil gewählt wird zwischen 0,0 und 0,5. Über den Wert für die Wahrscheinlichkeit kann damit der Grad der Variation gesteuert werden. Neben den beschriebenen Erweiterungen der One-Point-Rekombination haben sich im Laufe der Zeit viele weitere Variationen des kanonischen GA etabliert. Eine gängige Variation ist, dass von der Aktualisierungsstrategie entsprechend dem Generationen-Modell abgewichen wird. Bei einem der bekanntesten GAs dem GENITOR-(GENetic ImplemenTOR)-Algorithmus [222, 221] wird beispielsweise das Steady-State-Modell eingesetzt. Eine weitere Variation ist, dass statt der binären Codierung eine andere Codierungsform genutzt wird. Sehr gebräuchlich ist beispielsweise die reellwertige Codierung von Individuen. Aus Hollands theoretischen Grundlagen [97] folgt, dass Alphabete einer geringen Kardinalität besser für die Codierung in GAs geeignet sind als Alphabete mit einer höheren Kardinalität. Demnach sollten GAs effizienter auf einer binären Codierung arbeiten als auf einer reellwertigen Codierung. Die Praxis hat jedoch gezeigt, dass dies für eine Vielzahl von Problemen nicht der Fall ist. So kommen beispielsweise Janikow und Michalewicz [103] 1991 über einen experimentellen Vergleich zwischen binärer und reellwertiger Codierung

41 2.6. Genetische Algorithmen 19 zu dem Schluss, dass die reellwertige Codierung dazu führt, dass die Optimierung schneller und robuster ist und Ergebnisse höherer Genauigkeit liefert als mit einer binären Codierung. Die reellwertige Codierung ermöglicht beziehungsweise erfordert teilweise andere Variationsoperatoren, als jene, welche beim kanonischen GA eingesetzt werden. So lässt sich die Bit-Flip-Mutation nicht auf reellwertigen Genen einsetzen. Stattdessen wird üblicherweise bei der Mutation eines reellwertigen Gens ein zufälliger Wert auf das Gen aufaddiert. Bei der oft eingesetzten Gauß-Mutation ist dieser Zufallswert normalverteilt. Demnach wird bei der Gauß-Mutation ein Gen g folgendermaßen zu einem Gen g mutiert: g := g + σn (0, 1), wobei σ die Standardabweichung der Normalverteilung darstellt. Ein weiterer Mutationsoperator, der neben der Gauß-Mutation häufig für reellwertige Codierungen eingesetzt wird, ist die BGA-Mutation, welche von Mühlenbein et al. für den sogenannten Breeder GA [151] eingeführt wurde. Dabei wird jedes Gen g i eines Nachkommen mit einer gewissen Mutationswahrscheinlichkeit entsprechend Algorithmus 3 mutiert. min(g i ) und max(g i ) stellen dabei die untere bzw. obere Grenze des Wertebereichs von g i dar. Die Werte von m und α sind Parameter der Mutation. Mühlenbein empfiehlt m = 16 und α = 0,1 [151]. Die Mutationsschrittweite, mit der ein Gen mutiert wird, hängt maßgeblich von dem zufällig erzeugten Wert für δ ab. Der Operator ist so angelegt, dass große Mutationsschrittweiten zwar möglich sind, in den meisten Fällen aber mit einer kleinen Schrittweite mutiert wird. Für die Rekombination reellwertiger Individuen kann wie für die binäre Codierung k-point-rekombination oder Uniform-Rekombination eingesetzt werden. Eine andere Form der Rekombination für reellwertige Individuen ist die lineare Rekombination [151]. Dabei wird das i-te Gen o i des Nachkommen in einem Bereich zwischen bzw. um die entsprechenden Gene p 1 i und p 2 i der Elternindividuen wie folgt gebildet: o i := p 1 i + α i (p 2 i p 1 i ) für i = 1,..., n, wobei der Faktor α i gleichverteilt aus dem Intervall [ 0, 25; 1, 25] gezogen wird und o. B. d. A. p 1 i p 2 i gilt.

42 20 Kapitel 2: Evolutionäre Algorithmen Algorithmus 3 Ablauf der Mutation eines Gens g i bei der BGA-Mutation. oldv al g i newv al 0 repeat δ 0 for i in 0... m 1 do p Uniform(0, 1) if p 1/m then end if end for δ δ + 2 i p Uniform(0, 1) if p 0.5 then else end if newv al oldv al + δ α (max(g i ) min(g i )) newv al oldv al δ α (max(g i ) min(g i )) until min(g i ) newv al max(g i ) g i newv al 2.7 Evolutionsstrategien Die Evolutionsstrategie (ES) ist eine Form von EA, welche auf Arbeiten von Rechenberg und Schwefel [174, 186] basiert. Die Besonderheit der ES besteht darin, dass sie zur Selbstadaption fähig ist. Das heißt, dass während der Evolution nicht nur die aus dem zu lösenden Optimierungsproblem resultierenden Objektparameter variiert werden, sondern zusätzlich interne Strategieparameter des Algorithmus angepasst werden, insbesondere Parameter des Mutationsoperators. Im Kontext von Evolutionsstrategien werden unveränderliche Strategieparameter, wie z. B. die Populationsgröße, exogene Parameter genannt und jene Strategieparameter, welche bei der Optimierung variiert werden, werden als endogene Parameter bezeichnet. Die bereits in Abschnitt 2.5 genutzte µ-λ-notation für die Aktualisierungsstrategie geht aus dem Umfeld der Evolutionsstrategien hervor. (µ, λ) bedeutet, dass mit einer Population der Größe µ gearbeitet wird und in jeder Generation

43 2.7. Evolutionsstrategien 21 λ Nachkommen erzeugt werden, aus denen µ Individuen als Population für die nächste Generation selektiert werden. Dabei muss λ > µ gelten. Im Gegensatz dazu wird die neue Population bei einer (µ + λ)-es aus der Vereinigung der alten Population mit der Menge der Nachkommen selektiert. Die ursprüngliche ES nach Rechenberg und Schwefel nutzte eine (1 + 1)-Strategie. Evolutionsstrategien werden meist für kontinuierliche Optimierungsprobleme eingesetzt und arbeiten auf reellwertigen Codierungen. Es existieren zwar auch Erweiterungen für diskrete Optimierungsprobleme, diese sollen an dieser Stelle allerdings nicht diskutiert werden. Bei der ES setzt sich ein Individuum I k aus einer Liste y k von Objektparametern und einer Liste s k von Strategieparametern zusammen: I k = (y k, s k ). Algorithmus 4 zeigt den allgemeinen Ablauf der Evolutionsstrategie. Die Erzeugung der λ Nachkommen einer Generation findet in einer Schleife in den Zeilen 6 11 statt. Zunächst werden ρ Elternindividuen aus der Population selektiert. Dabei hat jedes Individuum der Population, unabhängig von seiner Fitness, die gleiche Wahrscheinlichkeit, selektiert zu werden. Danach werden die ρ Eltern kombiniert, wobei üblicherweise verschiedene Rekombinationsoperatoren für die Objektparameter und die endogenen Strategieparameter genutzt werden. Für ρ = 1 wird das selektierte Elternindividuum schlicht kopiert. Anschließend wird der Nachkomme mutiert, wobei auch hier wieder unterschiedliche Operatoren für die Objektparameter und die Strategieparameter eingesetzt werden. In die Mutation der Objektparameter fließen die bereits mutierten Strategieparameter ein. Daher darf die Reihenfolge der Mutationen nicht vertauscht werden. Nachdem die neu erzeugten Nachkommen bewertet wurden, wird am Ende einer Generation die neue Population erstellt. Je nach Aktualisierungsstrategie werden die Individuen der neuen Population dabei entweder aus der alten Population und den Nachkommen ausgewählt oder nur aus der Menge der Nachkommen. Für die Selektion der Überlebenden wird die Truncation-Selektion eingesetzt. Es werden also die µ besten Individuen selektiert. Aufgrund der eingesetzten Selektionsoperatoren bei Evolutionsstrategien, sollte bei der (µ, λ)-strategie λ > µ gelten. Für λ = µ würden nämlich alle Nachkommen unabhängig von ihrer Fitness als Überlebende selektiert. Da die Elternselektion auch unabhängig von der Fitness ist, würde die Selekti-

44 22 Kapitel 2: Evolutionäre Algorithmen Algorithmus 4 Ablauf einer (µ, λ)- bzw. (µ + λ)-es. 1: Initialisiere Population P = {(y 1, s 1 ),..., (y µ, s µ )} mit µ zufälligen Individuen 2: Bewerte Individuen aus P 3: while Abbruchkriterium nicht erfüllt do 4: O 5: for i in 1,..., λ do 6: E i Elternselektion(P, ρ) 7: s i Rekombination_s(E i ) 8: y i Rekombination_y(E i ) 9: s i Mutation_s(s i) 10: y i Mutation_y(y i, s i) 11: O = O {(y i, s i)} 12: end for 13: Bewerte Nachkommen in O 14: if Strategie == (µ, λ) then 15: P Truncation-Selektion(O, µ) 16: else # Strategie == (µ + λ) 17: P Truncation-Selektion(P O, µ) 18: end if 19: end while on dann keinen Einfluss auf die Suchrichtung des Algorithmus haben und die Suche würde einer Zufallssuche ähneln. Zwei typische Rekombinationsoperatoren, die bei Evolutionsstrategien zur Rekombination der Objektparameter von ρ > 1 Elternindividuen eingesetzt werden, sind die diskrete Rekombination und die intermediäre Rekombination (intermediate recombination). Die diskrete Rekombination arbeitet wie die Uniform-Rekombination, mit dem Unterschied, dass die Gene des Nachkommen gleichverteilt von gegebenenfalls mehr als zwei Elternindividuen gewählt werden. Bei der intermediären Rekombination wird ein Objektparameter des Nachkommen auf den Mittelwert der entsprechenden Objektparameter der ρ Elternindividuen gesetzt. Bezeichne y die Liste der Objektparameter des Nachkommen und y1, p..., yρ p die Listen der Objektparameter der Eltern, so gilt bei

45 2.7. Evolutionsstrategien 23 der intermediären Rekombination: ρ i=1 y p i y :=. ρ Zur Mutation der Objektparameter wird üblicherweise die Gauß-Mutation eingesetzt, bei der auf die Objektparameter y ein normalverteilter Zufallsvektor z addiert wird: y := y + z. Es existieren verschiedene Ansätze zur Bildung des Zufallsvektors z. Der einfachste Ansatz ist, für die Erzeugung aller N Elemente von z eine einheitliche Standardabweichung σ, und somit eine einheitliche Schrittweite für die Mutation von y zu nutzen: z := (σn 1 (0, 1),..., σn N (0, 1)). (2.3) Die Standardabweichung σ stellt dabei einen endogenen Strategieparameter dar. Oftmals ist es von Vorteil, für die Mutation der Objektparameter unterschiedliche Schrittweiten einzusetzen und z wie folgt zu bilden: z := (σ 1 N 1 (0, 1),..., σ N N N (0, 1)). (2.4) Damit existieren N endogene Strategieparameter σ 1,..., σ N. Eine ausgefeiltere Methode zur Bildung von z besteht darin, zusätzlich eine N N-Rotationsmatrix R einzusetzen, über welche die Normalverteilung sozusagen im Raum rotiert wird: z := R(σ 1 N 1 (0, 1),..., σ N N N (0, 1)). (2.5) Die Strategieparameter sind hierbei N(N 1)/2 Rotationswinkel und die N Schrittweiten σ 1,..., σ N. Über die Rotation lassen sich beliebige Normalverteilungen erzeugen. Eine analoge Vorgehensweise zur Erzeugung beliebiger Normalverteilungen besteht in der Nutzung einer multivariaten Normalverteilung mit einer positiv definiten N N-Kovarianzmatrix C. Der Vektor z wird dabei folgendermaßen gebildet: z := σn (0, C) (2.6) = BD(σN 1 (0, 1),..., σn N (0, 1)) (2.7) Die Matrix B ist dabei eine Matrix, deren Spalten den Eigenvektoren von C entsprechen und D ist eine Diagonalmatrix mit den Wurzeln der Eigenwerte

46 Kapitel 2: Evolutionäre Algorithmen 24 von C als Werte der Hauptdiagonale. Die Schrittweiten der Mutation in den verschiedenen Dimensionen werden hier durch die Elemente der Matrix D bestimmt. Bei dieser Form der Mutation sind die Strategieparameter die Matrix C und die globale Schrittweite σ. Wie sich die verschiedenen Formen der Erzeugung von z auf die Richtung und Länge der Mutationsschritte auswirken, verdeutlicht Abb (a) (b) (c) Abbildung 2.4: Je 5000 zweidimensionale Stichproben generiert entsprechend (a) Formel (2.3) (mit σ = 2), (b) Formel (2.4) (mit σ1 = 2 und σ2 = 0,5) und (c) Formel (2.5) bzw. Formel (2.6). Für die Mutation der Strategieparameter existieren verschiedene Ansätze. Im einfachsten Fall ist nur eine globale Schrittweite σ zu mutieren, die für alle Individuen identisch ist. Ist die Schrittweite zu klein, so ist zwar die Chance hoch, durch die Mutation eine Verbesserung zu erreichen, jedoch kann nur eine sehr kleine Verbesserung erreicht werden und es werden sehr viele Schritte benötigt, um das Optimum zu erreichen. Ist die Schrittweite hingegen zu groß, so wird mit hoher Wahrscheinlichkeit über das Optimum hinweggesprungen. Demnach deuten übermäßig viele Verbesserungen darauf hin, dass die Schrittweite zu klein ist und sehr wenige Verbesserungen deuten darauf hin, dass die Schrittweite zu groß ist. Aufbauend auf diesem Grundgedanken stellte Rechenberg die bekannte 1/5-Regel für (1 + 1)-Evolutionsstrategien auf. Er führte das Maß der Verbesserungsrate Ps ein, welche den Anteil der Nachkommen bezeichnet, die das Elternindividuum ersetzen und untersuchte, welche Verbesserungsrate die (1 + 1)-ES für das Kugelmodell1 und das Korridormo1 Beim Kugelmodell ist die Fitness im Ursprung des Koordinatensystems am höchsten und nimmt mit wachsender euklidischer Distanz zum Ursprung ab.

47 2.7. Evolutionsstrategien 25 dell 2 am effizientesten macht [175]. Er kam zu dem Schluss, dass eine Rate von 1/5 optimal ist. Dies lässt sich wie folgt für die Mutation der Schrittweite σ nutzen: Iterativ wird über eine bestimmte Anzahl G von Generationen die Verbesserungsrate bestimmt und die Schrittweite während dieser G Generationen konstant gehalten. Ist die gemessene Verbesserungsrate < 1/5, so wird σ verkleinert, indem es mit einer Konstante α < 1 multipliziert wird. Falls die gemessene Verbesserungsrate > 1/5 ist, so wird σ vergrößert, indem es durch α geteilt wird. Schwefel [187] empfiehlt 0,85 α < 1. Diese Strategie hat allerdings gewisse Nachteile: Sie ist nur anwendbar, wenn eine globale Schrittweite genutzt wird, die für alle Individuen identisch ist. Außerdem ist sie nicht effizient, falls eine andere Aktualisierungsstrategie genutzt wird als die (1 + 1)-Strategie [28]. Üblicherweise kommen Verfahren zum Einsatz, bei denen entsprechend Algorithmus 4 jedes Individuum eine eigene Schrittweite zusammen mit den Objektparametern codiert, welche in jeder Generation einer Mutation unterzogen wird. Ein gängiger Operator für diese Mutation der Schrittweite ist der Lognormal-Operator [187], bei welchem die Schrittweite folgendermaßen mutiert wird: σ := σ exp(τn (0, 1)). Der exogene Strategieparameter τ sollte dabei proportional zu 1/ N gewählt werden [187]. Der Lognormal-Operator lässt sich auch folgendermaßen für den Fall erweitern, dass pro Individuum mehrere Schrittweiten entsprechend Formel (2.4) genutzt werden [188]: (σ 1,..., σ N) := exp(τ 0 N 0 (0, 1)) (σ 1 exp(τn 1 (0, 1)),..., σ N exp(τn N (0, 1)) ). Die einzelnen Schrittweiten werden also zunächst unabhängig voneinander per Lognormal-Operator mutiert und anschließend alle mit exp(τ 0 N 0 (0, 1)) skaliert. Folgende Werte werden für τ 0 und τ empfohlen: τ 0 = c 2 N und τ = c 2 N mit einer gewissen Konstante c (z. B. c = 1). 2 Beim Korridormodell wächst die Fitness entlang eines Korridors an und ist außerhalb des Korridors.

48 26 Kapitel 2: Evolutionäre Algorithmen Eine erste Form von ES, welche eine Rotationsmatrix entsprechend (2.5) nutzt, wurde mit CORR-ES (Correlated ES) von Schwefel [188] vorgeschlagen. Die Mutation eines Rotationswinkels α erfolgt dabei folgendermaßen: ( α := α + N ( 0, ( 5 ) 180 π)2) + π mod(2π) π. Die populärste Form von ES, welche eine Kovarianzmatrix einsetzt, ist CMA-ES (Evolution Strategy with Covariance Matrix Adaptation) [90]. Dabei wird zur Mutation aller Nachkommen einer Generation eine einheitliche Kovarianzmatrix und eine einheitliche globale Schrittweite genutzt. Von Generation zu Generation wird die Matrix aktualisiert. Die Methode zur Aktualisierung ist sehr komplex und soll daher hier nicht im Detail erläutert werden. Sie arbeitet im Gegensatz zu den hier bereits aufgeführten Mutationsoperatoren deterministisch und nutzt Informationen über den bisherigen Verlauf der Evolution zur Aktualisierung der Kovarianzmatrix wurde von Hansen and Kern [89] die hohe Effizienz von CMA-ES für die Optimierung von acht multimodalen Testfunktionen demonstriert. In dem Algorithmus G-CMA-ES [15] wird CMA-ES in Verbindung mit einer Multistartstrategie eingesetzt. Dabei wird CMA-ES nach dem Erreichen einer Abbruchbedingung mit der doppelten Populationsgröße wie zuvor neu gestartet. Dies wird solange wiederholt, bis ein Ergebnis einer vorgegebenen Güte gefunden wurde. Der Algorithmus lieferte hinsichtlich der durchschnittlich benötigten Anzahl von Bewertungen bis zum Erreichen des Optimums die besten Ergebnisse bei dem Wettbewerb zu kontinuierlichen Optimierungsproblemen der CEC (Congress of Evolutionary Computation) 2005 [78]. Für die Rekombination von Strategieparametern kommt üblicherweise die intermediäre Rekombination zum Einsatz. 2.8 Evolutionäre Programmierung Die evolutionäre Programmierung ist eine Form von EA, welche aus Arbeiten von Lawrence J. Fogel et al. [72] im Bereich künstlicher Intelligenz entstand. In seiner ursprünglichen Form diente EP zum Entwurf von endlichen Automaten und arbeitete folgendermaßen: Zunächst wird eine Population von µ zufälligen Individuen erzeugt, wobei jedes Individuum einen endlichen Automaten darstellt und die Individuen werden hinsichtlich einer Fitnessfunktion bewertet.

49 2.9. Genetische Programmierung 27 In jeder Generation wird dann aus jedem Individuum der Population per Mutation ein Nachkomme erzeugt und bewertet. Die besten µ Individuen aus der Vereinigung der alten Population mit der Menge der Nachkommen bilden die Population der nächsten Generation. Heutzutage ist EP längst nicht mehr auf den Entwurf endlicher Automaten beschränkt und wird insbesondere auch zur Lösung kontinuierlicher Optimierungsprobleme eingesetzt, wobei üblicherweise die Gauß-Mutation genutzt wird. Zwei weitere gebräuchliche Änderungen zum ursprünglichen Algorithmus sind 1. der Einsatz von Tournament-Selektion für die Auswahl der Überlebenden der nächsten Generation und 2. der Einsatz von Selbstadaption. Für die Mutation der Schrittweite σ bei der Selbstadaption schlug David B. Fogel [72] (der Sohn von Lawrence J. Fogel) folgenden Operator vor: σ := σ + σ N (0, 1) kam es erstmals zum Austausch zwischen der EP- und der ES-Gemeinschaft [20]. Dies führte dazu, dass vermehrt Ideen von Evolutionsstrategien auch für EP genutzt wurden. So finden sich die gängigen ES-Mutationsoperatoren für die Objekt- und Strategieparameter heutzutage auch in EP wieder. Damit sind die Grenzen zwischen EP und ES zunehmend fließend. Die Hauptunterschiede bestehen darin, dass beim EP im Gegensatz zu ES keine Rekombination genutzt wird und dass die Überlebenden einer Generation bei EP mittels Tournament-Selektion ausgewählt werden und nicht mittels Truncation-Selektion wie bei der ES. 2.9 Genetische Programmierung Eine weitere Form von EA ist die genetische Programmierung. Dabei handelt es sich um eine Spezialform von GAs, bei welcher Computerprogramme evolviert werden. Sie geht auf Arbeiten von Koza [109] Anfang der 1990er Jahre zurück. Die evolvierten Programme sind dabei nicht zwangsläufig reale Computerprogramme, wie sie ein Programmierer implementieren würde, sondern

50 28 Kapitel 2: Evolutionäre Algorithmen können auch mathematische Formeln, logische Schaltkreise, Regeln von zellulären Automaten oder Ähnliches darstellen. Unabhängig davon, was die Programme repräsentieren, setzen sie sich aus einer Reihe von Funktionen und Terminalen zusammen und lassen sich in Form eines Syntaxbaums mit den Terminalen als Blättern darstellen. Ein Beispiel für einen solchen Syntaxbaum zeigt Abb Das Programm steht dabei für Abbildung 2.5: Beispiel für ein Programm eines GP. den Ausdruck (a + b) 3 mit den Funktionen + und und den Terminalen a, b und 3. Die Variablen a und b stellen dabei Eingabeparameter des Programms dar. Die Menge aller zulässigen Terminale definiert zusammen mit der Menge aller zulässigen Funktionen den Suchraum des GP. Bei der praktischen Implementierung eines GP werden Programme intern meist auch in Form von Bäumen oder aber in Form von Listen dargestellt. Um zu verhindern, dass die Programme beliebig lang werden können, wird meist eine maximale Länge für die Programme in Form einer maximalen Tiefe für den Syntaxbaum festgelegt. Da die GP eine Spezialform von GAs ist, läuft sie auch analog zu einem GA ab. Da sie jedoch nicht auf Gensequenzen konstanter Länge arbeitet, wie das üblicherweise für GAs der Fall ist, sondern auf Bäumen unterschiedlicher Länge/Größe, setzt sie spezielle Operatoren ein. Dies fängt bereits bei der zufälligen Initialisierung der Startpopulation an, welche auf unterschiedliche Weise geschehen kann. Gängige Methoden zur Initialisierung sind die Full- und die Grow-Methode. Bei der Full-Methode wird ein Baum bis zur (ausschließlich) maximalen Tiefe komplett mit zufällig gewählten Funktionen initialisiert und die Blätter werden mit zufälligen Terminalen initialisiert. Bei der Grow-Methode können auch Knoten des Baums oberhalb der maximalen Tiefe mit Terminalen initialisiert werden. Damit ist die Grow-Methode grundsätzlich dazu in der Lage, Bäume mit mehr Variationen in Form und Größe zu erzeugen als die Full-Methode. Ist

51 2.9. Genetische Programmierung 29 die Menge der Terminale jedoch sehr groß im Vergleich zur Menge der Funktionen, tendiert die Grow-Methode dazu, kleine Bäume (und damit üblicherweise schlechte Programme) zu erzeugen. Ist umgekehrt die Menge der Terminale sehr klein im Vergleich zur Menge der Funktionen, so werden sehr große Bäume erzeugt und die Grow-Methode resultiert in ähnlichen Startpopulationen wie die Full-Methode. Daher schlägt Koza [109] eine Mischung aus beiden Methoden die sogenannte Ramped-half-and-half-Methode vor. Dabei wird die eine Hälfte der Population per Full-Methode initialisiert und die andere Hälfte wird per Grow-Methode initialisiert. Außerdem wird die maximale Tiefe bei der Initialisierung schrittweise erhöht. Die Selektion ist unabhängig von der Codierung der Individuen. Daher werden in GP dieselben Selektionsoperatoren genutzt wie bei GAs. Ein oft genutzter Operator für die Rekombination ist die Teilbaum-Rekombination. Dabei werden zwei Nachkommen aus zwei Elternindividuen erzeugt, indem ein zufällig gewählter Teilbaum eines Elternindividuums mit einem zufällig gewählten Teilbaum des anderen Elternindividuums vertauscht wird. Abb. 2.6 zeigt ein Beispiel für die Anwendung der Teilbaum-Rekombination. Koza Abbildung 2.6: Beispiel für die Erzeugung zweier Nachkommen aus zwei Elternindividuen per Teilbaum-Rekombination. empfiehlt, die auszutauschenden Teilbäume nicht gleichverteilt zu wählen, da der Austausch von Blättern nur wenige Änderungen im Vergleich zu den Elternindividuen bewirkt. Er empfiehlt, in 90 % der Fälle einen inneren Knoten zu wählen und in den restlichen 10 % der Fälle ein Blatt zu wählen.

52 30 Kapitel 2: Evolutionäre Algorithmen Eine Abwandlung der Teilbaum-Rekombination ist die auf GP angepasste One-Point-Rekombination [167]. Diese funktioniert wie die Teilbaum-Rekombination, mit dem Unterschied, dass die auszutauschenden Teilbäume bei beiden Elternindividuen an demselben Schnittpunkt abgeschnitten werden. Eine weitere Form der Rekombination ist die größengerechte (size fair) Rekombination [113]. Dabei wird der Teilbaum vom ersten Elternteil zufällig gewählt und der Teilbaum vom zweiten Elternteil wird so gewählt, dass er ähnlich groß ist wie der vom ersten Elternteil. Mutation wurde anfangs nicht bei der GP eingesetzt, da sie als überflüssig erachtet wurde. Untersuchungen [161, 12, 133, 46] konnten jedoch einen positiven Effekt von Mutation bei der GP zeigen und heutzutage wird sie auch für gewöhnlich eingesetzt. Die gängigsten Mutationsoperatoren sind die Teilbaum- Mutation und die Punkt-Mutation. Bei der Teilbaum-Mutation wird ein Teilbaum durch einen zufälligen neuen Teilbaum ersetzt. Bei der Punkt-Mutation werden die Knoten des Baums durchgegangen und jeder Knoten wird mit einer gewissen Mutationswahrscheinlichkeit durch einen zufälligen anderen Knoten derselben Stelligkeit ersetzt. Die Bewertung eines Programms erfordert die Ausführung des Programms, wobei die Ausführung oft über einen Interpreter erfolgt. Oftmals wird das Programm mehrmals auf verschiedenen Sätzen von Eingabeparametern den sogenannten Fitnessfällen ausgeführt und die dabei entstandenen Ergebnisse werden mit den erwarteten Ergebnissen verglichen. Die Abweichung von den erwarteten Ergebnissen bestimmt die Fitness des Individuums. Gegebenenfalls fließen noch weitere Eigenschaften des Programms, wie z. B. dessen durchschnittliche Laufzeit, in die Bewertung ein Erweiterungen von evolutionären Algorithmen Wiederkehrend finden sich in der Literatur folgende drei Erweiterungen von EAs: coevolutionäre EAs (CoEAs), memetische EAs (auch als hybride EAs bezeichnet) und multikriterielle EAs (MOEAs). Bei CoEAs handelt es sich um EAs, bei denen die Fitness eines Individuums nicht nur vom Zustand dieses Individuums abhängt, sondern auch von den Zu-

53 2.10. Erweiterungen von evolutionären Algorithmen 31 ständen anderer Individuen. Dabei besteht die Abhängigkeit entweder zwischen Individuen einer einzelnen Population oder zwischen Individuen unterschiedlicher Populationen. Man unterscheidet in konkurrierende und kooperierende Coevolution. Bei der konkurrierenden Coevolution versuchen sich Individuen gegenseitig zu schwächen und bei der kooperierenden Coevolution versuchen Individuen zusammenzuarbeiten und gegenseitig voneinander zu profitieren. Eine Form der konkurrierenden Coevolution ist, dass Individuen gegeneinander antreten und die Anzahl der Siege eines Individuums bestimmt dessen Fitness. Dies kann beispielsweise angewendet werden, um Strategien für Probleme der Spieltheorie, wie dem Gefangenendilemma [17], oder Strategien für klassische Strategiespiele wie Tic Tac Toe [13] zu evolvieren. Eine andere Möglichkeit der Anwendung ist der Entwurf von Regeln für Agenten oder Roboter [51, 71]. Eine weitere Form der konkurrierenden Coevolution ist die sog. Fitnessteilung (fitness sharing), welche eine von Holland und Goldberg [97, 84] entwickelte Strategie zur Nischenbildung (niching) [138] ist. Dabei wird die Fitness von Individuen der Population, die entsprechend einer gewissen Distanzmetrik nahe beieinander liegen, verringert. Dadurch soll verhindert werden, dass sich die Suche auf einen nur kleinen Teil des Suchraums konzentriert. Bei sogenannten Wirt-Parasiten-Algorithmen [95] kommt ebenfalls konkurrierende Coevolution zum Einsatz. Dabei wird in einer Population das eigentlich zu lösende Problem optimiert, wobei zur Bewertung Testfälle herangezogen werden, die in einer zweiten Population evolviert werden. Ein Individuum der zweiten Population wird genau dann gut bewertet, wenn die Individuen der ersten Population schlechte Ergebnisse für den entsprechenden Testfall erzielen. Eine Methode der kooperierenden Coevolution wurde von Potter und De Jong [169] vorgeschlagen. Dabei werden die zu optimierenden Parameter in kleinere Gruppen von Parametern zerlegt und die Gruppen werden auf verschiedenen Populationen optimiert. Bei der Bewertung eines Individuums einer dieser Populationen werden die aktuell besten Parametergruppen aus den anderen Populationen genutzt. Ein memetischer EA ist ein EA, welcher mit einer lokalen Suche kombiniert wird. Dafür wird die Ausführung des EA in gewissen Abständen unterbrochen und ein lokaler Suchoperator auf Individuen der Population angewendet, um diese zu verbessern. Gegebenenfalls kommen auch mehrere lokale

54 32 Kapitel 2: Evolutionäre Algorithmen Suchoperatoren zum Einsatz. Dies könnten bspw. Gradientenverfahren, Heuristiken oder ähnliche Operatoren, welche Problemwissen zur lokalen Verbesserung nutzen, sein. Der Begriff des memetischen Algorithmus wurde erstmals von Moscato [150] genutzt, welcher sich wiederum auf den 1976 von Dawkins [56] geprägten Begriff des Mems bezieht. Ein Mem bezeichnet nach Dawkins einen Bewusstseinsinhalt, welcher durch kulturelle Interaktion und nicht körperlich durch Gene weitergegeben wird, wie z. B. Sprache oder Musik. Die Anwendung der lokalen Suche in einem memetischen EA kann auf verschiedenste Weise geschehen. Gängige Strategien sind: je einmalige Anwendung auf alle Individuen, einschließlich den Individuen der Startpopulation, je einmalige Anwendung auf alle Nachkommen nach deren Mutation und ggf. mehrmalige Anwendung auf bestimmte Individuen der Population, z. B. den aktuell besten Individuen. Dabei ergibt eine mehrmalige Anwendung nur dann Sinn, wenn der lokale Suchoperator bei der ersten Anwendung nicht zwangsläufig in einem lokalen Optimum endet, aus dem er nicht mehr entkommen kann. Eine spezielle Ausprägung memetischer Algorithmen stellen sogenannte multi-memetische Algorithmen dar, bei denen Strategieparameter der lokalen Suchoperatoren oder gar die anzuwendenden Suchoperatoren selbst zusätzlich zum Genotyp in den Individuen codiert und variiert werden. Beispiele dafür sind die memetischen EAs nach Krasnogor und Smith [110] und nach Molina et al. [146, 147]. Ein multikriterieller EA führt eine Optimierung hinsichtlich m > 1, sich üblicherweise widersprechender, Optimierungskriterien durch. Normalerweise lässt sich das Optimierungsproblem folgendermaßen formulieren: max f(x), wobei f(x) = (f 1 (x), f 2 (x),..., f m (x)) mit f i : X R für i = 1,..., m. Die Menge X stellt hier den Suchraum dar und die Optimierungskriterien werden durch die Funktionen f i definiert. Für gewöhnlich existiert keine Lösung x X, welche alle Kriterien maximiert. In dem Fall verwendet man das Konzept der Pareto-Optimalität. Ein x 1 X wird als pareto-optimal bezeichnet, falls kein x 2 X existiert, welches x 1 dominiert. Dabei wird ein x 1 von einem x 2 dominiert (x 1 x 2 ), falls f i (x 2 ) f i (x 1 ) für alle i = 1,..., m gilt und ein

55 2.10. Erweiterungen von evolutionären Algorithmen 33 j {1,..., m} existiert mit f j (x 2 ) > f j (x 1 ). Das heißt, dass x 2 hinsichtlich mindestens eines Kriteriums besser ist als x 1 und in den restlichen Kriterien nicht schlechter. Die Menge aller pareto-optimalen Lösungen aus X wird als Pareto-Menge bezeichnet und deren Zielfunktionswerte in R m bezeichnet man als Pareto-Front. Ein Punkt f(x 1 ) im Zielraum dominiert einen anderen Punkt f(x 2 ) im Zielraum (f(x 1 ) f(x 2 )), falls x 1 das Element x 2 im Suchraum dominiert. Ziel der Optimierung ist es für gewöhnlich, die Pareto-Front zu approximieren, aus der anschließend manuell Lösungen ausgewählt werden können, die einen geeigneten Kompromiss hinsichtlich der Optimierungskriterien darstellen. Abb. 2.7 verbildlicht das Konzept der Pareto-Optimalität am Beispiel eines bikriteriellen Optimierungsproblems. Abbildung 2.7: Beispiel für eine Approximation der Pareto-Front im Zielraum eines bikriteriellen Optimierungsproblems, bei dem zwei Funktionen f 1 und f 2 maximiert werden sollen. Da EAs auf einer ganzen Menge von Lösungen arbeiten, eignen sie sich sehr gut für die Approximation einer Pareto-Front. Allerdings bringt die Multikriteriellität gewisse Schwierigkeiten mit sich. Ein Problem ist, dass die üblichen Selektionsoperatoren auf reellwertige Fitnesswerte ausgelegt sind und nicht mit Fitnessvektoren arbeiten können. Eine mögliche Lösung für dieses Problem besteht darin, die Selektion zwar in Abhängigkeit nur eines Optimierungskriteriums durchzuführen, dabei aber zu variieren, welches Kriterium dies ist. Diese Strategie verfolgt Schaffer [184] bei seinem multikriteriellen EA VEGA (Vector Evaluated Genetic Algorithm). Eine weitere Möglichkeit, welche von Ishibuchi und Murata [99] vorgeschlagen wurde, besteht darin, bei der Fitnessberechnung eine gewichtete Summe über die Optimierungskriterien zu bilden, wobei die Gewichte im Laufe der Zeit (zufällig) variiert werden. Eine andere häufig eingesetzte Möglichkeit ist die Berechnung einer reellwertigen Fitness eines Individuums, abhängig von dessen Beziehung zur aktuellen Ap-

56 34 Kapitel 2: Evolutionäre Algorithmen proximation der Pareto-Front. Dabei könnte in die Fitness einfließen, wie viele andere Individuen von einem Individuum dominiert werden oder von wie vielen anderen Individuen es selbst dominiert wird. Dabei ist die Fitness immer abhängig von den anderen Individuen der Population und muss somit in jeder Generation neu berechnet werden. Eine solche Form der Fitnesszuweisung wird in den bekannten multikriteriellen EAs SPEA2 (Strength Pareto Evolutionary Algorithm 2) [231] und NSGA-II (Nondominated Sorting Genetic Algorithm II) [59] genutzt.

57 2.11. Verwandte Ansätze Verwandte Ansätze Neben EAs existieren noch weitere naturinspirierte Optimierungsverfahren, welche zusammen mit EAs im Englischen oft unter dem Begriff Evolutionary Computation zusammengefasst werden. In diesem Abschnitt werden drei der bekanntesten Vertreter dieser Optimierungsverfahren vorgestellt: Differential Evolution (DE), Partikelschwarmoptimierung (PSO) und Ameisenalgorithmen (Ant Colony Optimization) (ACO). Die Differential Evolution ist ein Verfahren zur Lösung kontinuierlicher Optimierungsprobleme, welches von Storn und Price entwickelt wurde [203]. Sie ist in ihrer Standardvariante leicht zu implementieren und konnte bei dem Wettbewerb zu kontinuierlichen Optimierungsproblemen der CEC 2005 [78] den zweiten Platz hinter CMA-ES (siehe Abschnitt 2.7) belegen. Sei im Folgenden eine Funktion f : R N R per DE zu minimieren und bezeichne X = (x 1,..., x N ) einen Parametervektor des Suchraums. Die DE initialisiert im ersten Schritt eine Population von µ zufällig generierten Parametervektoren X 1,..., X µ und bewertet diese über die Funktion f. Anschließend wird in jeder Generation folgendermaßen vorgegangen: Für jeden Vektor X i der Population wird ein sogenannter Donatorvektor (donor vector) V aus drei zufällig gewählten Vektoren X r1, Xr2, Xr3 der Population wie folgt gebildet: V = X r1 + F ( X r2 X r3 ). (2.8) Die Indizes r 1, r 2 und r 3 sind dabei paarweise verschieden und ungleich dem Index i des aktuellen Zielvektors (target vector) X i. Die Konstante F R ist ein Strategieparameter des Algorithmus und sollte Storn und Price [203] zufolge aus dem Intervall [0,4; 1,0] gewählt werden. Nach der Erzeugung des Donatorvektors V wird dieser mit dem Zielvektor X i über folgenden Rekombinationsoperator zu einem Testvektor (trial vector) U i = (u 1,..., u N ) rekombiniert: v j, für j { D (N+1), D + 1 (N+1),..., D + L 1 (N+1) } u j =. (x i ) j, für alle anderen j {1,..., N} Der Operator (N+1) steht dabei für modulo (N+1). Die Rekombination wählt L Parameter vom Donatorvektor V und die restlichen Parameter vom Zielvek-

58 36 Kapitel 2: Evolutionäre Algorithmen tor X i. Der Startindex D, ab dem die Parameter von V gewählt werden, wird per Zufall gleichverteilt aus {1,..., N} gewählt. Die Anzahl L der von V zu übernehmenden Parameter wird entsprechend Algorithmus 5 ebenfalls zufällig aus {1,..., N} gewählt. Der Strategieparameter CR [0, 1] gibt dabei die Rekombinationswahrscheinlichkeit an. Die Werte für L und D werden für jede Algorithmus 5 Bestimmung von L für die Rekombination in DE. Dabei bezeichnet unif orm(0, 1) eine auf dem Intervall [0, 1] gleichverteilte Zufallszahl. L 0 repeat L L + 1 until (uniform(0, 1) CR) oder (L == N) Anwendung der Rekombination neu bestimmt. Der beschriebene Rekombinationsoperator wird als Exponential- oder Zwei-Punkt-Modulo-Rekombination bezeichnet. Nach der Erzeugung des Testvektors U wird dessen Fitness berechnet und falls diese besser ist als die Fitness des Zielvektors X i, so wird X i in der Population durch U ersetzt. Die Bildung des Donatorvektors wird im Kontext von DE als Mutation bezeichnet. Neben der Mutationsstrategie entsprechend Formel (2.8) schlagen Storn und Price [203, 171, 170] noch vier weitere Strategien vor: V = X best + F ( X r1 X r2 ), (2.9) V = X i + F ( X best X i ) + F ( X r1 X r2 ), (2.10) V = X best + F ( X r1 X r2 ) + F ( X r3 X r4 ), (2.11) V = X i + F ( X r1 X r2 ) + F ( X r3 X r4 ). (2.12) Der Vektor X best ist dabei der aktuell beste Parametervektor der Population. Weiterhin schlagen Storn und Price noch einen weiteren Rekombinationsoperator vor, nämlich die binomiale Rekombination (binomial crossover), welche wie die parametrisierte Uniform-Rekombination (siehe Seite 18) arbeitet und dabei sicherstellt, dass mindestens ein Parameter vom Donatorvektor V übernommen wird. Seit ihrer erstmaligen Erwähnung 1995 durch Storn und Price wurden zahlreiche Variationen der Differential Evolution publiziert. Es existieren selbstadaptive DEs, memetische DEs, multikriterielle DEs, Varianten von DE für dis-

59 2.11. Verwandte Ansätze 37 krete Optimierungsprobleme und unterschiedlichste Mutations- und Rekombinationsoperatoren für DE. Für einen umfassenden Überblick über Arbeiten zu Differential Evolution sei auf die Zusammenfassungen von Das und Nagaratnam [53] und von Neri und Tirronen [153] verwiesen. Das Verfahren der Partikelschwarmoptimierung wurde von Kennedy und Eberhart [106] entwickelt und ging ursprünglich aus Arbeiten zur Simulation des Verhaltens von Vogelschwärmen hervor. Die PSO arbeitet mit einer Menge (Schwarm) von Lösungskandidaten (Partikeln), welche bildlich gesprochen in einem N-dimensionalen Suchraum umherfliegen und sich mit der Zeit einem Optimum annähern. Jedes Partikel hat eine Position X = (x 1,..., x N ) und eine Geschwindigkeit V = (v 1,..., v N ). Die Position entspricht dabei dem Punkt des Suchraums, an dem sich das Partikel aktuell befindet. Zu Beginn werden die Positionen und Geschwindigkeiten aller Partikel zufällig initialisiert und die Positionen bewertet. Anschließend werden iterativ die Positionen aller Partikel abhängig von ihren Geschwindigkeiten aktualisiert und bewertet. Die Position X k,i des k-ten Partikels in Iteration i berechnet sich dabei als die Summe aus der Geschwindigkeit V k,i des Partikels in Iteration i und seiner Position X k,i 1 in der letzten Iteration i 1: X k,i := X k,i 1 + V k,i. Die Geschwindigkeiten der Partikel werden ebenfalls in jeder Iteration aktualisiert. Dabei fließen Informationen über den bisherigen Suchverlauf des gesamten Schwarms und der einzelnen Partikel in die Aktualisierung ein. Bezeichne B global,i die beste Position, die von einem Partikel des gesamten Schwarms bis zur Iteration i gefunden wurde und sei Bk,i die beste Position, die von Partikel k bis zur Iteration i gefunden wurde. In der Originalversion von PSO nach Kennedy und Eberhart [106] wird die Geschwindigkeit des Partikels k folgendermaßen aktualisiert: V k,i := V k,i 1 + c 1 u 1 ( B k,i 1 X k,i 1 ) + c 2 u 2 ( B global,i 1 X k,i 1 ). Die positiven Faktoren c 1 und c 2 werden als Beschleunigungsfaktoren (accelaration coefficients) bezeichnet. Kennedy und Eberhart [106] schlagen c 1 = c 2 = 2 vor. Die Faktoren u 1 und u 2 sind zwei gleichverteilte Zufallszahlen aus dem Intervall [0, 1].

60 38 Kapitel 2: Evolutionäre Algorithmen Eine Modifikation dieser Geschwindigkeitsaktualisierung, welche von Shi und Eberhart [191] vorgeschlagen wird, nutzt einen sogenannten Trägheitsfaktor (inertia weight) w: V k,i := w V k,i 1 + c 1 u 1 ( B k,i 1 X k,i 1 ) + c 2 u 2 ( B global,i 1 X k,i 1 ). Laut Shi und Eberhart sollte w entweder konstant aus dem Intervall [0,9; 1,2] gewählt werden, oder dynamisch während der Optimierung verringert werden. Eine andere Modifikation der Geschwindigkeitsaktualisierung schlagen Clerc und Kennedy vor [48]. Dabei wird ein sogenannter Konstriktionsfaktor (constriction coefficient) κ genutzt: ( V k,i := κ Vk,i 1 + c 1 u 1 ( B k,i 1 X k,i 1 ) + c 2 u 2 ( B global,i 1 X ) k,i 1 ), welcher sich folgendermaßen berechnet: mit c = c 1 + c 2. 2 κ = 1 c c 2 4c, Ameisenalgorithmen sind Verfahren zur Lösung kombinatorischer Optimierungsprobleme und gehen auf Marco Dorigo [63, 62] zurück. Sie lehnen sich an die Bildung von Ameisenstraßen durch Ameisen einer Kolonie an. In ähnlicher Weise werden bei Ameisenalgorithmen Lösungen durch eine Menge (Kolonie) von künstlichen Ameisen konstruiert. Sie lassen sich auf Probleme anwenden, die sich als Suche nach einer optimalen endlichen Folge (v i, v j,..., v h,... ) von Knoten eines vollständigen Konstruktionsgraphen G = (V, E) formulieren lassen, wobei die Länge der gesuchten Folge durch eine Konstante L N nach oben beschränkt ist und eine gewisse Menge Ω von Randbedingungen erfüllt sein muss. Dabei kann Ω ggf. leer sein. Sei X die Menge aller Folgen von Knoten aus V mit einer maximalen Länge von L und sei S X die Menge der Lösungskandidaten, welche die Randbedingungen aus Ω erfüllen. Bei der Suche nach einer optimalen Lösung s S werden iterativ Lösungskandidaten durch eine Kolonie künstlicher Ameisen konstruiert. Eine Ameise startet bei der Konstruktion eines Lösungskandidaten mit einer Folge (v s ), die nur aus einem bestimmten Startknoten v s V besteht und erweitert die Folge

61 2.11. Verwandte Ansätze 39 dann Schritt für Schritt durch weitere Knoten aus V, bis ein gewisses Abbruchkriterium erfüllt ist. Bei der Konstruktion wird darauf geachtet, dass die Randbedingungen aus Ω erfüllt sind und die Auswahl eines Knotens in einem Schritt des Konstruktionsprozesses erfolgt stochastisch unter Zuhilfenahme von Pheromonen und heuristischen Werten. Jedem Knoten und/oder jeder Kante von G ist ein Pheromonwert τ i bzw. τ ij zugeordnet und ein heuristischer Wert η i bzw. η ij. Je höher der Pheromonwert und der heuristische Wert eines Knotens bzw. einer Kante sind, umso größer ist die Wahrscheinlichkeit, dass der Knoten bzw. die Kante bei einem Konstruktionsschritt ausgewählt wird. Die Pheromonwerte werden während der Suche verändert. Ameisen hinterlassen Pheromone auf besuchten Kanten bzw. Knoten. Damit werden Knoten und Kanten, die vorher von vielen Ameisen besucht wurden, bevorzugt. Damit die Suche nicht zu schnell konvergiert, kann eine Form der Pheromonverdunstung (pheromone evaporation) implementiert werden, welche Pheromonwerte nach einer gewissen Strategie verringert. Die heuristischen Werte bleiben während der gesamten Suche konstant. Ihre Initialisierung kann entweder zufällig geschehen oder abhängig von gewissen Gütemerkmalen von Kanten und Knoten (z. B. Gewichten von Kanten), welche bereits vor der Suche bekannt sind.

62

63 Formen der Parallelisierung von evolutionären Algorithmen 3 In der Literatur finden sich wiederkehrend die folgenden vier Formen der Parallelisierung von EAs, welche sich auch kombinieren lassen: Die parallele Mehrfachausführung Das Inselmodell Die globale Parallelisierung Die parallele Bewertung Bei der parallelen Mehrfachausführung werden gleichzeitig mehrere Läufe eines EA ausgeführt, entweder auf unterschiedlichen Optimierungsproblemen oder alle auf demselben Optimierungsproblem. Einen EA mehrfach auf dem gleichen Optimierungsproblem zu starten, ergibt insofern Sinn, als es sich bei EAs um stochastische Optimierungsverfahren handelt, welche in verschiedenen Läufen verschiedene Ergebnisse liefern können. Wird die Optimierung also mehrmals statt nur einmal gestartet, so erhöht sich die Wahrscheinlichkeit, ein zufriedenstellendes Ergebnis zu erhalten. Dabei wäre es auch denkbar, in den verschiedenen Läufen die Parameter des EA, wie z. B. die Mutationsrate, unterschiedlich zu setzen, wenn nicht im Voraus klar ist, was geeignete Werte für die Parameter sind. In verschiedenen Publikationen [194, 192, 44] unter Beteiligung von Shonkwiler wird davon berichtet, dass die parallele Mehrfachausführung bei empirischen Untersuchungen zu einem superlinearen Speed-Up führte. Untersucht wurden dabei Optimierungen, die abbrechen, sobald ein Ergebnis einer gewissen Güte gefunden wurde. Der superlineare Speed-Up bedeutet, dass der Gesamtrechenaufwand bei der parallelen Mehrfachausführung geringer ist als bei der einzelnen Ausführung, wobei die Güte der Ergebnisse in beiden Fällen gleich ist. In [193] stellt Shonkwiler die theoretischen Grundlagen auf, die 41

64 42 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen den superlinearen Speed-Up erklären. Er leitet analytisch her, dass sich der erwartete Speed-Up S der parallelen Ausführung von p Optimierungen im Vergleich zu einer einzelnen Ausführung zu S ps p 1 approximieren lässt, wobei der Beschleunigungsparameter s vom konkreten Optimierungsproblem und -algorithmus abhängt. Laut Shonkwiler ist s üblicherweise größer 1. In [193] zeigt er, dass für drei einfache Testprobleme, die über GAs gelöst werden, s > 1 gilt. Wie erwähnt, bezieht sich Shonkwiler auf Optimierungen, welche ab einer gewissen Güte des Ergebnisses abbrechen. Oftmals ist es aber nicht möglich bzw. erwünscht, eine obere Grenze für die Güte als Abbruchkriterium anzugeben, da nicht bekannt ist, welche Güte sich maximal erreichen lässt. In dem Fall wird die Optimierung üblicherweise abgebrochen, wenn sie zu stark konvergiert ist oder wenn eine gewisse Anzahl von Generationen erreicht wurde. Damit ließe sich mit der parallelen Mehrfachausführung kein Geschwindigkeitsgewinn verglichen mit der einmaligen Ausführung erreichen. Aber auch wenn eine obere Grenze für die Ergebnisgüte als Abbruchkriterium genutzt wird, stellt sich die Frage, ob sich nicht noch höhere Speed-Ups erzielen ließen, wenn die vorhandenen Rechenressourcen statt zur Ausführung von p Optimierungsläufen, zur Ausführung nur eines einzigen Optimierungslaufs mit p-mal so vielen Individuen genutzt würde. Beziehungsweise allgemein stellt sich die Frage, wobei bessere Optimierungsergebnisse zu erwarten sind bei einer Optimierung mit großer Population und/oder vielen Generationen oder bei mehreren Optimierungen mit kleiner Population und/oder wenigen Generationen. Dieser Frage widmen sich unterschiedliche Publikationen. In [152] untersuchen Nakano et al., was einen geeigneten Kompromiss zwischen der Populationsgröße und der Anzahl der Optimierungsläufe darstellt, wenn eine gewisse obere Grenze für den Rechenaufwand einzuhalten ist. Je größer die Population gewählt wird, umso weniger Optimierungsläufe können durchgeführt werden und umgekehrt. Nakato et al. gehen davon aus, dass ein gewisses Optimierungsproblem, ein EA und eine obere Grenze für den Rechenaufwand gegeben sind und dass der EA so lange ausgeführt wird, bis er konvergiert. Sie untersuchen anhand eines statistischen Modells, bei welcher Populationsgröße der EA am wahrscheinlichsten ein befriedigendes Optimierungsergebnis unter Einhaltung der oberen Grenze für den Rechenaufwand

65 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen 43 erzielt. Sie zeigen, dass eine optimale Populationsgröße existiert, falls die Wahrscheinlichkeit, dass mit einem einzelnen Durchlauf ein befriedigendes Ergebnis erzielt wird, für eine wachsende Populationsgröße gegen einen Wert kleiner 1 konvergiert. Damit existiert also ein optimaler Kompromiss zwischen der Populationsgröße und der Anzahl von Optimierungsläufen. Es wird jedoch kein effizienter Weg angegeben, die optimale Populationsgröße zu bestimmen. Luke [132] untersucht drei Probleme aus dem Bereich der genetischen Programmierung und zeigt, dass es für zwei der Probleme nicht sinnvoll ist, die Anzahl der Generationen über ein gewisses Limit hinaus zu erhöhen. Stattdessen sollte die Optimierung bei Erreichen dieses Limits neu gestartet werden. Cantú-Paz et al. [43] kamen bei einer analytischen Untersuchung additiv separabler Fitnessfunktionen jedoch zu dem Schluss, dass sich mehrere kurze Optimierungen im Vergleich zu einer langen Optimierung mit demselben Rechenaufwand nur unter sehr eingeschränkten Voraussetzungen lohnen. Sie empfehlen insbesondere für schwer zu lösende Optimierungsprobleme lange Optimierungsdurchläufe mit einer möglichst großen Population. Wie bereits erwähnt, kann die parallele Mehrfachausführung eingesetzt werden, um einen EA auf unterschiedlichen Problemen auszuführen. Dies ist häufig nötig, um ein Optimierungsproblem zu lösen, welches sich aus mehreren unabhängigen Teilproblemen zusammensetzt. So wird z. B. in [101] eine Flugbahn einer Raumsonde zur möglichst guten Kartierung von 4 Jupiter-Monden evolviert, indem ca. 500 Millionen verschiedene Teilprobleme gelöst werden. Das Inselmodell läuft ab, wie in Abb. 3.1 dargestellt. Die Population wird in mehrere Teilpopulationen, die sogenannten Inseln, aufgeteilt. Auf den einzelnen Inseln werden (gegebenenfalls parallel) EAs ausgeführt und in gewissen Abständen werden Individuen zwischen den Inseln migriert, sprich ausgetauscht. Die Unterteilung in mehrere Teilpopulationen stellt natürlich einen nicht unwesentlichen Eingriff in die Arbeitsweise des Optimierungsalgorithmus dar. Der Informationsfluss zwischen Individuen wird im Vergleich zu einer einzigen großen (sogenannten panmiktischen) Population verlangsamt. Dies kann sowohl positive als auch negative Effekte haben. Einerseits können gute Individuen die Gesamtpopulation weniger schnell dominieren. Damit verringert sich die Konvergenzgeschwindigkeit und es werden potenziell mehr Bereiche des Suchraums erforscht die Exploration steigt. Andererseits könnte es die

66 44 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen Abbildung 3.1: Ablauf des Inselmodells mit vier Inseln. erfolgreiche Rekombination erschweren, da Individuen aus zwei verschiedenen Inseln nicht miteinander rekombiniert werden. Die EAs, welche auf die einzelnen Inseln angewandt werden, müssen nicht notwendigerweise identisch sein. Es ist möglich, auf den einzelnen Inseln unterschiedliche Optimierungsparameter (z. B. Mutationsraten) zu nutzen, unterschiedliche evolutionäre Operatoren, Repräsentationen und/oder Fitnessfunktionen. Ein solches heterogenes Inselmodell ist allerdings nicht so gebräuchlich wie ein homogenes Inselmodell. Weiterhin kann das Inselmodell sowohl synchron als auch asynchron ausgeführt werden. Bei dem asynchronen Inselmodell gibt es keine festen Synchronisationspunkte, zu denen migriert wird. Wurde auf einer Insel I 1 eine bestimmte Anzahl von Generationen ausgeführt, so werden Migranten zu einer anderen Insel I 2 gesendet, unabhängig davon, wie viele Generationen zu diesem Zeitpunkt auf I 2 ausgeführt wurden. Chopard et al. [47] nutzen ein asynchrones Inselmodell, um einen besseren Lastausgleich bei der genetischen Programmierung zu erzielen. Für gewöhnlich wird das Inselmodell jedoch synchron eingesetzt. In der Literatur wird über eine Vielzahl von Benchmark- und Realweltproblemen berichtet, für welche das Inselmodell einen positiven Effekt auf die Optimierung hat [200, 223, 131, 217, 116, 176, 173]. Ob und wie gut das Inselmodell abschneidet, hängt aber nicht nur vom konkreten Problem ab, sondern auch von der Wahl der Parameter für das Inselmodell. Folgende Parameter

67 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen 45 lassen sich variieren: Die Größe und Anzahl der Inseln. Die Anzahl von Individuen, welche in einem Migrationsschritt zwischen Inseln migriert werden. Die Auswahl von Individuen für die Migration und von Individuen, die in der aufnehmenden Insel ersetzt werden. Eine gängige Praxis ist es, die besten Individuen aus einer Insel in eine andere Insel zu migrieren, wo sie die schlechtesten Individuen ersetzen. Das Migrationsintervall, also der Abstand zwischen zwei aufeinander folgenden Migrationsschritten. Dies ist üblicherweise eine feste Anzahl von Generationen. Die Kommunikationstopologie, welche vorgibt, welche Inseln untereinander Individuen austauschen. Gängige Topologien sind dabei Ring- (wie in Abb. 3.1), Torus- und Zufallstopologien. Über eine geeignete Wahl für diese Parameter herrscht Uneinigkeit in der Literatur. Starkweather et al. [200] empfehlen ein Migrationsintervall von fünfmal der Inselgröße und raten dazu, nur eine geringe Anzahl von Individuen zu migrieren. Voigt et al. [215] schlagen vor, keine Migration zu nutzen, sondern stattdessen auf einer Insel solange zu rechnen, bis die Varianz unter den Individuen der Insel unter eine bestimmte Grenze fällt und dann die Individuen mit den Individuen einer zufälligen anderen Insel zu kreuzen. Branke et al. [34] untersuchen unterschiedliche Migrationsstrategien hinsichtlich ihrer Eignung für heterogene (im Sinne der Rechenleistung) Cluster (siehe Abschnitt 4.3) und Grids (siehe Abschnitt 4.4). Dabei wird allerdings die Kommunikation außer Acht gelassen. Weiterhin wird ein asynchrones Inselmodell vorgeschlagen, welches sich in Grids aufgrund der nur eingeschränkten Kommunikationsmöglichkeiten zwischen verschiedenen Clustern des Grids nur schwer oder gar nicht umsetzen lässt. Andre und Koza [11] kommen bei empirischen Untersuchungen zu dem Schluss, dass für genetische Programmierung eine Migrationsrate von 5 % der Inselgröße am geeignetsten ist. Fernández et al. [67] untersuchen die Einflüsse verschiedener Parameter wie Inselgröße, Migrationsintervall etc. an 4

68 46 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen Testproblemen für genetische Programmierung. Sie kommen zu dem Schluss, dass die optimale Anzahl der Inseln und die Gesamtzahl der Individuen sehr vom zu lösenden Problem und davon, wie schwer es zu lösen ist, abhängt. Weiterhin hatte die Kommunikationstopologie nur einen unwesentlichen Einfluss auf die Güte der Ergebnisse. Sie empfehlen 10 % der Individuen der Inseln alle 5 10 Generationen zu migrieren. Lopes et al. [130] schlagen einen Multi- Agenten-Ansatz vor, um während der Optimierung eine geeignete Migrationstopologie zu erlernen. Alba und Luque [6, 135] haben untersucht, wie sich die Größe des Migrationsintervalls und die Anzahl der Migranten auf die Übernahmezeit und die Wachstumskurve auswirken und geben mathematische Modelle an, um die Übernahmezeit und Wachstumskurve vorherzusagen. Die Wachstumskurve gibt dabei an, wie viel Prozent der Gesamtpopulation zu einem bestimmten Zeitpunkt vom besten Individuum eingenommen wird und die Übernahmezeit ist die Zeit, die es dauert, bis die gesamte Population nur noch aus dem besten Individuum besteht. Dabei wird von einem EA ausgegangen, der keine Mutation und ausschließlich Klonen zur Reproduktion einsetzt. In [4] werden die Arbeiten auf die Untersuchung unterschiedlicher Migrationstopologien erweitert. Etliche Arbeiten beschäftigen sich auch mit adaptiven Strategien, bei denen die Parameter des Inselmodells dynamisch zur Laufzeit, abhängig vom Optimierungsverlauf, variiert werden. In [126] untersuchen Lin et al. drei Strategien zur automatischen Anpassung des Migrationsintervalls und der Anzahl an Migranten. Eine dieser Strategien nimmt die Anpassung abhängig von der Veränderung der Fitness über die letzten beiden Migrationsintervalle vor und die anderen beiden Strategien arbeiten abhängig von der Diversität der Inseln, wobei die Diversität anhand der Fitnesswerte der Individuen bestimmt wird. Osorio et al. [162] schlagen eine alternative Strategie zur Anpassung des Migrationsintervalls vor, die auf den Untersuchungen in [4] beruht. Dabei wird versucht, das Migrationsintervall so anzupassen, dass eine bestimmte vorgegebene Übernahmezeit erreicht wird. Mambrini et al. [140] schlagen zwei weitere Methoden zur Anpassung des Migrationsintervalls vor, die auf der Veränderung der Fitness basiert bei einer Verbesserung der Fitness wird das Migrationsintervall verringert und tritt lange keine Verbesserung ein, so wird es erhöht.

69 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen 47 Lässig und Sudholt [114] untersuchen zwei ähnliche Methoden zur automatischen Anpassung der Anzahl der Inseln. Bei der globalen Parallelisierung werden bestimmte Operatoren auf der Population bzw. auf einzelnen Individuen parallel ausgeführt. Die Optimierung arbeitet aber wie im seriellen Fall auf der gesamten Population, sodass die Parallelisierung keinen Einfluss auf die Qualität der Optimierung hat. Üblicherweise ist es die Fitnessberechnung für die Nachkommen einer Generation, welche parallel ausgeführt wird, da dies im Allgemeinen die rechenintensivste Operation ist und die einzelnen Bewertungen der Nachkommen normalerweise unabhängig voneinander erfolgen können. Da die globale Parallelisierung leicht zu implementieren ist, findet sie häufig Anwendung und wird meist mittels eines Master-Worker- bzw. Master-Slave-Modells, wie in Abb. 3.2 dargestellt, umgesetzt. Abbildung 3.2: Ablauf der globalen Parallelisierung über das Master-Worker- Modell. Ein Master ist verantwortlich für die Erzeugung der Nachkommen einer Generation über die gängigen Operatoren wie Selektion, Mutation und Rekombination. Die Nachkommen werden anschließend auf eine Reihe von Workern verteilt, wo ihre Fitness berechnet wird. Die Fitnesswerte werden an den Master zurückgegeben, dieser aktualisiert die Population, berechnet die Nachkommen der nächsten Generation, usw. Der Master kann dabei natürlich auch selbst einen Teil der Nachkommen bewerten. Die Rechenintensität der Bewertungen ist oftmals für alle Nachkommen in etwa gleich groß. Ist dies nicht der Fall oder wird eine heterogene Hardware genutzt, kann eine Lastverteilung sinnvoll sein. Diese ist allerdings mit einem gewissen Overhead verbunden. Oussaidene et al. [163] schlagen ein einfaches Modell für den Lastausgleich im Kontext der globalen Parallelisierung vor. Es existieren auch Formen der asynchronen globalen Parallelisierung, bei welcher nicht auf die Ergebnisse langsamer Worker gewar-

70 48 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen tet wird und die nächste Generation trotz ausstehender Fitnesswerte berechnet wird. Diese Technik wird beispielsweise in Stanleys und Mudges [199] GAIN- Algorithmus für den evolutionären Entwurf von Mikroprozessoren eingesetzt. Dabei kann eine neue Generation berechnet werden, wenn eine bestimmte minimale Anzahl von Nachkommen aus der letzten Generation bewertet wurde und es muss nicht gewartet werden, bis alle Nachkommen der letzten Generation bewertet wurden. In der Praxis werden die Nachkommen jedoch meist gleichmäßig auf die Worker verteilt und es wird gewartet, bis alle Worker mit ihren Berechnungen fertig sind. In der Literatur finden sich etliche Beispiele von Optimierungsproblemen, die über einen global parallelisierten EA gelöst wurden. So setzen Abramson et al. einen parallelen EA zur Erstellung von Zugfahrplänen [2] und Stundenplänen [1] ein. Ru et al. [230] setzen die globale Parallelisierung zum Entwurf von Metallrahmenstrukturen ein und Jordan et al. [105] zur Platzierung von Windgeneratoren in Mittelspannungsnetzen. Weiterhin lassen sich auch theoretische Untersuchungen zur globalen Parallelisierung in der Literatur finden. So hat Bethke [26] bereits 1976 die Effizienz der globalen Parallelisierung untersucht und kam zu dem Schluss, dass sich mit p Prozessen ein Speed-Up von nahezu p erreichen lässt, wobei die Kommunikation allerdings nicht berücksichtigt wurde. Cantú-Paz [41] leitet ausgehend von einem simplen Modell für die Kommunikation die optimale Anzahl von Prozessoren für die globale Parallelisierung auf parallelen Architekturen mit verteiltem Speicher her. Bei der parallelen Bewertung wird die Fitnessfunktion parallelisiert. Dies ist insbesondere dann sinnvoll, wenn die Fitnessfunktion sehr rechenintensiv ist und die Population nicht groß genug ist, um über andere Parallelisierungsformen die verfügbaren Rechenressourcen komplett auszunutzen. Ein Vorteil der parallelen Bewertung ist, dass der Optimierungsalgorithmus ausgetauscht werden kann ohne dass die Parallelisierung beeinflusst wird. Gleichzeitig ist es ein Nachteil, dass die Parallelisierung für jedes zu lösende Problem erneut vorgenommen werden muss. Sie lässt sich beispielsweise anwenden, wenn die Fitnessberechnung eine aufwendige Simulation erfordert, welche sich parallelisieren lässt. So wird in [181] eine parallele Version der Finite-Differenzen- Methode bei der Optimierung der Rekonstruktion von Tomographiebildern

71 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen 49 genutzt. Bei der multikriteriellen Optimierung kann die parallele Bewertung genutzt werden, um die Bewertungen hinsichtlich der einzelnen Optimierungskriterien parallel durchzuführen, falls diese unabhängig voneinander sind [50, S. 449 f.]. Besonders gut für die parallele Bewertung eignet sich genetische Programmierung. Dabei wird ein Programm im Zuge seiner Bewertung für gewöhnlich auf mehreren Testfällen ausgeführt. Ist die Anzahl der Testfälle groß, so bietet es sich an, die Berechnungen auf den Testfällen parallel durchzuführen [211, 75, 40]. Bei einer Spezialform der genetischen Programmierung der genetischen parallelen Programmierung werden parallele Programme evolviert, welche bei ihrer Bewertung auch auf parallelen Architekturen ausgeführt werden [45, 117]. Neben den vier genannten Formen der Parallelisierung, findet man in der Literatur häufig noch ein weiteres Ausführungsmodell im Zusammenhang mit parallelen EAs: das zelluläre oder feingranulare Modell [5]. Dabei werden die Individuen der Population in einer künstlichen räumlichen Struktur angeordnet und jedes Individuum kann sich nur mit den Individuen in seiner Nachbarschaft paaren. Eine oft genutzte räumliche Struktur ist ein zweidimensionales torusförmiges Gitter und für die Nachbarschaft wird häufig eine Von-Neumann-Nachbarschaft eingesetzt, wie in Abb. 3.3 zu sehen. Es werden aber auch andere räumliche Strukturen und Nachbarschaften verwendet. Abbildung 3.3: Anordnung der Individuen eines zellulären EA mit Von- Neumann-Nachbarschaft in einem Gitter. Das dunkelgraue Individuum kann nur mit den hellgrauen Individuen gekreuzt werden. Ähnlich wie das Inselmodell kann sich das zelluläre Modell positiv auf die Optimierung auswirken, da die Konvergenz eines zellulären EA im Vergleich zu einem unstrukturierten EA verlangsamt wird [22]. Entsteht in einem Indi-

72 50 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen viduum neues Genmaterial, so können zunächst nur die Individuen in seiner Nachbarschaft davon beeinflusst werden. Die neue Information muss erst über mehrere Generationen durch die räumliche Struktur diffundieren, um die gesamte Population beeinflussen zu können. Wie beim Inselmodell können beim zellulären Modell verschiedene Parameter bzw. Entwurfsentscheidungen variiert werden. Dies sind insbesondere die eingesetzte Topologie und die Form und Größe der Nachbarschaft. Sarma und De Jong [182] haben den Effekt verschiedener Nachbarschaftsformen und -größen in einem torusförmiges Gitter auf den Selektionsdruck untersucht. Alba und Dorronsoro [3] haben analoge Untersuchungen für verschiedene Größen einer Von-Neumann-Nachbarschaft in Gittern verschiedener Dimensionen durchgeführt. Die Gesamtzahl der Individuen (400) wurde dabei konstant gehalten und die Form des Gitters wurde von quadratisch (20 20) über rechteckig (10 20) bis zu lang gezogen (4 100) variiert. Sie kommen zu dem Schluss, dass sich das lang gezogene Gitter für schwere multimodale Probleme eignet und für leichte Probleme ein quadratisches oder rechteckiges Gitter die bessere Wahl ist. Zur parallelen Ausführung eines zellulären EA eignen sich insbesondere SIMD-Architekturen mit vielen Recheneinheiten, von denen jede für ein Individuum der Population zuständig ist. Von den untersuchten Architekturen trifft dies als einziges auf die GPU zu. Für diese unterscheidet sich das zelluläre Modell aber praktisch nicht vom Inselmodell ohne Nutzung des Shared Memory (Abbildung 6.2(a), Abschnitt 6.2.1). Für die anderen untersuchten Architekturen kann das zelluläre Modell als Spezialfall des Inselmodells gesehen werden, wobei jede Insel aus einem Abschnitt der räumlichen Struktur besteht und in jeder Generation werden die Individuen am Rand des Abschnitts migriert. Zelluläre EAs werden heutzutage vermehrt eingesetzt, um den Verlauf der Evolution positiv zu beeinflussen und weniger, um eine effiziente Parallelisierung zu ermöglichen. Alba und Dorronsoro [3] stellen beispielsweise Folgendes klar: These cellular EAs were initially designed for working in massively parallel machines, although the model itself has been adopted recently also for monoprocessor machines, with no relation to parallelism at all. This issue may be stated

73 Kapitel 3: Formen der Parallelisierung von evolutionären Algorithmen 51 clearly from the beginning, since many researchers still hold in their minds the relationship between massively parallel EAs and cellular EAs, what nowadays represents an incorrect link: cellular EAs are just a different sort of EAs, like memetic algorithms, [...]. Daher wurde das zelluläre Modell in der vorliegenden Arbeit nicht eingehender untersucht. Vereinzelt findet sich in der Literatur auch der Einsatz von Kombinationen bzw. Hierarchien von Parallelisierungsformen. Es ist z. B. möglich, ein hierarchisches Inselmodell [207] einzusetzen, wobei die Inseln nochmals in kleinere Inseln unterteilt werden. Dabei wird zwischen den kleineren Inseln öfter Migration durchgeführt als zwischen den größeren Inseln. Es ist auch möglich, das Inselmodell und die globale Parallelisierung zu kombinieren, indem die Fitnessberechnungen auf einer Insel parallel ausgeführt werden [29]. In [206] werden sogar noch zusätzlich die einzelnen Fitnessberechnungen parallelisiert. Bei einer weiteren Form eines hierarchischen parallelen EA wird auf den Inseln beim Inselmodell das zelluläre Modell angewendet [125, 87, 149].

74

75 Parallelrechensysteme 4 Heutzutage haben sich in Industrie und Wissenschaft verschiedene Hardwareplattformen zur Ausführung paralleler Berechnungen etabliert. Die gängigste Plattform sind Standardprozessoren mit mehreren Rechenkernen. Neben diesen werden häufig auch Cluster bzw. Rechnerverbünde, wie sie von vielen Universitäten und Firmen betrieben werden, eingesetzt. Insbesondere im wissenschaftlichen Umfeld werden mehrere solcher Cluster oft zu Grids gekoppelt, welche eine enorme Menge an Rechenleistung zur Verfügung stellen. In den letzten zehn Jahren haben sich zusätzlich Grafikkarten als preisgünstige und leistungsfähige Plattform für parallele Berechnungen etabliert. Diese vier gängigen Plattformen Multicore-Prozessoren, Grafikkarten, Cluster und Grids wurden im Rahmen der vorliegenden Arbeit dahingehend untersucht, welche Plattform sich unter welchen Umständen am besten zur Ausführung eines parallelen EA eignet, bzw. unter welchen Umständen eine Plattform nicht sinnvoll einsetzbar ist. Zwei weitere Plattformen, welche heute oft für parallele Berechnungen eingesetzt werden, nämlich FPGAs (Field Programmable Gate Arrays) und Cloud- Systeme, wurden nicht in die Untersuchungen einbezogen. Der Einsatz von FPGAs beschränkt sich hauptsächlich auf das Umfeld eingebetteter Systeme, beziehungsweise auf Anwendungen, bei denen Energieeffizienz eine wichtige Anforderung ist. Für die Beschleunigung evolutionärer Algorithmen spielen sie eine untergeordnete Rolle. Die Cloud lässt sich nach dem Start einer Reihe virtueller Maschinen genauso wie ein Cluster zur Ausführung eines verteilten EA nutzen. Der einzige Unterschied zur Berechnung im Cluster ist, dass durch die Virtualisierung unter Umständen ein gewisser Overhead entsteht. Dennoch lassen sich die Untersuchungen zu Clustern analog auf Cloud-Systeme übertragen, weshalb Clouds im Rahmen dieser Arbeit nicht gesondert betrachtet werden. Nachfolgend werden die vier untersuchten Plattformen beschrieben. 53

76 54 Kapitel 4: Parallelrechensysteme 4.1 Multicore-Prozessoren Ein Multicore-Prozessor zeichnet sich dadurch aus, dass er mehrere Rechenkerne auf einem Mikrochip vereint, welche weitestgehend unabhängig voneinander rechnen können. Bis Anfang des 21. Jahrhunderts wurde der Allzweck- Prozessor-Markt noch von Einkern-Prozessoren dominiert. In den Jahren zuvor wurde deren Rechenleistung stetig verbessert. Dies wurde erreicht durch ein Anheben der Taktfrequenz und durch Steigerung des Durchsatzes an Instruktionen pro Takt. Techniken zur Erhöhung des Durchsatzes sind unter anderem Fließbandverarbeitung (Pipelining), Sprungvorhersage und der Einsatz von SIMD-(Single-Instruction-Multiple-Data)-Einheiten (wie z. B. MMX- oder SSE-Einheiten). Anfang des 21. Jahrhunderts war ein Punkt erreicht, an dem sich der Aufwand, der für eine weitere Steigerung des Durchsatzes pro Takt nötig war, nur kaum noch rentierte und gleichzeitig eine weitere Erhöhung der Taktfrequenz in einen inakzeptablen Energieverbrauch und eine übermäßige Wärmeentwicklung resultierte. Daher gingen führende Hersteller von Mikroprozessoren zunehmend dazu über, die Rechenleistung ihrer Prozessoren durch eine Vervielfachung der Kerne zu erhöhen. Heutzutage sind Standardprozessoren mit nur einem Kern kaum noch erhältlich. Diese Entwicklung hat zur Folge, dass Applikationen parallel arbeiten müssen, um die Rechenleistung heutiger Prozessoren (CPUs) vollständig ausschöpfen zu können. Dies gilt auch für evolutionäre Algorithmen. Im einfachsten Fall lässt sich eine Applikation in vollständig unabhängige Teilaufgaben (Tasks) zerlegen, welche gleichzeitig ausgeführt werden können. Für jede dieser Tasks könnte dann ein Prozess gestartet werden und das Betriebssystem verwaltet die parallele Ausführung dieser Prozesse auf den Kernen der CPU. Ist jedoch Kommunikation oder Synchronisation zwischen den Tasks nötig, so wird für die parallele Ausführung auf Multicore-CPUs typischerweise Shared-Memory- Parallelisierung angewendet. Dabei werden die Tasks auf mehrere Threads verteilt, welche parallel ausgeführt werden und über den gemeinsamen Arbeitsspeicher Daten austauschen und sich untereinander synchronisieren. Da die nebenläufige Programmierung anspruchsvoll und fehleranfällig ist, existieren Werkzeuge, die den Programmierer dabei unterstützen sollen. Drei der bekanntesten Werkzeuge für die Shared-Memory-Programmierung für Multicore-

77 4.2. Grafikkarten 55 CPUs sind OpenMP (Open Multi-Processing), Cilk++ und OpenCL (Open Computing Language). OpenMP [183] ist ein Standard für eine API zur Shared-Memory-Parallelisierung, von dem verschiedene Implementierungen existieren. Über Präprozessor-Direktiven, sogenannten Pragmas, drückt der Programmierer aus, welche Teile des Programms parallel ausführbar sind. OpenMP eignet sich insbesondere zur inkrementellen Parallelisierung eines seriellen Programms. Cilk++ [115] ist eine Erweiterung von C++, die es erlaubt, über spezielle Schlüsselwörter Task- und Daten-Parallelismus auszudrücken. Bei OpenCL [107] handelt es sich um einen Standard für die Programmierung heterogener Systeme. Aufrufe von Funktionen der OpenCL-Bibliothek werden an plattformspezifische Treiber weitergeleitet, welche für die Ausführung auf der zugrunde liegenden Plattform zuständig sind. Es existieren Treiber für CPUs und Grafikkarten (siehe Abschnitt 4.2) verschiedener Hersteller, für FPGAs und weitere Plattformen. Damit lässt sich ein OpenCL-Programm also auf verschiedenen parallelen Plattformen ausführen und ist nicht auf Multicore-Prozessoren beschränkt. Ein auf Multicore-Prozessoren lauffähiges Programm lässt sich auch auf Mehrprozessorsystemen ausführen. Dies sind Systeme mit mehreren Prozessoren, welche alle Zugriff auf einen gemeinsamen Speicher haben. Im Rest der vorliegenden Arbeit soll nicht explizit zwischen Multicore- Prozessoren und Mehrprozessorsystemen unterschieden werden. Wenn im Folgenden von Multicore-Prozessor oder Multicore-CPU die Rede ist, so schließt das nicht aus, dass sich die jeweiligen Kerne unter Umständen auf mehrere Prozessoren verteilen. 4.2 Grafikkarten Die anhaltende Nachfrage der Computerspiel-Industrie nach höherer Rechenleistung führte in den letzten Jahrzehnten zu einem rasanten Anstieg der Leistung von Grafikprozessoren (GPUs) auf kommerziell erhältlichen Grafikkarten. Erreicht wurde dies vor allem durch einen hohen Grad an Parallelisierung, da sich Grafikberechnungen typischerweise sehr gut auf eine massiv parallele Architektur abbilden lassen. So bieten moderne GPUs über 1500 Rechenkerne

78 56 Kapitel 4: Parallelrechensysteme auf einem Chip. Da herkömmliche CPUs für eine breitere Klasse von Anwendungen entwickelt werden als GPUs, ist für sie ein solcher Grad an Parallelität nicht sinnvoll. Weiterhin sind CPUs weniger stark auf rechenintensive Aufgaben fokussiert als GPUs und werden großteils für Applikationsklassen eingesetzt, für die kein Bedarf an einer Steigerung der Rechenleistung besteht. Daher sind GPUs seit spätestens Anfang des 21. Jahrhunderts CPUs bezüglich der theoretisch erreichbaren Spitzenleistung überlegen [164]. Mit dem Geforce- 3-Grafikchip wurde 2001 von NVIDIA die erste programmierbare GPU vorgestellt. Die wachsende Leistung und Flexibilität von GPUs machte sie zunehmend interessant für Anwendungen, welche über die Verarbeitung von Grafiken hinausgehen [209, 136]. Erste Anwendungen waren z. B. Matrix-Multiplikationen und die Lösung des 3-SAT-Problems [209], die Finite-Elemente-Methode [111], Kollisionsdetektion in Bildern [85], die Simulation zellulärer Automaten [30] und die Rekonstruktion von dreidimensionalen Volumina aus zweidimensionalen Computertomographie-Aufnahmen [227]. Evolutionäre Algorithmen wurden ebenfalls frühzeitig auf GPUs umgesetzt beschreiben Yu et al. [228] die Implementierung eines GA nach dem zellulären Modell (siehe Kapitel 3, Seite 49) auf der GPU. Wong et al. [225] beschreiben 2005 die Nutzung von GPUs für evolutionäre Programmierung, wobei allerdings nur die Fitnessberechnung auf der GPU ausgeführt wird und der Rest des Algorithmus auf der CPU. Ein Jahr später stellen sie die Implementierung eines vollständigen GA auf der GPU vor [225]. Anfänglich war die Programmierung von GPUs noch sehr aufwendig. Programmierer mussten auf Schnittstellen zur Programmierung von Grafikanwendungen, wie OpenGL, DirectX oder Cg zurückgreifen und die auszuführenden Berechnungen mussten auf die Verarbeitung von Texturen abgebildet werden. Dies änderte sich 2007 mit der Einführung der CUDA-Plattform [156] durch NVIDIA. Die C- und C++-Erweiterungen von CUDA ermöglichten nun die einfache Beschreibung paralleler Programme für NVIDIA-GPUs. Dies trug maßgeblich dazu bei, dass sich GPUs als ernstzunehmende Plattform für rechenintensive Anwendungen aus Wissenschaft und Industrie etablieren konnten [195] und damit auch für evolutionäre Algorithmen [168, 190, 134]. Mit OpenCL wurde 2009 eine weitere Plattform zur komfortablen Programmie-

79 4.2. Grafikkarten 57 rung von GPUs veröffentlicht. Im Gegensatz zu CUDA unterstützt OpenCL nicht nur GPUs von NVIDIA, sondern auch von AMD und kann, wie im letzten Abschnitt bereits beschrieben, auch für andere Systeme als GPUs eingesetzt werden. Der Aufbau einer modernen NVIDIA-GPU ist in Abbildung 4.1 zu sehen. Sie besteht im Wesentlichen aus mehreren Stream-Multiprozessoren (SMs) und Abbildung 4.1: Architektur einer NVIDIA-GPU. einem globalen Speicher, auf den alle SMs Zugriff haben. Die Anzahl der SMs liegt je nach Typ und Generation der GPU zwischen eins und sechzehn und die Kapazität des globalen Speichers moderner GPUs liegt im Bereich mehrerer GiB. Alle SMs haben Zugriff auf einen gemeinsamen L2-Cache. Ein SM setzt sich wiederum aus mehreren CUDA-Kernen (CKs), auch Stream- Prozessoren oder Shader genannt, zusammen. Weiterhin stehen auf jedem SM eine Reihe von Load/Store-Einheiten und eine Reihe von sogenannten Special Function Units (SFUs) zur Berechnung von Funktionen wie Sinus, Kosinus oder der Quadratwurzel zur Verfügung. Der genaue Aufbau eines SMs unterscheidet sich je nach GPU-Generation. Die Codenamen aktueller Generationen von NVIDIA-GPUs lauten Fermi [157], Kepler [158] und Maxwell [159]. Von diesen drei GPU-Architekturen ist Fermi die älteste. Kepler ist der direkte Nachfolger von Fermi und Maxwell ist die Bezeichnung der aktuellsten NVIDIA-GPU-Architektur. Abbildung 4.2 zeigt den Aufbau von SMs der drei genannten Architekturen. Ein SM der Fermi-Generation bietet 32 CKs, 16 Load/Store-Einheiten und 4 SFUs. Wie auch bei Kepler- und Maxwell-GPUs werden Threads, welche auf der GPU gestartet werden, in Gruppen zu je 32 Threads sogenannten Warps unterteilt, wobei ein Warp fest an einen SM gebunden ist und alle Threads eines Warps gleichzeitig Zugriff auf die funktionalen Einheiten des SM erhalten. Die Threads eines Warps werden nach dem

80 58 Kapitel 4: Parallelrechensysteme Abbildung 4.2: Aufbau von Stream-Multiprozessoren unterschiedlicher NVIDIA-GPU-Architekturen. SIMD-Prinzip ausgeführt. Das heißt, dass zwei Threads eines Warps zu einem Takt nicht unterschiedliche Instruktionen ausführen können. Daher sollte Divergenz unter den Threads eines Warps vermieden werden. Haben nämlich zwei Threads eines Warps zwei unterschiedliche Ausführungszweige zu bearbeiten, so wird die Ausführung der Zweige serialisiert, was sich negativ auf die Rechenzeit auswirkt. Mehrere Warps können gleichzeitig einem SM zugeordnet sein. Ihre Ausführung wird von einem sogenannten Warp-Scheduler koordiniert. Dieser steuert, welcher Warp zu welchem Zeitpunkt Zugriff auf die funktionalen Einheiten des SM erhält. Ein Fermi-SM besitzt zwei Warp- Scheduler mit je einer Dispatch-Einheit zum Start einer Instruktion. Daher

81 4.2. Grafikkarten 59 können zu einem Takt immer maximal zwei Warps gleichzeitig aktiv ausgeführt werden. Bei der Fermi-Architektur werden jedoch nicht alle 32 Threads eines Warps in einem Takt ausgeführt. Stattdessen werden Warps in Halbwarps zu je 16 Threads unterteilt und ein Befehl, welcher durch eine Dispatch-Einheit gestartet wurde, bekommt 2 Takte zugesprochen einen Takt zur Ausführung des Befehls durch den ersten Halbwarp und einen Takt zur Ausführung des Befehls durch den zweiten Halbwarp. Wie bereits erwähnt, können durch die zwei Dispatch-Einheiten zwei Instruktionen unterschiedlicher Warps gleichzeitig gestartet werden. Dies gilt allerdings nur für Load/Store-, Integer- und Fließkommabefehle einfacher Genauigkeit. Ein Fließkommabefehl doppelter Genauigkeit kann nicht zeitgleich mit einer Instruktion eines anderen Warps gestartet werden. Jeder SM ist mit einem Registersatz und einem schnellen SRAM-(Static Random-Access Memory)-Speicher ausgestattet. Dieser weist eine wesentlich höhere Bandbreite und geringere Latenz als der globale Speicher auf, ist aber mit einer Größe von 64 KiB bei der Fermi-Architektur auch wesentlich kleiner als der globale Speicher. Ein Teil des SRAM wird als L1- Cache genutzt und der verbleibende Teil der sogenannte Shared Memory steht den Threads des SM zur freien Verfügung. Die Aufteilung des SRAM kann dynamisch konfiguriert werden. Er kann in 16 KiB L1-Cache und 48 KiB Shared Memory aufgeteilt werden oder in 48 KiB L1-Cache und 16 KiB Shared Memory. Die SMs der Kepler-Architektur haben mehr funktionale Einheiten als die der Fermi-Architektur. Sie bieten 192 CKs, 32 Load/Store-Einheiten und 32 SFUs. Dafür befinden sich aber typischerweise auch weniger SMs auf einem Chip als bei der Fermi-Architektur. Vier Warp-Scheduler mit je 2 Dispatch- Einheiten sind für die Koordination der Threads eines Kepler-SM zuständig. Damit werden in einem Takt maximal vier Warps ausgeführt. Im Gegensatz zur Fermi-Architektur sind dabei in einem Takt die kompletten 32 Threads eines Warps aktiv. Zudem können durch die zwei Dispatch-Einheiten pro Warp-Scheduler zwei unabhängige Instruktionen eines Warps gleichzeitig gestartet werden. Wie Fermi-SMs verfügt ein Kepler-SM über einen 64 KiB großen SRAM, welcher in L1-Cache und Shared Memory unterteilt ist. Zusätzlich verfügt er noch über einen 48 KiB großen schreibgeschützten Cache für Konstanten.

82 60 Kapitel 4: Parallelrechensysteme Bei der Maxwell-Architektur wurde die Anzahl an funktionalen Einheiten pro SM im Vergleich zur Kepler-Architektur reduziert. Ein Maxwell-SM besteht aus 128 CKs, 32 Load/Store-Einheiten und 32 SFUs. Diese sind in vier Gruppen mit je einem eigenen Registersatz und Warp-Scheduler unterteilt. Damit teilen sich die insgesamt vier Warp-Scheduler nicht länger die kompletten Ressourcen des SM, wie bei der Kepler-Architektur, sondern jeder Warp- Scheduler hat seine festen Ressourcen zugewiesen. Ein Scheduler kann wiederum bis zu zwei unabhängige Instruktionen eines Warps gleichzeitig starten. Außerdem verfügt die Maxwell-Architektur über einen dedizierten L1-Cache, welcher unabhängig vom Shared Memory ist. Damit steigt die Kapazität des Shared Memory im Vergleich zu Fermi und Kepler auf 64 KiB bei der ersten Generation von Maxwell-GPUs (GM10x) bzw. auf 96 KiB bei der zweiten Generation von Maxwell-GPUs (GM20x). Berechnungen für eine GPU werden in CUDA in Form sogenannter Kernel implementiert. Dies sind spezielle Funktionen, die von mehreren Threads parallel auf einer GPU ausgeführt werden können. In CUDA werden Threads zu Threadblöcken zusammengefasst. Ein Threadblock ist während seiner Ausführung stets einem festen SM zugewiesen. Da alle Threads eines Threadblocks auf demselben SM ausgeführt werden, können sie auf denselben Shared Memory zugreifen und darüber Daten austauschen. Für Threads aus unterschiedlichen Threadblöcken gilt dies hingegen nicht. 4.3 Cluster Unter einem Cluster, auch Rechnerverbund genannt, versteht man einen Verbund von über ein Netzwerk gekoppelten eigenständigen Rechnern. Ein solches Cluster lässt sich über einen zentralen Einstiegspunkt wie ein einzelnes ganzheitliches System nutzen. Bei den gekoppelten Rechnern handelt es sich üblicherweise um Workstations oder PCs, welche im Kontext von Rechnerverbünden auch allgemein als Knoten bezeichnet werden. Seit Anfang der 1990er Jahre wurden Cluster vermehrt als kostengünstige Alternative zu spezialisierten Parallelrechnern und Supercomputern eingesetzt [21]. Ein Grund war, dass die Leistung handelsüblicher Rechner immer weiter anstieg und sie gleichzeitig ein besseres Preis-Leistungs-Verhältnis als Supercomputer aufwiesen [10].

83 4.3. Cluster 61 Zudem führte das Aufkommen neuer Netzwerktechnologien wie SCI (Scalable Coherent Interface) [93], Myrinet [31] und Fast Ethernet [35, 220] dazu, dass die Zeiten für die Kommunikation zwischen den einzelnen Rechnern eines Clusters zunehmend weniger ins Gewicht fielen. Heutzutage werden für die Kommunikation in Clustern üblicherweise Technologien wie Gigabit Ethernet [137] oder InfiniBand [166] eingesetzt. Neben einem guten Preis-Leistungs-Verhältnis ist ein weiterer Vorteil von Clustern, dass sie sich leicht erweitern und somit einem wachsenden Bedarf an Rechenleistung anpassen lassen. Weiterhin sind die Werkzeuge zum Entwickeln und Ausführen von Anwendungen in Clustern im Allgemeinen ausgereifter und standardisierter als entsprechende Werkzeuge für ausgefallene Supercomputer. Zwei bekannte Vertreter früher Clustersysteme sind das Network of Workstations (NOW) [9, 10] der Universität Berkeley und das Beowulf-Cluster [201] der NASA (National Aeronautics and Space Administration). Das Hauptaugenmerk des NOW-Projekts lag auf Untersuchungen von Netzwerk-Hardware und von Kommunikationsprotokollen hinsichtlich ihrer Eignung für den Einsatz in Clustern, sowie auf der Entwicklung eines Cluster-Betriebssystems namens GLUnix (Global Layer Unix). Mit dem Beowulf-Projekt sollte demonstriert werden, welch gutes Preis-Leistungs-Verhältnis sich mit Clustern bestehend aus kostengünstigen Standardkomponenten erreichen lässt. Der Begriff Beowulf-Cluster wird heutzutage oftmals synonym für ein Cluster bestehend aus handelsüblichen PCs verwendet. Teilaufgaben einer parallelen Anwendung, welche verteilt auf unterschiedlichen Rechnern eines Clusters ausgeführt werden, können nicht über einen gemeinsamen Arbeitsspeicher kommunizieren. Daher erfolgt die Kommunikation in einem Cluster für gewöhnlich über den expliziten Austausch von Nachrichten über das Netzwerk. Die bekanntesten Werkzeuge zur Entwicklung nachrichtengekoppelter Anwendungen für Cluster sind PVM (Parallel Virtual Machine) [79] und MPI (Message Passing Interface) [218]. PVM ist eine Laufzeitumgebung und Bibliothek zur Nachrichtenkopplung, deren erste Version 1989 vorgestellt wurde. Bei MPI handelt es sich um einen Standard für eine Bibliothek zur Implementierung nachrichtengekoppelter Anwendungen, von dem verschiedene Implementierungen, wie z. B. MPICH oder OpenMPI, existieren. In den 1990er Jahren konnte sich MPI zunehmend gegen PVM durchsetzen und gilt

84 62 Kapitel 4: Parallelrechensysteme heute als De Facto -Standard für nachrichtengekoppelte Programmierung. Es arbeitet nach dem SPMD-(Single-Program Multiple-Data)-Prinzip. Das heißt, dass mehrere gleichartige Prozesse gestartet werden, die alle dasselbe Programm auf unterschiedlichen Daten ausführen. Über verschiedene Routinen, wie MPI_Send oder MPI_Recv, können die Prozesse untereinander Nachrichten austauschen. Typischerweise haben mehrere Nutzer Zugriff auf ein Cluster. Um die Ausführung von Berechnungen der Nutzer im Cluster zu koordinieren, können sogenannte Batch-Systeme auch Ressourcen-Manager oder Job-Scheduler genannt genutzt werden. Nutzer geben Aufträge für Berechnungen an eine Warteschlange eines Batch-Systems ab und das Batch-System entscheidet, wann und auf welchen Knoten die einzelnen Berechnungen gestartet werden. Dabei wird darauf geachtet, dass Knoten nicht überlastet werden und dass die Ressourcen des Clusters möglichst gerecht auf die unterschiedlichen Nutzer aufgeteilt werden. Unter Umständen ist das Batch-System auch für weiterführende Aufgaben verantwortlich, wie etwa Lastverteilung oder das Speichern aktueller Zustände von Anwendungen (checkpointing) zur Steigerung der Fehlertoleranz. Bekannte Batch-Systeme sind unter anderem LSF (Load Sharing Facility), PBS (Portable Batch System), Condor und Oracle Grid Engine (OGE). In der Literatur finden sich verschiedenste Publikationen über EAs, welche mithilfe eines Clusters parallel ausgeführt werden. Es werden MPI-Implementierungen von herkömmlichen GAs [230, 219], von memetischen GAs [160], von Evolutionsstrategien [77], von genetischer Programmierung [68, 145], von evolutionärer Programmierung [127] und von multikriteriellen EAs [61, 39] beschrieben. Ebenso wird über PVM-Implementierungen von EAs [8, 141, 172, 226] berichtet. Die Nutzung von Webservices für die Kommunikation eines parallelen EA in einem Cluster wird von Risco-Martín [178] beschrieben und Lienig [120] nutzt ein Werkzeug namens Mentat zur Ausführung eines EA in einem Cluster. Mentat [86] bietet eine objektorientierte Bibliothek und eine Laufzeitumgebung für parallele Anwendungen, die sowohl für Systeme mit gemeinsamem Speicher als auch für Systeme mit verteiltem Speicher genutzt werden kann.

85 4.4. Grids Grids Ein Grid ist eine Infrastruktur bestehend aus mehreren lose gekoppelten Systemen, welche sich über eine einheitliche Schnittstelle nutzen lassen. Die verschiedenen Systeme sind dabei räumlich verteilt und erstrecken sich über unterschiedliche administrative Domänen. Daher sind die Systeme für gewöhnlich über das Internet und nicht über ein lokales Netzwerk gekoppelt. Zudem sind sie üblicherweise bezüglich der Hard- und Software heterogen. Die Anfänge des Grid-Computing gehen auf das I-WAY-(Information Wide Area Year)- Projekt [60] von 1995 zurück, bei dem 17 Supercomputer in den USA über ein Hochgeschwindigkeitsnetzwerk gekoppelt und wie ein einheitliches System genutzt wurden. Anfänglich wurde dies noch als Metacomputing bezeichnet, bevor sich der Begriff Grid-Computing etablierte. Ian Foster einer der bedeutendsten Wegbereiter des Grid-Computing entwickelte im Kontext des I-WAY-Projekts zusammen mit seinem Team Protokolle, die es ermöglichten verteilte Anwendung in der I-WAY-Infrastruktur auszuführen [73]. Aus diesen Arbeiten entstand die Grid-Middleware Globus Toolkit [74], deren erste Version 1997 veröffentlicht wurde. Im Kontext von Grid-Computing ist eine solche Middleware (engl. für Dienstschicht) dafür verantwortlich, eine einheitliche Schnittstelle zu den Systemen des Grids zu bieten. Das Globus Toolkit ist eine der bekanntesten und am meisten eingesetzten Grid-Middlewares. Heutzutage werden häufig Cluster über ein Grid gekoppelt. Es können aber auch Arbeitsplatzrechner, Supercomputer oder gar wissenschaftliche Gerätschaften zu einem Grid zusammengefasst werden. Der Antrieb zum Aufbau einer Grid-Infrastruktur ist häufig der Wunsch nach einer besseren Auslastung bestehender Systeme. Es kommt vor, dass die Rechen- und Speicherressourcen von Einrichtungen (z. B. Universitäten, Lehrstühle oder Firmen) in der Regel nur gering ausgelastet sind, dass aber sporadisch Spitzenanforderungen an Rechenleistung auftreten, die durch die vorhandenen Ressourcen nicht befriedigend erfüllt werden können. Koppeln solche Einrichtungen ihre Ressourcen zu einem Grid, welches sie gemeinschaftlich nutzen, so steigt die Auslastung der Ressourcen und Spitzenanforderungen können besser befriedigt werden. Wie bereits erwähnt, wird zur Kopplung der Ressourcen eine Grid-Middleware eingesetzt. Zwei weitere bekannte Middlewares neben dem bereits ge-

86 64 Kapitel 4: Parallelrechensysteme nannten Globus Toolkit sind UNICORE (Uniform Interface to Computing Resources) [204] und glite [36]. Die Entwicklung von glite wurde jedoch 2013 eingestellt. Eine Grid-Middleware hat im Wesentlichen die folgenden vier Aufgaben zu erfüllen: Sicherheit: Durch geeignete Maßnahmen zur Authentifikation und Autorisierung sicherstellen, dass keine unbefugten Zugriffe auf Grid-Dienste bzw. -Ressourcen stattfinden. Datenverwaltung: Dienste zum Auffinden und Transfer von Daten im Grid bereitstellen. Ausführungsverwaltung: Dienste zum Starten, Abbrechen und Verfolgen von Berechnungsaufträgen bereitstellen. Monitoring und Discovery: Dienste zum Auffinden von Ressourcen im Grid und zur Abfrage von Informationen über vorhandene Ressourcen bereitstellen. Jede administrative Domäne in einem Grid betreibt eine eigene Instanz der Middleware oder unter Umständen auch mehrere Instanzen, falls sie mehrere Systeme für das Grid bereitstellt. Um eine Anwendung verteilt in einem Grid auszuführen, werden für die auszuführenden Teilaufgaben der Anwendung Berechnungsaufträge (Jobs) an die Middleware-Instanzen des Grids abgegeben, welche die Jobs auf den angebundenen Systemen starten. Abbildung 4.3 zeigt exemplarisch den Aufbau eines Grids bestehend aus fünf Systemen, welche über drei Standorte verteilt sind. Die fünf Systeme werden von vier Abbildung 4.3: Beispiel für eine Grid-Infrastruktur mit fünf Systemen. Middleware-Instanzen verwaltet, an welche Jobs abgegeben werden können.

87 4.4. Grids 65 Eingabedaten von Jobs bzw. von Berechnungen werden typischerweise in Form von Eingabedateien vor dem Absenden eines Jobs auf das System transferiert, auf welchem der Job gestartet werden soll. Der Transfer der Dateien erfolgt mithilfe der Middleware-Instanz, welche das entsprechende System verwaltet. Analog werden Ausgaben nach der Berechnung in Form von Dateien auf den lokalen Rechner des Nutzers transferiert. Da die Systeme eines Grids nur lose gekoppelt sind, können Jobs, die auf mehrere der Systeme verteilt sind, im Allgemeinen nicht direkt miteinander kommunizieren. Insbesondere gilt dies, falls die einzelnen Systeme Cluster sind, da in einem Cluster üblicherweise nur ein spezieller Kopfknoten öffentlich erreichbar ist und die restlichen Knoten lediglich über ein privates Netzwerk gekoppelt sind. Dies erschwert die Ausführung verteilter Anwendungen, deren Teilaufgaben untereinander kommunizieren bzw. sich synchronisieren müssen. Eine Möglichkeit dieses Problem zu lösen, könnte der Einsatz eines öffentlichen Servers für die Kommunikation unter den Teilberechnungen sein. Dafür müsste jedoch eine entsprechende Serveranwendung bereitgestellt werden und die Teilberechnungen auf diese Art der Kommunikation angepasst werden. Außerdem ist das Nutzen eines öffentlichen Servers nicht möglich, falls die Ressourcen, auf denen die Jobs ausgeführt werden, keine Anbindung an ein öffentliches Netzwerk haben. Eine Lösung, welche unabhängiger von den konkreten Eigenschaften der Grid-Infrastruktur ist, ist die Kommunikation über Dateitransfers und die Synchronisation über das Absenden von Jobs zu synchronisierten Zeitpunkten. Diese Form der Kommunikation und Synchronisation kann für die Ausführung verteilter EAs in einem Grid eingesetzt werden. Die Koordination der Dateitransfers und der einzelnen Jobs manuell vorzunehmen ist jedoch nicht praktikabel. Aus diesem Grund wurde im Rahmen der vorliegenden Arbeit ein Framework namens Frog-EA (Framework for Optimizations in Grids using Evolutionary Algorithms) [122] entwickelt und evaluiert, welches das Ausführen verteilter EAs in einem Grid ermöglicht. Dieses Framework und dessen Evaluierung wird im nächsten Kapitel beschrieben.

88

89 Frog-EA 5 Um es Anwendern zu erleichtern, EAs verteilt in einem Grid auszuführen, wurde im Rahmen dieser Arbeit das Framework Frog-EA (Framework for Optimizations in Grids using Evolutionary Algorithms) entworfen. Ziel ist es, dass sich der Nutzer möglichst wenig mit der zugrunde liegenden Grid-Infrastruktur und dem Umgang mit der Grid-Middleware auseinandersetzen muss und sich so auf den evolutionären Algorithmus konzentrieren kann. Der Großteil von Frog-EA ist in Java implementiert und ein kleiner Teil in C. Das Framework ist ausgelegt für Grids, welche das Globus Toolkit 4 als Grid-Middleware einsetzen. In der Literatur finden sich drei weitere Frameworks, welche die Ausführung von EAs in Grids unterstützen: Paradis-CMW [38], JG 2 A [25] und GE-HPGA (Grid-enabled Hierarchical Parallel Genetic Algorithm) [121]. Paradis-CMW ist Teil der umfangreichen ParadisEO Toolbox [37] für Metaheuristiken. Es unterstützt Grids, welche Condor als Middleware einsetzen. Diese Form des Grids ist jedoch nicht so gebräuchlich wie Grids basierend auf dem Globus Toolkit. JG 2 A ist wie Frog-EA auf Grids mit dem Globus Toolkit 4 ausgelegt. Es setzt allerdings voraus, dass an den einzelnen Standorten des Grids Condor als Batch-System eingesetzt wird. Da sich Grids über mehrere administrative Domänen erstrecken, werden an den einzelnen Standorten jedoch im Allgemeinen unterschiedliche Batch-Systeme eingesetzt. GE-HPGA unterstützt das Globus Toolkit 2. Es erfordert, dass die Variationsoperatoren und die Fitnessfunktion des auszuführenden EA als Grid-Dienste bereitgestellt werden. Der Endnutzer hat jedoch üblicherweise keine Möglichkeit, selbst Grid-Dienste bereitzustellen. Frog-EA unterstützt zwei Formen der Parallelisierung von EAs: die globale Parallelisierung und das Inselmodell. Bei der globalen Parallelisierung stellt der Nutzer eine ausführbare Datei für die Fitnessberechnung bereit. Während die Bewertung von Individuen verteilt im Grid ausgeführt wird, wird der 67

90 68 Kapitel 5: Frog-EA Rest des EA vom Framework ausgeführt. Standardmäßig setzt Frog-EA den kanonischen GA nach Holland (siehe Abschnitt 2.6) um, welcher auf binär codierten Individuen arbeitet. Der Nutzer hat jedoch die Möglichkeit, über die Implementierung spezieller Java-Interfaces eigene evolutionäre Operatoren bereitzustellen, welche von Frog-EA bei der Ausführung des EA mit globaler Parallelisierung eingesetzt werden. Beim Inselmodell stellt der Nutzer ein Programm bereit, welches einen seriellen EA ausführt. Dieses wird vom Framework für die Berechnungen auf den einzelnen Teilpopulationen genutzt. Die Migration wird von Frog-EA durchgeführt, wobei eine Ringtopologie genutzt wird. Wie in Abbildung 5.1 illustriert, erhöht sich der Abstand zum Migrationspartner einer Teilpopulation im Ring mit jedem Migrationsschritt um eins. Im ersten Migrationsschritt wird zur Abbildung 5.1: Migration beim Inselmodell über Frog-EA. Nachbarpopulation migriert, im zweiten Migrationsschritt zur übernächsten Teilpopulation, im dritten Migrationsschritt zur überübernächsten Teilpopulation, usw. Die Anzahl der in einem Migrationsschritt migrierten Individuen kann vom Nutzer konfiguriert werden. Weiterhin kann konfiguriert werden, ob bei der Migration die besten oder zufällige Individuen einer Teilpopulation migriert werden. 5.1 Die Frog-EA-Nutzerschnittstelle Um Frog-EA zu nutzen, wird es als Hintergrundprozess gestartet. Über eine Konfigurationsdatei lassen sich gewisse globale Einstellungen für Frog-EA

91 5.1. Die Frog-EA-Nutzerschnittstelle 69 vornehmen. Insbesondere muss in der Konfiguration ein Rechner des genutzten Grids angegeben werden, auf dem eine Globus-Instanz läuft. Von dieser Globus-Instanz bezieht Frog-EA während der Ausführung eines EA alle benötigten Informationen über die verfügbaren Ressourcen des Grids. Um einen EA über Frog-EA auszuführen, legt der Nutzer alle Dateien, die zur Ausführung des EA benötigt werden, in ein spezielles Verzeichnis, welches von Frog-EA periodisch nach neuen Optimierungsaufträgen überprüft wird. Dabei werden mindestens zwei Dateien benötigt: eine ausführbare Datei (Executable) für die Fitnessbewertung bei der globalen Parallelisierung bzw. für einen seriellen EA beim Inselmodell und eine Optimierungsbeschreibung. Die ausführbare Datei muss in der Lage sein, Eingaben (entweder ein einzelnes Individuum oder eine Teilpopulation) von einer Datei einzulesen und das Ergebnis der Berechnung (entweder ein einzelner Fitnesswert oder eine Teilpopulation inklusive Fitnesswerten der Individuen) in eine Ausgabedatei zu schreiben. Neben diesen beiden Dateien kann der Nutzer bei Bedarf noch weitere Dateien, die vom Executable benötigt werden, mitliefern. Außerdem besteht die Möglichkeit, ein weiteres Executable bereitzustellen, welches von Frog-EA zur Initialisierung der Startpopulation genutzt werden kann. In der Optimierungsbeschreibung werden alle optimierungsspezifischen Informationen angegeben, die Frog-EA zur Ausführung der Optimierung benötigt. Es werden allgemeine Parameter für den EA, wie die Populationsgröße oder die Anzahl der zu berechnenden Generationen angegeben. Weiterhin wird in der Optimierungsbeschreibung die Art der Parallelisierung ausgewählt und es werden gewisse Einstellungen für die Parallelisierung, wie z. B. die Anzahl der Teilpopulationen, vorgenommen. Außerdem wird in der Optimierungsbeschreibung der Genotyp der Individuen 1 des EA spezifiziert. Dazu werden die einzelnen Gene angegeben und für jedes Gen wird der Typ und ggf. ein Startwert und eine untere und obere Grenze für die Werte des Gens angegeben. Die unterstützten Typen für Gene sind reelle Zahlen, ganze Zahlen, boolesche Werte und Permutationen. Wenn ein Executable zur Initialisierung der Startpopulation angegeben wird, so nutzt Frog-EA dieses für die Initialisierung. Damit ist es möglich zu garantieren, dass die Genotypen der Individuen der 1 Wird die globale Parallelisierung mit den Standardoperatoren von Frog-EA genutzt, so wird der Genotyp für die Variation ggf. intern in eine binäre Codierung umgewandelt.

92 70 Kapitel 5: Frog-EA Startpopulation Randbedingungen erfüllen, die sich nicht in der Optimierungsbeschreibung ausdrücken lassen. Wird kein solches Executable angegeben, so initialisiert Frog-EA die Startindividuen zufällig entsprechend der unteren und oberen Grenzen der Gene, bzw. es nutzt die Startwerte der Gene, falls diese in der Optimierungsbeschreibung angegeben sind. Während eine Optimierung ausgeführt wird, fertigt Frog-EA periodisch Zwischenberichte an, aus denen der Nutzer den Stand der Optimierung zu den einzelnen Generationen bzw. Migrationsschritten ersehen kann. 5.2 Die Ausführung eines EA durch Frog-EA Die Hauptaufgabe von Frog-EA besteht in der Ablaufsteuerung eines verteilten EA im Grid. Abbildung 5.2 illustriert, wie ein EA durch Frog-EA in einem Grid ausgeführt wird, welches aus drei Clustern mit unterschiedlichen Batch-Systemen (Oracle Grid Engine [OGF], LSF und PBS) besteht. Die Bereitstellung eines Clusters im Grid geschieht dabei über eine Globus-Instanz auf dem Kopfknoten des jeweiligen Clusters. Bevor Frog-EA Berechnungen im Abbildung 5.2: Ausführung eines EA durch Frog-EA in einem Grid bestehend aus drei Clustern, welche an drei Globus-Instanzen angebunden sind. Grid starten kann, muss es zunächst wissen, welche Ressourcen im Grid verfügbar sind und wie diese aktuell ausgelastet sind. Um diese Informationen zu

93 5.2. Die Ausführung eines EA durch Frog-EA 71 beziehen, wird der sogenannte Index Service (IS) von Globus genutzt. Über diesen Dienst lassen sich Informationen über die angebundenen Ressourcen einer Globus-Instanz beziehen. Außerdem lassen sich die Index Services mehrerer Globus-Instanzen hierarchisch koppeln, sodass sich über einen IS einer Globus-Instanz auch Informationen von anderen Globus-Instanzen beziehen lassen. In Abbildung 5.2 bezieht Frog-EA Informationen über alle drei Cluster von dem Globus auf Kopfknoten 2. Beim Start eines EA initialisiert Frog- EA zunächst die Startpopulation entsprechend der Optimierungsbeschreibung. Für jedes Individuum bzw. jede Teilpopulation wird dann eine Eingabedatei erzeugt. Die dabei entstehenden Eingabedateien werden zusammen mit dem Executable und ggf. zusätzlichen vom Nutzer gelieferten Eingabedateien auf die Ressourcen des Grids verteilt, auf denen anschließend die Berechnungen gestartet werden sollen. Die Dateitransfers werden über den Globus-Dienst GridFTP durchgeführt. GridFTP ist eine Erweiterung des üblichen FTP (File Transfer Protocol), welche die im Grid üblichen Authentifizierungs- und Autorisierungsmechanismen über X.509-Zertifikate unterstützt. Nachdem die Eingabedateien transferiert wurden, werden die Berechnungen in Form von Jobs gestartet. Für jede Teilpopulation beim Inselmodell bzw. jedes Individuum bei der globalen Parallelisierung wird ein Job abgeschickt, welcher das Executable auf der jeweiligen Teilpopulation bzw. dem Individuum startet. Um einen Job auf einer Ressource bzw. einem Cluster des Grids zu starten, wird er an den sogenannten WS-GRAM-(Webservice Grid Resource Allocation and Management)-Dienst der Globus-Instanz auf der entsprechenden Ressource geschickt. Der WS-GRAM-Dienst gibt den Berechnungsauftrag anschließend an das Batch-System des Clusters weiter, welches die Berechnung im Cluster startet. Die WS-GRAM wird auch genutzt, um den Status eines laufenden Jobs zu überwachen. Erkennt Frog-EA, dass ein Job erfolgreich beendet wurde, so werden die Ausgaben der Berechnung in Form von Ausgabedateien von der entsprechenden Grid-Ressource auf den Rechner, wo Frog-EA läuft, transferiert. Dafür wird wiederum GridFTP genutzt. Wurden alle abgeschickten Jobs erfolgreich beendet, so führt Frog-EA die Migration bzw. die evolutionären Operatoren aus. Für die dabei entstehenden Teilpopulationen bzw. Individuen werden anschließend wieder Eingabedateien erzeugt, auf denen wieder Berechnungen verteilt im Grid gestartet werden, usw.

94 72 Kapitel 5: Frog-EA Beim Start der Jobs in einem Schritt der Ausführung eines EA muss Frog- EA entscheiden, auf welchen Grid-Ressourcen die Jobs gestartet werden. Dazu wird folgende Scheduling-Strategie genutzt: Im ersten Schritt wird versucht, die Jobs möglichst gleichmäßig auf die vorhandenen Grid-Ressourcen zu verteilen, wobei darauf geachtet wird, dass an kein Cluster mehr Jobs geschickt werden, als freie Knoten in dem jeweiligen Cluster existieren. Aus den Laufzeiten der Jobs im ersten Schritt werden die durchschnittlichen Ausführungszeiten in den einzelnen Clustern berechnet. Diese werden dann zum Verteilen der Jobs im zweiten Schritt genutzt zunächst werden alle freien Knoten des schnellsten Clusters belegt, dann die des zweitschnellsten usw. Nach jedem weiteren Schritt werden die durchschnittlichen Laufzeiten in den einzelnen Clustern aktualisiert und für die Verteilung der Jobs im nächsten Schritt genutzt. Durch die Heterogenität, die nur lose Kopplung und die Verteilung auf mehrere Standorte sind Grids vergleichsweise fehleranfällig. Der Ausfall von Diensten oder Ressourcen des Grids sowie gewisse Nutzerrichtlinien auf den einzelnen Ressourcen (z. B. eine maximale Rechenzeit) können zum Scheitern von Jobs führen. Daher implementiert Frog-EA Mechanismen zur Steigerung der Fehlertoleranz. Scheitert ein Job, so wird versucht, den Job auf derselben Ressource nochmals zu starten. Wenn dies wieder fehlschlägt, wird der Job auf einer anderen Ressource neu gestartet und wenn auch dies scheitert, wird die Optimierung abgebrochen. In jedem Schritt der Optimierung wird jedoch eine Sicherheitskopie von der aktuellen Population in einer Datenbank gespeichert, sodass eine abgebrochene Optimierung zu einem späteren Zeitpunkt fortgeführt werden kann. 5.3 Evaluation von Frog-EA Um das Framework zu evaluieren, wurden im Rahmen der vorliegenden Arbeit Optimierungen für das bekannte Travelling Salesman Problem (TSP, engl. für Problem des Handlungsreisenden) über Frog-EA in einem Grid durchgeführt. Beim TSP wird ein möglichst kurzer Hamiltonkreis in einem kantengewichteten Graphen gesucht. Die Länge eines Hamiltonkreises ist dabei die Summe der Gewichte der enthaltenen Kanten. Das TSP ist ein NP-hartes Problem. In einem vollständigen symmetrischen Graphen mit N Knoten exis-

95 5.3. Evaluation von Frog-EA 73 tieren (N 1)!/2 verschiedene Hamiltonkreise. Das TSP lässt sich als Suche nach einer möglichst kurzen Rundtour durch eine gegebene Menge von Städten veranschaulichen, wobei jede Stadt in der Rundtour genau einmal vorkommen muss. Für die Optimierungen im Rahmen der Evaluation von Frog-EA wurde eine leicht abgewandelte Version des GAs, wie er von Sengoku und Yoshihara [189] beschrieben wird, genutzt. Dabei handelt es sich um einen memetischen GA, bei dem die Individuen Rundtouren in Form von Permutationen repräsentieren. Für die Mutation von Nachkommen wird ein lokaler Suchoperator genutzt die 2-Opt-Heuristik. Dabei wird ein Individuum bzw. eine Rundtour iterativ durch Austausch zweier Kanten mit zwei besseren Kanten entsprechend Abb. 5.3 verbessert. Für die Rekombination zweier Elternindividuen Abbildung 5.3: Ersetzung von Kanten bei der 2-Opt-Heuristik. kommt der sogenannte GSX-(Greedy Subtour Crossover)-Operator zum Einsatz. Dieser arbeitet, wie in Abbildung 5.4 exemplarisch dargestellt. Zunächst Abbildung 5.4: Beispiel für die GSX-Rekombination. Die Stadt 2 wird anfangs zufällig gewählt. Dann werden die Städte 7 und 3 vom ersten Elternteil übernommen und die Städte 5 und 1 vom zweiten Elternteil. Danach können keine weiteren Städte von den Elternteilen übernommen werden und die noch fehlenden Städte 6 und 4 werden dem Nachkommen in einer zufälligen Reihenfolge hinzugefügt. wird eine zufällige Stadt gewählt und in den Nachkommen eingefügt. Danach werden die Nachbarn der Stadt im Nachkommen abwechselnd von dem einen und dem anderen Elternteil übernommen, wobei in dem einen Elternteil nach

96 74 Kapitel 5: Frog-EA links gegangen wird und in dem anderen Elternteil nach rechts. Wenn man in einem Elternteil bei einer Stadt ankommt, die sich bereits im Nachkommen befindet, so werden keine weiteren Städte von diesem Elternteil übernommen. Sobald von keinem der beiden Elternteile mehr Städte übernommen werden können, werden die noch fehlenden Städte im Nachkommen in einer zufälligen Reihenfolge hinzugefügt. Als TSP-Instanz für die Optimierungen wurde die Instanz fnl4461 mit 4461 Städten aus der bekannten TSP-Instanz-Bibliothek TSPLIB [177] genutzt. Die Testumgebung für die Optimierungen bestand aus einem lokalen Rechner A und zwei entfernten und über Globus erreichbaren Clustern B und C. Host A ist mit einem 2,7 GHz Intel Core i7 Vierkernprozessor ausgestattet. Die Cluster B und C sind heterogen aufgebaut. Während es in Cluster B aufgrund einer hohen Anzahl an Nutzern zu längeren Wartezeiten von Jobs im Batch-System kommen kann, werden Jobs im Cluster C im Allgemeinen sofort gestartet. Vor Durchführung der eigentlichen TSP-Optimierungen wurden zunächst Testrechnungen ausgeführt, um die Rechenleistung der genutzten Systeme einordnen zu können. Dafür wurden auf den drei Systemen mehrere Berechnungen von 500 Generationen des eingesetzten GA mit 100 Individuen auf dem fnl Problem gestartet und die entsprechenden Ausführungszeiten gemessen. Die daraus resultierenden mittleren, minimalen und maximalen Laufzeiten auf den Systemen sind in Tabelle 5.1 aufgeführt. Tabelle 5.1: Resultate der Laufzeitmessungen für die serielle Ausführung von 500 Generationen des TSP-GA mit 100 Individuen auf dem fnl4461 -Problem. Laufzeit [s] System Minimal Durchschnittlich Maximal Host A Cluster B Cluster C Die angegebenen Laufzeiten für die Cluster B und C beinhalten keine Wartezeiten im Batch-System, sondern sind die reinen Laufzeiten der Berechnungen. Es ist zu sehen, dass die Berechnung auf Host A im Durchschnitt am

97 5.3. Evaluation von Frog-EA 75 schnellsten ausgeführt wird. Da beide Cluster heterogen aufgebaut sind, kann es in ihnen zu beträchtlichen Laufzeitschwankungen kommen. Zur Evaluation von Frog-EA wurde die TSP-Optimierung in der beschriebenen Testumgebung mit drei verschiedenen Konfigurationen ausgeführt. Diese sind in Tabelle 5.2 zu sehen. Die Optimierung wurde seriell auf Host A aus- Tabelle 5.2: Die drei Konfigurationen, mit denen der TSP-GA zur Evaluation von Frog-EA ausgeführt wurde. Konfiguration Parameter System Host A Cluster B & C Cluster B & C Populationen Populationsgröße Generationen Migrationsintervall Generationen 500 Generationen Migranten geführt und mit 20 bzw. 40 Teilpopulationen parallel in den Clustern B und C mithilfe von Frog-EA. Bei den parallelen Optimierungen werden alle 500 Generationen zwei Individuen zwischen den Inseln migriert und Frog-EA läuft dabei auf Host A. Sowohl bei der seriellen als auch bei den parallelen Optimierungen werden Generationen berechnet und die Gesamtzahl der Individuen beträgt Mit jeder der drei Konfigurationen wurden fünf Optimierungen durchgeführt. Abb. 5.5 zeigt die resultierenden durchschnittlichen Laufzeiten. Die serielle Optimierung benötigte durchschnittlich etwa 12,5-mal so lange wie die parallele Optimierung mit 20 Teilpopulationen und etwa 19,4- mal so lange wie die Optimierung mit 40 Teilpopulationen. Die durchschnittliche Laufzeit der seriellen Optimierung beträgt 4950 min. Aus Tabelle 5.1 ist zu ersehen, dass eine Optimierung in Cluster C durchschnittlich 2,64-mal so lange benötigt wie auf Host A. Damit lässt sich die durchschnittliche Laufzeit der seriellen Optimierung entsprechend Konfiguration 1 auf einem Host von Cluster C zu min abschätzen. Ausgehend von diesem Wert würde

98 76 Kapitel 5: Frog-EA Laufzeit [min] Population mit 2000 Individuen 20 Populationen à 100 Individuen 40 Populationen à 50 Individuen Abbildung 5.5: Durchschnittliche Laufzeiten der Optimierungen mit den drei Konfigurationen nach Tabelle 5.2. eine parallele Optimierung mit 20 Teilpopulationen mindestens min benötigen, wenn die Berechnungen in jedem Schritt gleichmäßig auf Cluster B und C aufgeteilt würden und eine parallele Optimierung mit 40 Teilpopulationen würde mindestens 326 min benötigen. Diese Werte sind als Linien in Abb. 5.5 gekennzeichnet. Die gemessenen durchschnittlichen Laufzeiten liegen unter diesen Werten, was zeigt, dass sich das Scheduling durch Frog-EA auszahlt. Die parallelen Ausführungen des GA lieferten nicht nur bessere Ausführungszeiten als die seriellen Ausführungen, sondern auch bessere Optimierungsresultate. Abb. 5.6 zeigt die durchschnittlichen Verläufe der Optimierungen mit den drei genutzten Konfigurationen. Da die serielle Optimierung mit einer großen Population schneller konvergiert als die parallelen Optimierungen auf Teilpopulationen, liefert sie in den ersten Generationen die besten Optimierungsergebnisse. Ab etwa Generation werden die Ergebnisse der Optimierung mit 20 Teilpopulationen jedoch besser als die der seriellen Optimierung und ab Generation liefert auch die Optimierung mit 40 Teilpopulationen bessere Ergebnisse als die serielle Optimierung. 2 Es wird von mindestens gesprochen, da die Laufzeiten in Tabelle 5.1 keine Wartezeiten im Batch-System oder sonstigen im Grid entstehenden Overhead enthalten.

99 5.3. Evaluation von Frog-EA Einzelpopulation 20 Teilpopulationen 40 Teilpopulationen Fitness (Tourlänge) Generation Abbildung 5.6: Durchschnittliche Verläufe der seriellen und parallelen Optimierungen entsprechend Tabelle 5.2.

100

101 Untersuchung paralleler evolutionärer Algorithmen auf verschiedenen Architekturen Die parallele Mehrfachausführung Die parallele Mehrfachausführung ist die grobgranularste Form der Parallelisierung. Die parallel auszuführenden Teiltasks sind hier ganze EAs, welche keine Kommunikation/Synchronisation untereinander erfordern. Somit spielt hier Overhead, der mit einzelnen Architekturen verbunden ist, kaum eine Rolle und es ist davon auszugehen, dass die Architektur, welche die meiste Rechenleistung bietet, am geeignetsten ist. Dies ist im Allgemeinen das Grid. Das gilt zumindest, wenn die Anzahl der parallel auszuführenden EAs ausreichend groß ist, um die verfügbare Rechenleistung auszunutzen. Wenn sie nicht die Anzahl der Kerne eines Clusters übersteigt, so lohnt sich das Cluster mehr als ein Grid. Gerade bei einer kleineren Anzahl parallel auszuführender EAs, kann sich wiederum eine GPU gegenüber einem Cluster lohnen. Die parallele Mehrfachausführung kann als Inselmodell gesehen werden, bei dem keine Migration stattfindet. Daher lassen sich die Untersuchungen des nächsten Abschnitts, bei dem die GPU mit dem Cluster für das Inselmodell verglichen wird, auch auf die parallele Mehrfachausführung übertragen. Ist die Anzahl der parallel auszuführenden EAs sehr gering (kleiner als die Anzahl Kerne eines Multicores), so ist der Multicore zu bevorzugen. 6.2 Das Inselmodell Das Inselmodell auf der GPU Die Implementierung des Inselmodells auf der GPU kann intuitiv auf drei verschiedene Art und Weisen vorgenommen werden, wobei vom konkreten Op- 79

102 80 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen timierungsproblem bzw. -algorithmus abhängt, welche Art am sinnvollsten ist. In [134] werden diese drei Arten gegenübergestellt: Das Master-Worker-Modell, das verteilte Inselmodell auf der GPU sowie das verteilte Inselmodell auf der GPU unter Nutzung des Shared Memory. Diese drei Formen der Implementierung sind in den Abbildungen 6.1 und 6.2 dargestellt. Abbildung 6.1: Implementierung des Inselmodells auf der GPU über das Master-Worker-Modell. (a) (b) Abbildung 6.2: Das verteilte Inselmodell auf der GPU. (a) Ohne Nutzung des Shared Memory. (b) Mit Nutzung des Shared Memory.

103 6.2. Das Inselmodell 81 Bei dem Master-Worker-Modell dient die GPU lediglich als Co-Prozessor für die CPU. Während auf der GPU die Bewertung der Nachkommen parallel durchgeführt wird, ist die CPU für den Rest des Algorithmus zuständig. Bei dem verteilten Inselmodell auf der GPU wird der gesamte Algorithmus auf der GPU ausgeführt, wobei je ein Threadblock für eine Insel zuständig ist und die Gesamtpopulation stets im globalen Speicher gehalten wird. Das verteilte Inselmodell auf der GPU unter Nutzung des Shared Memory arbeitet genauso, nur dass die Inseln, wie der Name schon sagt, nicht im globalen Speicher, sondern im Shared Memory gehalten werden. Lediglich der Austausch von Individuen bei der Migration erfolgt über den globalen Speicher. Das Master-Worker-Modell bietet den Vorteil, dass serielle Teile des Algorithmus effizienter ausgeführt werden können, als wenn sie auf der GPU ausgeführt werden. Der Nachteil ist, dass in jeder Generation Daten zwischen CPU und GPU ausgetauscht werden müssen. Dieser Austausch der Daten ist bei dem verteilten Inselmodell auf der GPU nicht nötig. Hier werden jedoch eine Vielzahl von Zugriffen auf den globalen Speicher benötigt, was mit Latenzen von 400 bis 800 Takten verbunden ist. Durch Nutzung des Shared Memory können die Zugriffe auf den globalen Speicher reduziert werden, was zu einem signifikanten Geschwindigkeitsgewinn führen kann. Die Größe des Shared Memory auf aktuellen Grafikkarten beträgt für gewöhnlich 48 bis 96 KiB. Daher ist die Inselgröße bzw. die Anzahl der Inseln bei dieser Form der Implementierung beschränkt die Inseln aller Threadblöcke, die zusammen auf einem SM ausgeführt werden, dürfen in der Summe diese 48 bzw. 96 KiB nicht überschreiten. Wenn die Anzahl der Inseln nur gering ist (kleiner als die Anzahl der SMs der GPU), so ist es ratsam, die Parallelisierung auf der GPU leicht abzuändern und Inseln auf mehrere Threadblöcke aufzuteilen, um somit die Kerne der GPU besser auszulasten. In dem Fall ist es nicht sinnvoll, die Individuen im Shared Memory zu halten, da Datenabhängigkeiten zwischen den verschiedenen Threadblöcken bestehen. Allgemein gilt, dass eine GPU nur dann sinnvoll für das Insel-Modell eingesetzt werden kann, wenn die Anzahl λ der pro Generation parallel zu erzeugenden und zu bewertenden Nachkommen ausreichend groß ist (mindestens ein Vielfaches der Warpgröße von üblicherweise 32). Ansonsten würden zu viele Kerne der GPU ungenutzt bleiben und die Leistung der genutzten Kerne würde

104 82 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen nicht ausreichen, um einen Geschwindigkeitsgewinn gegenüber einem Multicore oder einem Cluster zu erbringen. Moderne GPUs bieten eine Taktfrequenz zwischen 1 und 1,5 GHz, während CPUs Frequenzen jenseits der 2 GHz, große Caches und Techniken wie Sprungvorhersage aufweisen. Da bei dem Master-Worker-Modell das Inselmodell nicht komplett auf der GPU parallelisiert ist und hier dieselben Aussagen gelten wie für die globale Parallelisierung, sei diese Form der Parallelisierung an dieser Stelle nicht untersucht. Es sei auf Abschnitt zur globalen Parallelisierung auf der GPU verwiesen. Wie gut das verteilte Inselmodell auf der GPU ausgeführt werden kann, hängt sehr davon ab, wie effizient die evolutionären Operatoren auf der GPU ausgeführt werden können. Dies haben wir für verschiedene Standardoperatoren anhand einer Optimierung für die Weierstrass-Funktion untersucht [96]. Das Optimierungsproblem lautet wie folgt: k min f(x) = 32 n=0 i=1 0,85 n cos(3,0 n πx i ) mit x R 32. (6.1) Über die Wahl des Parameters k kann die Zeit, die für die Berechnung dieser Funktion benötigt wird, beliebig variiert werden und somit ist es möglich, die Rechenintensität der Fitnessberechnung zu steuern. Die Optimierung wurde mit einfacher Genauigkeit durchgeführt. Ein Individuum besteht demzufolge aus 32 Float-Werten. Ausgangspunkt der Untersuchungen ist eine Multicore- Implementierung der Optimierung, welche über OpenMP mit dem Inselmodell parallelisiert wurde. Bei den Untersuchungen wurden zwei Formen der Selektion und zwei Formen der Mutation berücksichtigt. Die Berechnungen auf der GPU wurden dabei mithilfe des CUDA Toolkits implementiert. Im Folgenden sollen die Ergebnisse der Untersuchungen für die einzelnen Operatoren beschrieben werden. Selektion und Rekombination Folgende Selektionsoperatoren wurden hinsichtlich ihrer Eignung für die Ausführung auf der GPU untersucht: die Tournament-Selektion und die Roulette- Selektion (siehe Abschnitt 2.3 zu Selektionsoperatoren). Dies sind neben der rangbasierten Selektion die gebräuchlichsten Operatoren für die Elternselekti-

105 6.2. Das Inselmodell 83 on und bezüglich der Implementierung ist die rangbasierte Selektion vergleichbar mit der Roulette-Selektion. Bei den Untersuchungen fiel auf, dass die Laufzeit der Rekombination auf der GPU von der eingesetzten Art der Selektion abhängt. Aus diesem Grund wurden Selektion und Rekombination bei den Untersuchungen zusammengefasst. Mit Tournament-Selektion war die Laufzeit der Rekombination länger als mit der Roulette-Selektion. Eine mögliche Erklärung dafür könnte sein, dass bei der Tournament-Selektion (auf 5 % der Population bei den Untersuchungen) im Schnitt mehr Speicherzugriffe nötig sind als bei der Roulette- Selektion, wodurch öfter Daten, die bei der Rekombination benötigt werden, aus dem Cache verdrängt werden. Für die Rekombination wurde die One- Point-Rekombination (siehe Abb. 2.3, Seite 16) genutzt, welche im Wesentlichen aus dem Kopieren von Genen besteht, sodass hier Cache-Effekte einen großen Einfluss auf die Laufzeit haben können. Bei den Experimenten entsprach die Anzahl λ von erzeugten Nachkommen pro Generation der Populationsgröße µ. Bei der One-Point-Rekombination werden zwei Nachkommen aus zwei Elternindividuen gebildet. Daher müssen µ Elternindividuen pro Generation selektiert werden. Zunächst wurde die One-Point-Rekombination in Verbindung mit der Tournament-Selektion untersucht. Die Tournament-Selektion wurde auf 5 % der Population durchgeführt, wie in [19] empfohlen. Sie lässt sich gut auf der GPU parallelisieren, da keinerlei Datenabhängigkeit zwischen unterschiedlichen Selektionen besteht. So können µ/2 Threads auf der GPU die Tournament- Selektion parallel ausführen und somit je zwei Elternindividuen selektieren, die anschließend für die Rekombination und damit für das Erzeugen von zwei Nachkommen genutzt werden. Ähnlich verhält es sich auf der CPU, wo eine for-schleife über µ/2 Selektionen und Rekombinationen per OpenMP parallelisiert wurde. Zum Generieren von Zufallszahlen auf der CPU wurde ein selbst implementierter Mersenne-Twister genutzt, da sich gezeigt hat, dass die parallele Berechnung von Zufallszahlen über den drand48- bzw. den lrand48-pseudozufallszahlengenerator der GNU-Standardbibliothek ein schlechtes Skalierungsverhalten aufweist (siehe [96] für Details). Auf der GPU wurde zum Erzeugen von Zufallszahlen die NVIDIA CUDA Zufallszahlengenerator-Bibliothek CU-

106 84 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen RAND genutzt. Abbildung 6.3 zeigt die Laufzeiten der Tournament-Selektion zuzüglich der One-Point-Rekombination auf einer GTX580-Grafikkarte (Fermi-Architektur) und einer Intel Xeon X5650-CPU (2,66 Ghz) unter Nutzung von 8 Kernen 1 in Abhängigkeit der Populationsgröße µ. Bei den Messungen wurden 100 Generationen berechnet. Die abgebildeten Zeiten sind, wie auch die anschließend gezeigten Zeiten, über 10 Läufe gemittelt. Auf der GPU wurde eine Threadblockgröße von 64 Threads genutzt. 6 Geforce GTX580 Xeon X5650 (8 Kerne) 5 4 Zeit [s] µ Abbildung 6.3: Durchschnittliche Laufzeiten der Tournament-Selektion zuzüglich One-Point-Rekombination für verschiedene Populationsgrößen µ auf einer Geforce GTX580 und einer Intel Xeon X5650-CPU unter Nutzung von 8 Kernen (λ = µ, 100 Generationen). Wie man sieht, ist die GPU der CPU überlegen, da sich die Tournament- Selektion und die One-Point-Rekombination auf der GPU gut parallel über alle Nachkommen ausführen lassen. Beide Operatoren weisen zwar Divergenz auf, jedoch wie man sieht, nicht in dem Maße, als dass die GPU hinsichtlich der Performanz hinter die CPU fällt. Nach der Untersuchung der Tournament-Selektion wurde die Roulette-Selektion in Verbindung mit der One-Point-Rekombination untersucht. Die Roulette-Selektion besteht aus zwei Schritten: Vor der eigentlichen Selektion muss das Rouletterad initialisiert werden. Dazu wird ein Array A mit den Prä- 1 Genauer gesagt, teilen sich die Kerne auf zwei Xeon X5650-Hexcores eines Mehrprozessorsystems auf.

107 6.2. Das Inselmodell 85 fixsummen der Fitnesswerte 2 der Population berechnet und die Elemente des Arrays werden anschließend durch die Gesamtsumme der Fitnesswerte geteilt. Bei der eigentlichen Selektion wird eine gleichverteilte Zufallszahl p [0, 1] generiert und es wird das Arrayelement A[i] gesucht, für das A[i 1] < p A[i] gilt (bzw. i = 0, falls p A[0]). Das i-te Individuum der Population wird dann als Elternindividuum selektiert. Somit entspricht die eigentliche Selektion der Suche nach einer (Zufalls-)Zahl in einer sortierten Liste. Haben die Individuen einer Population der Größe 4 beispielsweise folgende Fitnesswerte: Pop[0].fit=4, Pop[1].fit=2, Pop[2].fit=1, Pop[3].fit=1, so wird A folgendermaßen gebildet: A[0]=4/8=0,5 A[1]=6/8=0,75 A[2]=7/8=0,875 A[3]=8/8=1 Für p [0; 0,5] wird dann Individuum 0 selektiert, für p (0,5; 0,75] wird Individuum 1 selektiert, usw. Die Berechnung der Präfixsumme wurde auf der CPU per OpenMP parallelisiert wie in Abb. 6.4 dargestellt. Zunächst bildet jeder Thread eine Präfixsum- Abbildung 6.4: Bildung der Präfixsumme mit 3 Threads. Schritt 1 und Schritt 3 werden parallel ausgeführt und Schritt 2 seriell. me auf einem Teilabschnitt der aufzusummierenden Liste der Fitnesswerte. Ein 2 Die Roulette-Selektion ist auf Maximierungsprobleme ausgelegt. Um sie für Minimierungsprobleme zu nutzen, können statt den Fitnesswerten fit 1,..., fit µ 1 1 fit 1,..., fit µ genutzt werden. die Kehrwerte

108 86 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen einzelner Thread addiert anschließend auf jedes Endelement eines Abschnitts die Summe der Endelemente der vorhergehenden Abschnitte. In einem abschließenden Schritt wird dann parallel auf jedes Element, welches noch nicht den richtigen Wert enthält, das Endelement vom vorhergehenden Abschnitt addiert. Auf der GPU wurde die Funktion cudppscan der CUDA-Bibliothek CUDPP (CUDA Data Parallel Primitives) zum Bilden der Präfixsumme genutzt. Für die eigentliche Selektion das heißt, das Suchen in der Liste der Präfixsummen wurde sowohl auf der CPU als auch der GPU binäre Suche genutzt, wiederum parallelisiert über das Selektieren von µ/2 Paaren von Elternindividuen. Die binäre Suche ist mit Divergenz verbunden. Alle Threads eines Warps müssen so lange warten, bis der letzte Thread des Warps mit seiner Suche erfolgreich war. Dies erklärt, warum bei der Roulette-Selektion die GPU im Vergleich mit der CPU nicht ganz so gut abschneidet wie bei der Tournament- Selektion. Die Laufzeiten auf der GPU und der CPU sind in Abb. 6.5 zu sehen. Erst ab einer Populationsgröße von ca kann die GPU von ihrer Rechen Geforce GTX580 Xeon X5650 (8 Kerne) Zeit [ms] µ Abbildung 6.5: Durchschnittliche Laufzeiten der Roulette-Selektion zuzüglich One-Point-Rekombination für verschiedene Populationsgrößen µ auf einer Geforce GTX580 und einer Intel Xeon X5650-CPU unter Nutzung von 8 Kernen (λ = µ, 100 Generationen). leistung in dem Maße profitieren, dass die Berechnung auf ihr schneller wird als auf der CPU. Die absoluten Unterschiede in der Rechenzeit liegen aber durchweg im Bereich weniger ms und fallen daher in der Praxis in den meisten

109 6.2. Das Inselmodell 87 Fällen nicht nennenswert ins Gewicht. Mutation Für die Mutation wurden die folgenden beiden Operatoren untersucht: die Gauß-Mutation und die BGA-Mutation. Bei der Gauß-Mutation (siehe auch Abschnitte 2.6 und 2.7) wird auf jedes Gen eines Nachkommen mit einer gewissen Mutationswahrscheinlichkeit (bei den hier beschriebenen Untersuchungen 5 %) eine standardnormalverteilte Zufallszahl addiert. Somit besteht die Gauß-Mutation hauptsächlich aus dem Generieren von Zufallszahlen. Auf der GPU wurde dafür wiederum die CURAND-Bibliothek genutzt und auf der CPU der Mersenne-Twister. Da der Mersenne-Twister lediglich gleichverteilte Zufallszahlen erzeugt, wurde zum Generieren der standardnormalverteilten Zufallszahlen auf der CPU zusätzlich die Box-Muller-Methode [32] genutzt Geforce GTX580 Xeon X5650 (8 Kerne) Zeit [ms] µ Abbildung 6.6: Durchschnittliche Laufzeiten der Gauß-Mutation für verschiedene Populationsgrößen µ auf einer Geforce GTX580 und einer Intel Xeon X5650-CPU unter Nutzung von 8 Kernen (λ = µ, 100 Generationen). Wie in Abbildung 6.6 zu sehen ist, schneidet die GPU für die Gauß-Mutation deutlich besser ab als die CPU. Bei der BGA-Mutation wird jedes Gen mit einer gewissen Mutationswahrscheinlichkeit (bei den Untersuchungen wiederum 5 %) entsprechend Algorithmus 3 in Abschnitt 2.6, Seite 20 mutiert. Für die Parameter m und α des Algorithmus wurde bei den Experimenten m = 20 und α = 0,5 verwendet. Der Algorithmus birgt etliche Verzweigungen. Doch trotz dieser Divergenz sind die

110 88 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Laufzeiten der BGA-Mutation auf der GPU sehr gut, wie in Abb. 6.7 zu sehen. Ab einer Populationsgröße von ca. 700 Individuen ist die BGA-Mutation auf der GPU schneller als auf der CPU. 300 Geforce GTX580 Xeon X5650 (8 Kerne) Zeit [ms] µ Abbildung 6.7: Durchschnittliche Laufzeiten der BGA-Mutation für verschiedene Populationsgrößen µ auf einer Geforce GTX580 und einer Intel Xeon X5650-CPU unter Nutzung von 8 Kernen (λ = µ, 100 Generationen). Populationsaktualisierung Zum Erzeugen der Population für die nächste Generation wählen wir die µ besten Individuen aus der Gesamtheit der µ + λ Eltern und Nachkommen aus. Dafür werden diese µ + λ Individuen nach ihrer Fitness sortiert. Zum Sortieren auf der CPU wird die Funktion _gnu_parallel::sort des parallelen Modus der libstdc++ verwendet. Auf der GPU wird die CUDA-Bibliothek Thrust zum Sortieren genutzt. Das Aktualisieren ist der einzige der getesteten Operatoren, bei dem die GPU durchweg schlechter abschneidet als die CPU. Dies ist in Abb. 6.8 zu sehen. Die geringe operationelle Intensität beim Sortieren ist sicherlich der Hauptgrund, warum die GPU hier hinter der CPU liegt. Das Sortieren erfordert viele Speicherzugriffe bei gleichzeitig wenigen rechenintensiven logisch-arithmetischen Operationen. Dabei hat die CPU mit ihren großen Caches einen Vorteil gegenüber der GPU. Dennoch hält sich der Unterschied zwischen den Laufzeiten auf der CPU und der GPU in einem akzeptablen Rahmen und scheint auch

111 6.2. Das Inselmodell Geforce GTX580 Xeon X5650 (8 Kerne) Zeit [ms] µ Abbildung 6.8: Durchschnittliche Laufzeiten der Populationsaktualisierung (hauptsächlich Sortieren der µ + λ Eltern und Nachkommen) für verschiedene Populationsgrößen µ auf einer Geforce GTX580 und einer Intel Xeon X5650-CPU unter Nutzung von 8 Kernen (λ = µ, 100 Generationen). nicht mit steigender Populationsgröße anzuwachsen. Gesamter Algorithmus Wie in den vorhergehenden Abschnitten gezeigt, lassen sich die gängigen Standardoperatoren gut auf einer GPU parallelisieren. Die Laufzeiten lagen durchweg auf dem Niveau einer 8-Kern-CPU-Implementierung und teilweise deutlich darunter. Damit lässt sich das Inselmodell grundsätzlich für eine Mehrzahl von Optimierungen gut auf einer GPU anwenden. Da die gängigen Operatoren ähnlich gut auf CPU und GPU ausgeführt werden können und üblicherweise nur einen Bruchteil der Laufzeit der Fitnessbewertung benötigen, kommt es bei der Frage, ob sich der Einsatz einer GPU für das Inselmodell lohnt, letztendlich darauf an, wie gut die Fitnessfunktion auf der GPU ausgeführt werden kann. Da die Fitnessbewertung üblicherweise eine hohe Rechenintensität aufweist, ist in den meisten Fällen davon auszugehen, dass eine GPU einen Geschwindigkeitsgewinn gegenüber einer gängigen CPU erbringt. Einziges Haupthindernis, warum die GPU in einigen Fällen keinen Geschwindigkeitsgewinn erbringt, scheint Divergenz bei der Fitnessbewertung zu sein. Wie an den vorangegangenen Untersuchungen der evolutionären Operatoren zu sehen ist, kann die GPU aber auch noch bei einem gewissen Grad von Divergenz sehr gute Per-

112 90 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen formanz liefern. Um Aussagen darüber zu gewinnen, wie gut sich das gesamte Inselmodell auf einer GPU ausführen lässt, wurde im Rahmen dieser Arbeit eine Optimierung für die Weierstrass-Funktion mit dem Inselmodell und folgenden Parametern durchgeführt: Die Inselgröße beträgt 128 Individuen. Es werden alle 20 Generationen 2 Individuen in einer Ringtopologie migriert und insgesamt werden 100 Generationen berechnet. Bei der Fitnessbewertung wurden 50 Weierstrass- Iterationen (Parameter k in Formel (6.1)) berechnet und die Anzahl der Inseln wurde zwischen 10 und 150 in 10er-Schritten variiert. Als Operatoren werden Tournament-Selektion, One-Point-Rekombination und Gauß-Mutation genutzt. Die Rekombinationswahrscheinlichkeit beträgt 70 %, die Mutationswahrscheinlichkeit pro Gen beträgt 5 % und die Tournament-Selektion wird auf 5 % der Population bzw. der Insel durchgeführt. Auf der GPU wurde die Optimierung in zwei verschiedenen Varianten implementiert. Bei der ersten Variante werden die Inseln die ganze Zeit über im globalen Speicher gehalten, so wie auch bei den vorangegangenen Untersuchungen der einzelnen evolutionären Operatoren. Bei der zweiten Variante werden die Inseln hingegen im Shared Memory gehalten. Zur Synchronisation und zur Migration ist es jedoch notwendig, die Inseln in den globalen Speicher zu kopieren. Abb. 6.9 zeigt den Ablauf des Inselmodells unter Nutzung des Shared Memory. Zunächst wird ein Kernel zur Initialisierung der Inseln im globalen Speicher aufgerufen. Anschließend werden in einer Schleife abwechselnd zwei Kernel aufgerufen: Ein Kernel für die Berechnung eines Migrationsintervalls und ein Kernel für die Migration. Vor der Berechnung eines Migrationsintervalls müssen stets die Inseln vom globalen Speicher in den Shared Memory kopiert werden und danach wieder zurück. Bei der Variante, die auf dem globalen Speicher rechnet, wurde wieder Thrust genutzt, um die Inseln im Zuge ihrer Aktualisierung zu sortieren. Bei der Shared-Memory-Variante war dies nicht möglich, da Thrust nicht aus einem GPU-Kernel heraus genutzt werden kann, sondern nur vom Host aus, und daher keine Daten im Shared Memory über Thrust sortiert werden können. Stattdessen wurde eine Bitsort-Implementierung aus NVIDIAs Sammlung von CUDA-Beispielen genutzt. Bei beiden GPU-Varianten ist je ein Threadblock von 128 Threads für die

113 6.2. Das Inselmodell 91 Abbildung 6.9: Kernelaufrufe für das Inselmodell auf der GPU unter Nutzung des Shared Memory. Die Rechtecke symbolisieren CUDA-Kernel Geforce GTX580 (global mem) Geforce GTX580 (shared mem) Xeon X5650 (8 Kerne) Zeit [s] µ Abbildung 6.10: Durchschnittliche Laufzeiten der Optimierung mit dem Inselmodell für verschiedene Populationsgrößen µ auf einer Geforce GTX580 und einer Intel Xeon X5650-CPU unter Nutzung von 8 Kernen. Für die GPU sind die Laufzeiten des Inselmodells sowohl mit als auch ohne Nutzung des Shared Memory angegeben. (λ = µ, 100 Generationen, 50 Weierstrass-Iterationen, Inselgröße 128, 2 Migranten, Migration alle 20 Generationen).

114 92 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Berechnungen auf einer Insel zuständig. In Abbildung 6.10 sind die Laufzeiten beider GPU-Varianten sowie der CPU-Version in Abhängigkeit der Populationsgröße zu sehen. Wie man sieht, sind die Berechnungen auf der GPU klar schneller als auf der CPU. Die GPU-Version ohne Nutzung des Shared Memory erreicht einen Speed-Up von bis zu 11,5 verglichen mit der CPU-Variante auf 8 Kernen. Die Variante mit Nutzung des Shared Memory ist um bis zu weitere 40 % schneller als die Variante ohne Nutzung des Shared Memory und erreicht einen Speed-Up von etwa 19 verglichen mit der CPU. Zusammenfassung Inselmodell auf der GPU Zusammenfassend lässt sich zum Inselmodell auf der GPU sagen, dass für den Großteil der praktischen Anwendungen Geschwindigkeitsgewinne gegenüber einer CPU zu erwarten sind. Die einzigen Voraussetzungen, unter welchen nicht mit einem Geschwindigkeitsgewinn zu rechnen sind, scheinen die folgenden zu sein: 1. Die Anzahl λ der pro Generation parallel zu erzeugenden/bewertenden Nachkommen ist nicht groß genug (mindestens ein Vielfaches der Warpgröße). 2. Es kommen ausgefallene evolutionäre Operatoren zum Einsatz, welche nicht für die GPU geeignet sind. 3. Die Fitnessberechnung weist eine hohe Divergenz auf Das Inselmodell im Cluster Zur Implementierung des Inselmodells in einem Cluster eignet sich eine Bibliothek für verteilte parallele Anwendungen, wie MPI. Zwei Formen der Implementierung erscheinen sinnvoll: 1. Ein Master-Prozess steuert die Ausführung des Inselmodells auf mehreren Workern. Dafür nimmt er in jedem Migrationsschritt Migranten oder ganze Inseln von den Workern entgegen und verteilt die Inseln bzw. Migranten dann entsprechend der Migrationsstrategie wieder auf die verfügbaren Worker. 2. Es gibt keinen Master-Prozess und die Prozesse tauschen direkt untereinander Migranten aus.

115 6.2. Das Inselmodell 93 Die erste Form der Implementierung erleichtert die Erkennung und Behandlung von Fehlern, wenn beispielsweise ein Prozess unerwartet terminiert. Zudem ist es nicht erforderlich, dass die Worker untereinander kommunizieren können was sie in einer Cluster-Umgebung aber üblicherweise können. Ansonsten bietet die erste Form der Implementierung keine offensichtlichen Vorteile gegenüber der zweiten Form. Im Gegenteil weist die zweite Form keinen Flaschenhals in Form eines Masters auf und sollte damit gegenüber der ersten Form zu bevorzugen sein. Ob sich ein Cluster gegenüber einem Multicore als Plattform für das Inselmodell lohnt, hängt zunächst von der Anzahl der Inseln ab. Sollte die Anzahl der Inseln nicht ausreichend groß sein, um einen Multicore auszulasten, dann kann ein Cluster bestehend aus mehreren Multicores keinen Geschwindigkeitsgewinn erbringen. Wenn die Anzahl der Inseln jedoch ausreichend groß ist, bleibt die Frage, ob der Geschwindigkeitsgewinn im Cluster eventuell durch den dort auftretenden Overhead zunichte gemacht wird. Der Overhead wird im Wesentlichen durch die Kommunikation zwischen den Prozessen erzeugt. Um quantitative Aussagen über den Einfluss der Kommunikation zu gewinnen, wurden mithilfe des Intel MPI Benchmarks (IMB) Version Testmessungen auf einem Cluster sowohl unter Nutzung von 10 Gbit/s InfiniBand als auch unter Nutzung von Gigabit Ethernet vorgenommen. Die Knoten des genutzten Clusters verfügen über je vier Kerne (zwei AMD Opteron 2216HE-CPUs). Daher wurden auf jedem Knoten maximal vier Prozesse gleichzeitig gestartet. Bei den Testmessungen wurde der SendRecv-Benchmark des IMB genutzt, welcher ein Kommunikationsmuster aufweist, das auch bei der Migration von Individuen zwischen den Prozessen auftritt. Dabei werden, wie in Abb dargestellt, Nachrichten in einer Kette versendet. Jeder Prozess sendet eine Nachricht an seinen rechten Nachbarn und empfängt eine Nachricht von seinem linken Nachbarn. Abbildung 6.11: Ablauf der Kommunikation beim IMB SendRecv-Benchmark. Der IMB variiert dabei die Nachrichtengröße x von 0 bis Byte

116 94 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen (4 MiB). Für jede Nachrichtengröße sendet und empfängt ein Prozess mehrere Nachrichten (je nach Nachrichtengröße maximal 1000) und die gemessenen Zeiten werden darüber gemittelt. Zusätzlich wurde der Benchmark zehnmal ausgeführt und die Resultate gemittelt. Die Messungen wurden für eine Anzahl von 2 bis 32 Prozessen ausgeführt. In Abb sind die resultierenden durchschnittlichen Zeiten, die für einen Transfer (Senden plus Empfangen einer Nachricht) benötigt wurden, zu sehen. Kommunikationszeit [µs] Prozesse 4 Prozesse 8 Prozesse 16 Prozesse 32 Prozesse Kommunikationszeit [µs] Prozesse 4 Prozesse 8 Prozesse 16 Prozesse 32 Prozesse Nachrichtengröße [KiB] (a) Nachrichtengröße [KiB] (b) Abbildung 6.12: Über den IMB SendRecv-Benchmark ermittelte durchschnittliche Zeiten für MPI_Sendrecv unter Nutzung von (a) 10 Gbit/s InfiniBand und (b) Gigabit Ethernet für verschiedene Anzahlen von beteiligten Prozessen und verschiedene Nachrichtengrößen. Man kann sehen, dass die Kommunikationskosten sehr gering sind. Bei 32 Prozessen und einer Nachrichtengröße von 4 MiB werden lediglich ca. 15 ms unter Nutzung von 10 Gbit/s InfiniBand benötigt und ca. 96 ms unter Nutzung von Gigabit Ethernet. Eine Nachrichtengröße von 4 MiB scheint aber in der Praxis sehr unwahrscheinlich, da bei jeder Kommunikation lediglich die Migranten ausgetauscht werden müssen, was üblicherweise nur wenige Individuen sind. Außerdem ist davon auszugehen, dass in der Praxis nicht alle beteiligten Prozesse zur selben Zeit kommunizieren, da sie nicht exakt die gleiche Zeit benötigen, um die Berechnungen zwischen den Migrationsschritten auszuführen. Da die Berechnung für eine Insel im Allgemeinen um ein Vielfaches länger dauert als die angegebenen Zeiten für die Kommunikation, kann man also den Overhead im Cluster für das Inselmodell vernachlässigen und zu dem Schluss kommen, dass sich der Einsatz eines Clusters im Vergleich zu einem Multicore

117 6.2. Das Inselmodell 95 in jedem Fall lohnt, sofern die Anzahl der zu berechnenden Inseln, wie erwähnt, groß genug ist (größer als die Anzahl der Kerne des Multicores). Sollte dies der Fall sein und ein Multicore aufgrund der auf Seite 92 angegebenen Voraussetzungen bessere Ausführungszeiten liefern als eine GPU, so ist selbstverständlich auch das Cluster im Vergleich zu der GPU im Vorteil. Wie bereits im vorherigen Kapitel ausgeführt, sollte die GPU jedoch für die Mehrzahl der praktischen Anwendungen einen Geschwindigkeitsgewinn im Vergleich zu einem Multicore erzielen. Dabei ist mit Speed-Ups im Bereich von 2 bis 20 zu rechnen. Damit muss die Anzahl der Kerne im Cluster die Anzahl der Kerne des Multicores um ein eben so hohes Vielfaches überschreiten, um denselben Geschwindigkeitsgewinn zu erzielen. Dies sollte in einem herkömmlichen Cluster auch der Fall sein. Allerdings muss die Anzahl der Inseln mindestens genauso hoch sein. Dies könnte für viele Optimierungen zu Gunsten der GPU sprechen. Beispielsweise wurde für die getestete Weierstrass-Optimierung, wie in Abschnitt angegeben, auf der GPU ein Speed-Up von ca. 19 im Gegensatz zu einer 8-Kern-CPU-Implementierung erreicht. Damit wäre ein Cluster erst dann schneller als die GPU, wenn mit 152 Inseln gerechnet wird. Eine solche Anzahl von Inseln sollte allerdings für viele Anwendungen im Sinne der Optimierung nicht sinnvoll sein, da sie zu einer sehr langsamen Konvergenz des EA führt. Insgesamt lässt sich also sagen, dass für den Großteil von Anwendungen mit einem Geschwindigkeitsgewinn gerechnet werden kann, wenn ein Cluster statt einem Multicore für das Inselmodell eingesetzt wird. Da der Overhead im Cluster beim Inselmodell vernachlässigbar klein ist, ist mit Speed-Ups im Bereich der Anzahl der im Cluster genutzten Multicores zu rechnen. Im Vergleich zu einer GPU ergibt sich kein so klares Bild. Hier ist ein limitierender Faktor die Anzahl der parallel zu berechnenden Inseln. Ausgehend von Speed-Ups von 2 bis 20 auf der GPU im Vergleich zu einem 8-Kern-Multicore, muss die Anzahl mindestens 16 bis 160 betragen. Für Optimierungen mit mehr als 150 Inseln ist somit im Allgemeinen davon auszugehen, dass ein Cluster mit mindestens 150 Kernen bessere Laufzeiten ergibt als eine GPU. Für Optimierungen mit weniger als 150 Inseln was die Mehrzahl der praxisrelevanten Optimierungen ausmachen sollte bzw. für Cluster mit weniger als 150 Kernen lässt sich kein allgemeiner Trend angeben, ob die GPU oder das Cluster besser für das

118 96 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Inselmodell geeignet ist. Die Anzahl der Inseln und der Kerne im Cluster muss mindestens genauso groß sein, wie der Speed-Up α, der sich auf einer GPU gegenüber einer Einkern-CPU-Variante ergibt, damit das Cluster schneller ist als die GPU Das Inselmodell im Grid Im Grid ist es im Allgemeinen nicht möglich, dass einzelne Prozesse bzw. Jobs, welche die Inseln berechnen, untereinander kommunizieren, da es üblicherweise keine Netzwerkverbindung unterhalb der Hosts gibt, auf denen sie ausgeführt werden. Damit ist hier eine Implementierung mit einem Master-Prozess sinnvoll. Im Gegensatz zu einer Implementierung im Cluster können die Worker im Normalfall auch nicht direkt mit dem Master kommunizieren. Jegliche Kommunikation muss über Dateien und die Grid-Middleware erfolgen. Damit ist es nur schwer oder gar nicht möglich, einem laufenden Job Daten zu übergeben. Das hat zur Folge, dass die Jobs zur Berechnung der Inseln nach jedem Migrationsschritt neu gestartet werden müssen. Damit müssen die kompletten Inseln vor jedem Migrationsschritt von dem Master eingesammelt werden, damit er sie im Folgenden auf die neuen Jobs verteilen kann. Dieser Workflow, wie er auch von Frog-EA (Abschnitt 5) eingesetzt wird, erzeugt einen nicht unerheblichen Overhead. Im Detail ergibt sich der Overhead für jeden Migrationsschritt als Summe aus den folgenden Zeiten: 1. Zeit für Transfer Inputs. Vor jedem Migrationsintervall müssen die Daten der einzelnen Inseln und ggf. weitere benötigte Daten auf die Zielsysteme transferiert werden, wo anschließend die Jobs gestartet werden sollen. 2. Zeit zwischen Transfer Inputs und Jobs auf Cluster. Je nach eingesetzter Grid-Middleware kann eine gewisse Zeit vergehen, die zum Starten der Jobs auf den Zielsystemen benötigt wird. 3. Zeit zwischen Job auf Cluster und Jobs gestartet. Grids setzen sich typischerweise aus Clustern zusammen, von denen jedes einzelne unter der Kontrolle eines eigenen Batch-Systems steht. Damit müssen die Jobs unter Umständen in der Warteschlange des lokalen Batch-Systems warten.

119 6.2. Das Inselmodell Zeit zwischen Ende Job und Transfer Outputs. Analog zum Starten eines Jobs, kann es sein, dass die eingesetzte Middleware eine gewisse Zeit benötigt, um zu registrieren, dass der Job beendet ist. 5. Zeit Transfer Outputs. Nach Beendigung eines Jobs müssen die resultierenden Inseln auf das System, auf dem der Master läuft, zurücktransferiert werden. 6. Zeit Migration (Lesen Outputs, eigentliche Migration, Schreiben neuer Inputs). Zeit die benötigt wird, um die Outputs der zuletzt gestarteten Jobs auszuwerten und neue Inputs für die nächsten Jobs zu generieren. Der Transfer von In- und Output-Dateien geschieht im Grid-Umfeld typischerweise per GridFTP über das Internet. Damit ist die Internet-Anbindung hier ein limitierender Faktor. Bei im Rahmen der vorliegenden Arbeit durchgeführten Messungen von Zeiten, die für den Transfer von Daten per GridFTP zwischen einem lokalen und einem entfernten Cluster benötigt wurden, ergab sich eine durchschnittliche Bandbreite von ca. 30 MiB/s. Damit sollten die Transferzeiten für den Großteil der praktischen Anwendungen nicht länger sein als wenige Sekunden. Auch die Zeiten, die für die Migration und das Starten und Beenden von Jobs über die Middleware benötigt werden, sollten im Allgemeinen nicht größer sein. Anders verhält es sich mit Wartezeiten bei den lokalen Batch-Systemen, welche durchaus im Minutenbereich liegen können. Gleichzeitig ist die Wartezeit nur schwer im Voraus abzuschätzen, da sie stark von der aktuellen Auslastung des jeweiligen Clusters abhängt. Um also im Voraus abschätzen zu können, ob sich der Einsatz von Gridtechnologie zur Ausführung einer Optimierung über das Inselmodell lohnt, muss eine sinnvolle obere Schranke für die Wartezeit von Jobs in den Batch-Systemen des Grids angegeben werden. Klar ist, dass ein Grid analog zum Cluster keinen Geschwindigkeitsgewinn gegenüber einem Multicore erbringen kann, wenn die Anzahl der Inseln die Anzahl der Kerne des Multicores nicht überschreitet. Wie im letzten Abschnitt anhand von Benchmark-Messungen gezeigt wurde, ist für das Inselmodell von einem Speed-Up im Cluster verglichen mit einem Multicore auszugehen, wenn die Anzahl der Inseln höher ist als die Anzahl der Kerne des Multicores. In den

120 98 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Fällen, in denen die Berechnung im Grid schneller ist als auf einem Multicore, ist sie demnach auch im Cluster schneller als auf einem Multicore. Daher erübrigt es sich zu untersuchen, unter welchen Umständen ein Grid sich verglichen mit einem Multicore lohnt und es genügt neben einem Vergleich zwischen Grid und GPU ein Vergleich zwischen Grid und Cluster. Zunächst soll Letzteres diskutiert werden. Seien folgende Werte für einen per Inselmodell parallelisierten EA, ein Cluster mit n c Kernen und ein Grid bestehend aus n g Clustern gegeben: #inseln #gens mi t gen (SC) t mi (SC) δt sync Die Anzahl der Inseln des EA. Die Anzahl der Generationen pro Migrationsintervall. Die Zeit, die auf einer Einkern-CPU für die Berechnung einer Generation, also das Erzeugen, Bewerten und Einfügen aller Nachkommen einer Generation, benötigt wird, wenn die Population nicht in Inseln unterteilt ist. Die Zeit, die ein Migrationsintervall auf der Gesamtpopulation auf einer Einkern-CPU benötigt. Sie lässt sich abschätzen zu #gens mi t gen (SC). Der Overhead, der pro Migrationsschritt im Grid verglichen mit dem Cluster entsteht. Der Unterschied δt mi zwischen der reinen Rechenzeit für ein Migrationsintervall (ohne Overhead) im Cluster und im Grid ergibt sich vereinfachend zu: δt mi = t mi(sc) n c t mi(sc) #inseln, (6.2) unter der Annahme, dass #inseln n c gilt und im Grid mindestens so viele Kerne zur Verfügung stehen, wie Inseln existieren (n c n g #inseln). Falls #inseln < n c gilt, lässt sich im Grid kein Geschwindigkeitsvorteil gegenüber dem Cluster erzielen und im Folgenden soll stets davon ausgegangen werden, dass im Grid immer mehr Kerne zur Verfügung stehen, wie Inseln existieren. Das Grid erbringt genau dann einen Vorteil gegenüber einem Cluster, wenn δt sync < δt mi gilt. Aus Gleichung (6.2) folgt, dass dafür notwendigerweise Folgende Ungleichung gelten muss: t mi (SC) n c > δt sync. (6.3)

121 6.2. Das Inselmodell 99 Mit anderen Worten, wenn der Overhead pro Migrationsintervall im Grid verglichen mit dem Cluster größer ist, als die Dauer eines Migrationsintervalls im Cluster, so kann das Grid keine Vorteile gegenüber dem Cluster erbringen. Aber auch wenn Ungleichung 6.3 gilt, muss die Anzahl der Inseln im Vergleich zur Anzahl der Kerne im Cluster ausreichend hoch sein, damit die Berechnung im Grid schneller ist als im Cluster. Es muss Folgendes gelten: #inseln > 1 1/n c δt sync /t mi (SC). (6.4) Unter der Annahme, dass ein Migrationsintervall im Cluster ϕ-mal so lange benötigt, wie pro Migrationsintervall Overhead im Grid entsteht, d. h., dass t mi (SC)/n c = ϕ δt sync gilt, so ergibt sich aus (6.4), dass Folgendes für die Anzahl der Inseln gelten muss: #inseln > ϕ n c ϕ 1. (6.5) Gelte #inseln = ψn c, so zeigt Abbildung 6.13, welche Werte für ψ mindestens nötig sind, um im Grid eine Beschleunigung verglichen mit einem Cluster für verschiedene Werte von ϕ erreichen zu können. Daraus lässt sich z. B. ab ψ ,2 1,4 1,6 1,8 2 2,2 2,4 2,6 2,8 3 ϕ Abbildung 6.13: Vielfaches ψ von n c an Kernen im Grid, die mindestens genutzt werden müssen, damit im Grid ein Geschwindigkeitsvorteil gegenüber einem Cluster mit n c Kernen erreichbar ist abhängig von dem Faktor ϕ, um den ein Migrationsintervall im Cluster länger benötigt als Overhead im Grid entsteht. lesen, dass im Grid mindestens doppelt so viele Kerne wie im Cluster benötigt

122 100 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen werden, falls ein Migrationsintervall im Cluster doppelt so lange benötigt, wie im Grid Overhead entsteht. Benötigt die Berechnung im Cluster nur 1,2-mal so lange, dann sind im Grid schon 6-mal so viele Kerne wie im Cluster nötig. Was dies für die Anforderungen an den EA bedeutet, damit er über das Inselmodell im Grid schneller ausgeführt werden kann als im Cluster, sollen die Abbildungen 6.14 und 6.15 verdeutlichen. Sie zeigen, wie groß t gen (SC) die Rechenzeit für eine Generation auf einem Singlecore abhängig von der Anzahl der Generationen pro Migrationsintervall für verschiedene Werte von ψ mindestens sein muss, um im Grid eine Beschleunigung im Vergleich zum Cluster erzielen zu können. Dabei wird davon ausgegangen, dass im Cluster 120 Kerne zur Verfügung stehen. In Abb wird davon ausgegangen, dass der Overhead pro Migrationsintervall im Grid 10 s höher ist als im Cluster. Man n c =120, δt sync =10 s 1 ψ=2 ψ=4 ψ=8 Zeit [min] 0,1 0,01 0, #gens mi Abbildung 6.14: Wert für die Rechenzeit t gen (SC) für eine Generation auf einem Singlecore, der abhängig von der Anzahl der Generationen pro Migrationsintervall mindestens nötig ist, damit das Grid gegenüber einem Cluster einen Vorteil erbringt für verschiedene Werte von ψ. Es wird von einem Cluster mit 120 Kernen ausgegangen und von δt sync = 10 s. sieht, dass es bereits bei einer geringen Anzahl an Generationen pro Migrationsintervall und doppelt so vielen Kernen im Grid wie im Cluster ausreicht, wenn die serielle Rechenzeit für eine Generation im Bereich einer Minute liegt. Für ein Migrationsintervall von 1000 Generationen sind nur wenige Sekunden erforderlich. Dies sollte für einen Großteil der praktischen Anwendungen erfüllt

123 6.2. Das Inselmodell 101 sein. Allerdings ist δt sync hier mit 10 s sehr niedrig angesetzt, um sozusagen den Best Case zu betrachten. Wie bereits ausgeführt, ist davon auszugehen, dass der Overhead in der Praxis von den Wartezeiten in den lokalen Batch- Systemen dominiert wird. In [24] werden die Wartezeiten im EGEE-Grid untersucht. Demnach beträgt die durchschnittliche Wartezeit 121 s und für 95 % aller Jobs liegt die Wartezeit unter 231 s. Allerdings beträgt die maximal beobachtete Wartezeit 2700 s (45 min). Optimistisch könnte man hier also die obere Schranke für die Wartezeit auf 121 s setzen, pessimistisch jedoch auf 2700 s. Basierend auf eigenen Erfahrungen und den angegebenen Werten in [24] wird im Folgenden davon ausgegangen, dass etwa 10 min eine realistische obere Schranke für die Wartezeit und somit auch für δt sync darstellt. Wie sich damit die Anforderungen an t gen (SC) im Vergleich zu Abb ändern, zeigt Abb Man sieht, dass hier t gen (SC) für alle betrachteten Werte von ψ n c =120, δt sync =600 s 100 ψ=2 ψ=4 ψ=8 Zeit [min] #gens mi Abbildung 6.15: Anforderungen an die Rechenzeit t gen (SC) für eine Generation auf einem Singlecore analog Abb für δt sync = 10 min. über 10 min betragen muss, falls ein Migrationsintervall weniger als 100 Generationen lang ist und selbst bei 1000 Generationen pro Migrationsintervall muss t gen (SC) noch über einer Minute liegen. Man kann also davon ausgehen, dass die Berechnung einer Generation auf einem Singlecore in der Praxis mindestens im Bereich weniger Minuten liegen sollte, damit sich das Grid im Vergleich zu einem Cluster lohnt. Zusätzlich sollte die Berechnung eines Migrationsintervalls auf dem Cluster mindestens 10 min benötigen (ausgehend von

124 102 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen δt sync = 10 min). Im Folgenden soll nun untersucht werden, unter welchen Voraussetzungen ein Grid einen Vorteil gegenüber einer GPU erbringt. Dies kann analog zur letzten Untersuchung gemacht werden, nur dass statt der Anzahl n c von Kernen, der Speed-Up betrachtet werden muss, der für die Berechnung eines Migrationsintervalls auf der GPU im Vergleich zu einer Einkern-CPU erreicht wird. Dieser entspricht annähernd dem Speed-Up α, der sich für die Gesamtberechnung ergibt. Abb zeigt, welche Laufzeiten t mi (SC) für die Berechnung eines Migrationsintervalls auf einer Einkern-CPU abhängig von α mindestens notwendig sind, damit die Berechnung mit 2α, 3α,..., 6α Inseln im Grid schneller erfolgt als auf der GPU. Dabei wird davon ausgegangen, dass der Overhead, der sich im Grid für einen Migrationsschritt ergibt, 10 min beträgt #inseln=2α #inseln=3α #inseln=4α #inseln=5α #inseln=6α t sync (Grid)=600 s Zeit [min] α Abbildung 6.16: Zeit für die Berechnung eines Migrationsintervalls auf einer Einkern-CPU, ab der ein Geschwindigkeitsgewinn im Grid verglichen mit der GPU möglich ist, für verschiedene Anzahlen von Inseln, abhängig vom Speed- Up α der auf der GPU im Vergleich zu einem Singlecore erzielt wird. Der Overhead im Grid beträgt dabei 10 min. Man sieht, dass hier bei einem α von 150 die Berechnung eines Migrationsintervalls mindestens 3000 min (50 h) auf einem Singlecore betragen muss, um in einem Grid unter Nutzung von 300 Kernen einen Geschwindigkeitsgewinn erzielen zu können. Selbst unter Nutzung von 900 Kernen im Grid

125 6.2. Das Inselmodell 103 (#inseln = 6α) muss die Berechnung eines Migrationsintervalls auf einem Singlecore noch mindestens 1800 min benötigen. Allerdings wird der Speed-Up α auf der GPU in der Regel wohl bedeutend kleiner sein als 150. Ein α von 80 würde bei 160 genutzten Kernen im Grid nur noch eine Rechenzeit von mindestens 1600 min für die Berechnung eines Migrationsintervalls auf einem Singlecore erfordern, damit die Berechnung im Grid schneller wird als auf der GPU. Das wären also 16 min pro Generation, falls ein Migrationsintervall 100 Generationen beträgt und 1,6 min, falls ein Migrationsintervall 1000 Generationen beträgt. Als groben Richtwert kann man also ähnlich wie beim Vergleich mit dem Cluster sagen, dass t gen (SC) in den meisten Fällen mindestens im Bereich einiger Minuten liegen muss, damit sich im Grid ein Geschwindigkeitsvorteil gegenüber einer GPU erzielen lässt. Weiterhin gilt analog zum Cluster, dass es Sinn ergeben muss, die Optimierung mit #inseln > α Inseln durchzuführen Zusammenfassung Inselmodell auf verschiedenen Architekturen Die Erkenntnisse der vorangegangenen Untersuchungen sind in dem Entscheidungsbaum in Abb zusammengefasst. Hier ist zu sehen, welche Architektur sich unter welchen Voraussetzungen am besten als Plattform für die Ausführung des Inselmodells eignet. Mit #inseln ist dabei die Anzahl der Inseln bezeichnet, bzw. welche maximale Anzahl Inseln im Sinne der Optimierung noch Sinn ergibt. t gen (SC) ist die Zeit, die auf einer Einkern-CPU für die Berechnung einer Generation auf der Gesamtpopulation benötigt wird und gens mig ist die Anzahl der Generationen pro Migrationsintervall. α bezeichnet den Speed-Up, der für die reine Berechnung eines Migrationsintervalls auf einer GPU im Vergleich zu einem Singlecore erzielt werden kann. Die im Diagramm angegebenen Werte verstehen sich als grobe Richtwerte. Bei der Auswahl einer geeigneten Architektur entsprechend dem angegebenen Diagramm kann der Speed-Up α für ein Migrationsintervall einer GPU gegenüber einem Singlecore üblicherweise nur grob abgeschätzt werden, da noch keine GPU-Implementierung des Optimierungsalgorithmus existiert. Wie bereits erwähnt, sind hier Werte zwischen 2 und 150

126 104 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Abbildung 6.17: Richtlinien zur Auswahl einer geeigneten Architektur für das Inselmodell, abgeleitet aus den Ergebnissen der vorhergehenden Untersuchungen. realistisch, wobei sich die Optimierung sehr gut für eine Parallelisierung auf der GPU eignen muss, um einen Speed-Up von 150 zu erreichen. Je weniger Nachkommen pro Generation zu bewerten sind, je mehr Divergenz die Fitnessfunktion aufweist und je geringer ihre operationelle Intensität (das Verhältnis von Rechenoperationen zu Speicherzugriffen) ist, umso kleinere Werte sind für α zu erwarten. 6.3 Die globale Parallelisierung Die globale Parallelisierung auf der GPU Die globale Parallelisierung ist sicherlich die meist genutzte Parallelisierungsform, wenn GPUs für die Ausführung von EAs zum Einsatz kommen. Die Implementierung erfolgt analog zum Master-Worker-Modell beim Inselmodell, wie in Abb. 6.1 dargestellt, mit dem Unterschied, dass keine Migration stattfindet. Damit müssen in jeder Generation die Nachkommen von der CPU auf die GPU transferiert werden und die auf der GPU berechneten Fitnesswerte von der GPU auf die CPU. Damit ist die Zeit, die für Datentransfers zwischen

127 6.3. Die globale Parallelisierung 105 CPU und GPU benötigt wird, ein wichtiger Faktor, der die Laufzeit bei der globalen Parallelisierung auf der GPU beeinflusst. Der Durchsatz bei der Datenübertragung ist dabei limitiert durch die Bandbreite der PCI-(Peripheral Component Interconnect)-Schnittstelle. Neben der genutzten Hardware haben weitere Faktoren wie das Betriebssystem oder der verwendete Compiler Einfluss auf den Durchsatz. Um einen Anhaltspunkt für die Transfergeschwindigkeit zu bekommen, wurden verschieden große Daten von der CPU zur GPU und wieder zurück zur CPU transferiert. Die genutzte GPU war eine GTX580 und der Host verfügt über einen Intel Core i7-2600k Quadcore. Auf dem Host kommt ein Kernel der Version und das Betriebssystem Gentoo zum Einsatz. Die GPU ist über PCI Express 2.0 angebunden und der Code wurde mit dem CUDA Toolkit kompiliert. Abbildung 6.18 zeigt die benötigten Zeiten für die verschieden großen Daten (alle Zeiten sind gemittelt über 10 Durchläufe). Um den Durchsatz zu steigern, wird von NVIDIA empfohlen, Pinned Memory (nicht auf Festplatte auslagerbarer Speicher) zu verwenden. Die Transferzeiten unter Nutzung von Pinned Memory sind ebenfalls in Abbildung 6.18 zu sehen. 100 ohne Pinned Memory mit Pinned Memory 10 Zeit [ms] 1 0,1 0, Größe transferierter Daten [KiB] Abbildung 6.18: Durchschnittliche Zeiten für den Transfer verschieden großer Daten von der CPU auf die GPU und wieder zurück zur CPU. Wie man sieht, kann die Nutzung von Pinned Memory nur bedingt den Durchsatz erhöhen. Erst ab einer Datenmenge von ca. 16 KiB wird die Übertragung schneller als ohne Pinned Memory. Unabhängig davon, ob Pinned Me-

128 106 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen mory genutzt wird oder nicht, halten sich die Übertragungszeiten im Rahmen. Beispielsweise beträgt die Zeit bei einer Datenmenge von 32 MiB lediglich etwa 20 ms. Aber auch diese relativ geringen Übertragungszeiten können natürlich dazu führen, dass der Einsatz einer GPU mit der globalen Parallelisierung keinen Geschwindigkeitsvorteil gegenüber einer CPU erbringt, auch wenn die eigentlichen Berechnungen auf der GPU schneller ausgeführt werden als auf der CPU. Ob die GPU hier einen Geschwindigkeitsgewinn bringt oder nicht, hängt zum einen vom genauen Wert des Faktors α ab, um den die Berechnungen auf der GPU schneller sind als auf der CPU und zum anderen von der operationellen Intensität, bzw. der Laufzeit der Berechnung auf der CPU. Dies ist in den Grafiken 6.19 und 6.20 zu sehen. Die Abbildungen zeigen den Speed-Up einer GPU gegenüber einer Singlecore-CPU für die gesamte Fitnessbewertung einer Generation inklusive nötiger Datentransfers. Der Speed-Up ist in Abhängigkeit der Rechenzeit t genfit (SC), die für die Bewertung der Nachkommen einer Generation auf dem Singlecore benötigt wird, dargestellt. Außerdem ist sie für verschiedene Werte von α dargestellt. In Abbildung 6.19 wird davon ausgegangen, dass 32 MiB zwischen CPU und GPU transferiert werden müssen und in Abbildung 6.20, dass 16 KiB transferiert werden müssen. Als Zeiten für die Datentransfers wurden die gemessenen Zeiten, wie sie in Abbildung 6.18 dargestellt sind, angenommen. In Abb ist zu sehen, dass selbst bei einem großen Datenvolumen von 32 MiB, das zwischen CPU und GPU übertragen werden muss, und bei einem relativ kleinen Speed-Up von 1,5 in den Berechnungen ein t genfit (SC) von ca. 60 ms ausreicht, damit die GPU einen Vorteil gegenüber der Singlecore-CPU erbringt. Für ein α von 2 muss t genfit (SC) schon nur noch ca. 40 ms betragen. Um einen Speed-Up von 8 zu erreichen sodass die GPU schneller ist als ein 8-Kern-Multicore muss t genfit (SC) für α = 16 mindestens etwa 320 ms betragen. Für α 8 kann kein Speed-Up von 8 erreicht werden. Üblicherweise sollten deutlich weniger als 32 MiB an Daten zwischen CPU und GPU zu transferieren sein. Wenn, wie in Abbildung 6.20 gezeigt, nur 16 KiB zwischen GPU und CPU transferiert werden müssen (beispielsweise 100 Individuen mit je 20 Double-Werten), so werden die Voraussetzungen für einen Speed-Up auf der GPU noch einmal deutlich besser. Bei einem α von

129 6.3. Die globale Parallelisierung 107 Speed Up GPU/CPU(Singlecore) MiB Daten zwischen CPU und GPU transferiert α=1,5 α=2 α=4 α=8 α= t genfit (SC) [ms] Abbildung 6.19: Speed-Up für die Berechnung der Fitnesswerte der Nachkommen einer Generation inkl. Datentransfers auf der GPU im Vergleich zur Berechnung der Fitnesswerte auf einer Singlecore-CPU in Abhängigkeit von der Zeit t genfit (SC), die auf der CPU für die Berechnung benötigt wird für verschiedene Speed-Ups α um welche die reine Berechnung auf der GPU schneller erfolgt als auf der Einkern-CPU. Es wird davon ausgegangen, dass 32 MiB vor und nach der Berechnung zwischen CPU und GPU übertragen werden müssen. Speed Up GPU/CPU(Singlecore) KiB Daten zwischen CPU und GPU transferiert α=1,5 α=2 α=4 α=8 α= ,2 0,4 0,6 0,8 1 t genfit (SC) [ms] Abbildung 6.20: Speed-Up einer GPU gegenüber einer CPU wie in Abbildung 6.19, allerdings mit 16 KiB Daten, die zwischen CPU und GPU transferiert werden.

130 108 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen 1,5 muss t genfit (SC) noch nicht einmal 0,1 ms betragen, damit ein Speed-Up von 1 erreicht wird. Für α = 16 reicht ein t genfit (SC) von ca. 0,4 ms für einen Speed-Up von 8. Was diese Anforderungen in der Praxis bedeuten, soll mit folgendem Experiment gezeigt werden: Die Bewertung einer Population von Nachkommen wurde sowohl auf einem Quadcore (Intel Xeon E5620, 2,4 GHz) per OpenMP parallelisiert, als auch auf einer GPU (GTX580 mit 32 Threads pro Threadblock) mittels der globalen Parallelisierung. Alle Nachkommen x wurden parallel evaluiert mit folgender Fitnessfunktion: fit(x) = 50 i=1 x i, x R 50, (6.6) wobei mit doppelter Genauigkeit gerechnet wurde ein Individuum besteht also aus 50 Double-Werten. Diese Berechnung ist schlecht für die GPU geeignet, da die operationelle Intensität sehr gering ist (eine Addition pro 8 Byte). Abbildung 6.21 zeigt die Laufzeiten für die Bewertung in einer Generation auf der CPU und auf der GPU (inkl. Datentransfers) in Abhängigkeit der Anzahl von Nachkommen in einer Generation. Alle Laufzeiten sind dabei über 200 Durchläufe pro Nachkommenanzahl gemittelt. Es ist zu sehen, dass die Lauf- 0,002 0,0018 GPU (GTX580) CPU (Xeon E5620, 4 Kerne) 0,0016 0,0014 Laufzeit [s] 0,0012 0,001 0,0008 0,0006 0,0004 0, λ Abbildung 6.21: Laufzeit der Bewertung von Nachkommen einer Generation mit Funktion (6.6) auf CPU (4 Kerne) und GPU (inkl. Datentransfers) in Abhängigkeit der Anzahl λ von Nachkommen pro Generation. zeiten auf der CPU deutlich besser sind als auf der GPU, obwohl der Speed-Up

131 6.3. Die globale Parallelisierung 109 α für die reine Berechnung auf der GPU im Vergleich zur 4-Kern-CPU einen Wert von bis zu ca. 1,8 erreicht, wie in Abb zu sehen. Daran ändert auch 1,8 1,6 1,4 1,2 α 1 0,8 0,6 0,4 0, λ Abbildung 6.22: Speed-Up α der GPU (GTX580) gegenüber der CPU (Xeon E5620, 4 Kerne) für die reine Evaluation von Nachkommen einer Generation nach (6.6) ohne Berücksichtigung von Datentransfers in Abhängigkeit der Anzahl λ von Nachkommen pro Generation. eine Vergrößerung der Population bzw. der Anzahl von Nachkommen nichts, obwohl damit die Rechenzeit für die Bewertung von Nachkommen einer Generation zunimmt. Die operationelle Intensität ist hier einfach zu gering, um die steigende Zeit für den Transfer der Daten durch die ersparte Zeit bei den eigentlichen Berechnungen ausgleichen zu können. Außerdem wirken sich durch die geringe operationelle Intensität GPU-interne Speichertransfers stark auf die Rechenzeit auf der GPU aus und verhindern, dass höhere Werte für α erreicht werden. Die Zeiten für GPU-interne Speichertransfers sind verhältnismäßig hoch, da die GPU kaum von ihrem Cache profitiert, weil die Individuen vor jeder Bewertung neu von der CPU in den globalen Speicher der GPU transferiert werden. Auf der CPU hingegen können die Individuen während der 200 Bewertungen, die pro Nachkommenanzahl durchgeführt werden, durchweg im Cache gehalten werden (abgesehen von Verdrängung durch Cache-Konflikte). Wird die Fitnessfunktion jedoch durch folgende Funktion ersetzt: fit(x) = 50 i=1 2 x i, x R 50, (6.7)

132 110 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen ändert sich das Bild. Das ist an den Laufzeiten in Abb zu sehen. Die 0,025 GPU (GTX580) CPU (Xeon E5620, 4 Kerne) 0,02 Laufzeit [s] 0,015 0,01 0, λ Abbildung 6.23: Laufzeit der Bewertung von Nachkommen einer Generation nach (6.7) auf CPU (4 Kerne) und GPU (inkl. Datentransfers) in Abhängigkeit der Anzahl λ von Nachkommen pro Generation. operationelle Intensität ist hier durch die Zweierpotenz höher als in (6.6) und obwohl sie im Vergleich zu dem Großteil der praktischen Anwendungen noch relativ gering ist, reicht sie aus, damit die GPU einen klaren Vorteil gegenüber der CPU hat, selbst für kleine Anzahlen von Nachkommen pro Generation von ca Die höhere operationelle Intensität führt nämlich dazu, dass die Rechenzeit auf der CPU höher ist, während die Zeit zum Transferieren der Daten zwischen CPU und GPU unverändert bleibt. Damit kann auf der GPU mehr Zeit bei den Berechnungen eingespart werden und dadurch die Zeit für die Datentransfers wettgemacht werden. Abb zeigt die Rechenzeit für die Bewertung der Nachkommen einer Generation auf der CPU im Verhältnis zur Zeit für die Datentransfers zwischen CPU und GPU in Abhängigkeit der Anzahl λ von Nachkommen pro Generation für die Fitnessfunktionen (6.6) und (6.7). Sowohl die Rechenzeiten als auch die Zeiten für die Datentransfers entstammen dabei den oben beschriebenen Messungen (Abb und Abb. 6.23). Die höhere operationelle Intensität sorgt nicht nur dafür, dass die Zeit für die Transfers der Daten zwischen CPU und GPU ausgeglichen werden kann, sondern hat auch eine Steigerung von α zur Folge, da auch GPU-interne Speicher-

133 6.3. Die globale Parallelisierung fit 1 fit 2 Rechenzeit CPU /Zeit Transfer λ Abbildung 6.24: Die Rechenzeit für die Bewertung der Nachkommen einer Generation nach (6.6) (fit 1 ) und (6.7) (fit 2 ) auf der CPU im Verhältnis zur Zeit für den Transfer der Daten zwischen CPU und GPU in Abhängigkeit von der Anzahl λ von Nachkommen pro Generation. zugriffe weniger ins Gewicht fallen und zudem Speicherzugriffe besser durch Berechnungen überdeckt werden können. Dies ist in Abbildung 6.25 zu sehen α λ Abbildung 6.25: Speed-Up α der GPU (GTX580) gegenüber der CPU (Xeon E5620, 4 Kerne) für die reine Evaluation von Nachkommen einer Generation mit Fitnessfunktion (6.7) ohne Berücksichtigung von Datentransfers in Abhängigkeit der Anzahl λ von Nachkommen pro Generation.

134 112 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Aus diesen Experimenten und den vorausgegangenen Untersuchungen folgt, dass die Anforderungen an einen EA, damit er auf der GPU per globaler Parallelisierung im Vergleich zu einer (Multicore-)CPU beschleunigt werden kann, nicht hoch sind. Es werden keine Anforderungen an die genetischen Operatoren gestellt. Die wesentlichen Anforderungen sind: Die Fitnessbewertung der Nachkommen einer Generation kann auf der GPU im Vergleich zur Multicore-CPU mit einem Faktor von etwa 2, aufwärts beschleunigt werden. Dies sollte bei fast allen praktischen Fitnessfunktionen, die wenige Verzweigungen aufweisen der Fall sein. Die Bewertung der Nachkommen einer Generation sollte auf einer Einkern-CPU eine Laufzeit von mehreren ms aufweisen Die globale Parallelisierung im Cluster Bei der globalen Parallelisierung im Cluster ist ein Master-Prozess für die Erzeugung der Nachkommen in jeder Generation verantwortlich und verteilt diese auf eine gewisse Anzahl Worker, welche die Fitnesswerte der Nachkommen berechnen und diese an den Master zurückgeben. Das Verteilen der Nachkommen kann über die MPI-Funktion MPI_SCATTER geschehen und das Sammeln der Ergebnisse über die Funktion MPI_GATHER. Analog zu den Messungen der Kommunikationskosten in Abschnitt wurde mithilfe des Intel MPI Benchmarks Version gemessen, wie viel Zeit das Scatter und das Gather für verschiedene Nachrichtengrößen und verschiedene Anzahlen von beteiligten Prozessen benötigen. Die Messungen wurden sowohl unter Nutzung von 10 Gbit/s InfiniBand als auch unter Nutzung von Gigabit Ethernet durchgeführt. Für alle vier Arten von Messungen (Gather/Scatter mit InfiniBand/Ethernet) wurde jeweils über 10 einzelne Messungen gemittelt. Die Nachrichtengröße bezeichnet hier die Größe der Daten, die jeder einzelne Prozess beim Scatter erhält bzw. beim Gather versendet. Die Anzahl der Prozesse wurde von 2 bis 36 variiert. In den Abbildungen 6.26 und 6.27 sind die Ergebnisse für bestimmte Prozessanzahlen zu sehen. Die gemessenen Kommunikationszeiten sind hier um eine Magnitude größer als bei dem SendRecv-Benchmark, der bei der Untersuchung des Inselmodells vorgenommen wurde. Außerdem erfordert die globale Parallelisierung

135 6.3. Die globale Parallelisierung 113 Kommunikationszeit [µs] Proz. 4 Proz. 6 Proz. 8 Proz. 10 Proz. 12 Proz. 14 Proz. 16 Proz. 18 Proz. 20 Proz. 22 Proz. 24 Proz. 26 Proz. 28 Proz. 30 Proz. 32 Proz. 34 Proz. 36 Proz. Kommunikationszeit [µs] Proz. 4 Proz. 6 Proz. 8 Proz. 10 Proz. 12 Proz. 14 Proz. 16 Proz. 18 Proz. 20 Proz. 22 Proz. 24 Proz. 26 Proz. 28 Proz. 30 Proz. 32 Proz. 34 Proz. 36 Proz Nachrichtengröße [KiB] (a) Nachrichtengröße [KiB] (b) Abbildung 6.26: Gemessene Zeiten für (a) Scatter und (b) Gather unter Nutzung von 10 Gbit/s InfiniBand für verschiedene Anzahlen von beteiligten Prozessen und verschiedene Nachrichtengrößen. Kommunikationszeit [µs] 1.2e+06 1e Proz. 4 Proz. 6 Proz. 8 Proz. 10 Proz. 12 Proz. 14 Proz. 16 Proz. 18 Proz. 20 Proz. 22 Proz. 24 Proz. 26 Proz. 28 Proz. 30 Proz. 32 Proz. 34 Proz. 36 Proz. Kommunikationszeit [µs] 4e e+06 3e e+06 2e e+06 1e+06 2 Proz. 4 Proz. 6 Proz. 8 Proz. 10 Proz. 12 Proz. 14 Proz. 16 Proz. 18 Proz. 20 Proz. 22 Proz. 24 Proz. 26 Proz. 28 Proz. 30 Proz. 32 Proz. 34 Proz. 36 Proz Nachrichtengröße [KiB] (a) Nachrichtengröße [KiB] (b) Abbildung 6.27: Gemessene Zeiten für (a) Scatter und (b) Gather unter Nutzung von Gigabit Ethernet für verschiedene Anzahlen von beteiligten Prozessen und verschiedene Nachrichtengrößen. öfter Kommunikation als das Inselmodell. Aus diesen Gründen können die Kommunikationszeiten bei der Untersuchung der globalen Parallelisierung im Cluster nicht länger außer Acht gelassen werden. Da wir in der Lage sein wollen, die Kommunikationskosten für beliebige Anzahlen von beteiligten Prozessen und beliebige Nachrichtengrößen abzuschätzen, wurden über symbolische Regression mithilfe des Tools Eurequa [155] Funktionen t scatter, t scatter-eth, t gather und t gather-eth evolviert, welche es erlauben, die Kommunikationszeiten für beliebige Anzahlen von Prozessen und beliebige Nachrichtengrößen zu extrapolieren. Das Scatter und Gather von

136 114 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Daten der Größe n unter Beteiligung von p Prozessen wird klassischerweise als Binärbaum-Algorithmus implementiert mit einer Laufzeit von c 1 log 2 p + c 2 p 1 n mit gewissen Konstanten c p 1 und c 2, wobei c 1 log 2 p die Latenzzeit p 1 widerspiegelt und c 2 n die restliche Übertragungszeit in Abhängigkeit der p Menge zu transferierender Daten. Bezeichne m die Nachrichtengröße, dann gilt n = mp. Bei der symbolischen Regression wurden Konstanten c 1, c 2 und c 3 evolviert, sodass die Funktion t(m, p) = c 1 log 2 p + c 2 m(p 1) + c 3 (6.8) einen möglichst minimalen mittleren Fehler auf den Messdaten ergibt. Tabelle 6.1 zeigt die evolvierten Konstanten mit den daraus resultierenden mittleren und maximalen Fehlern auf den Messdaten. Für die Kommunikation mit Gigabit Ethernet ergeben sich größere Fehler als für die Kommunikation mit InfiniBand, da die Kommunikationszeiten größer sind und einen unregelmäßigeren Verlauf aufweisen, insbesondere für das Gather (siehe Abb (b)). Tabelle 6.1: Evolvierte Konstanten für die Funktionen zur Modellierung der Laufzeiten von Scatter und Gather unter Nutzung von 10 Gbit/s InfiniBand und Gigabit Ethernet sowie die daraus resultierenden mittleren und maximalen Fehler bezüglich der Messwerte. t scatter t scatter-eth t gather t gather-eth c 1 6, ,5338 9, ,5386 c 2 0, , , ,02659 c 3 4, , , ,133 mittlerer Fehler [µs] 273, , , maximaler Fehler [µs] 16618, , , Mithilfe von Eurequa konnten zwar allgemeine Funktionen evolviert werden, die nicht der Struktur von Formel 6.8 entsprechen und kleinere maximale/mittlere Fehler ergeben, jedoch weisen diese einen unrealistischen Verlauf auf dem Bereich außerhalb der Messdaten auf und wurden daher wieder verworfen.

137 6.3. Die globale Parallelisierung 115 Mithilfe der evolvierten Funktionen ist es nun möglich, die benötigte Zeit t genfit (Cluster) für die Bewertung der Nachkommen einer Generation im Cluster unter Nutzung von 10 Gbit/s InfiniBand abhängig von der Anzahl n c genutzter Singlecores im Cluster, der Größen Data in und Data out der zu verteilenden und einzusammelnden Daten sowie der Laufzeit t genfit (SC) der Bewertung einer Generation auf einem Singlecore folgendermaßen abzuschätzen: t genfit (Cluster) = t genfit(sc) n c +t scatter (n c, Data in )+t gather (n c, Data out ) (6.9) n c n c Der Speed-Up, der sich für die Bewertung einer Generation mit einem Cluster verglichen mit einem Singlecore erzielen lässt, ergibt sich dann als t genfit (SC)/t genfit (Cluster). Abbildung 6.28 zeigt diesen Speed-Up abhängig von t genfit (SC) für verschiedene Werte von n c unter der Annahme, dass vor der Bewertung 4 MiB per Scatter aufgeteilt und nach der Bewertung 16 KiB per Gather eingesammelt werden müssen. Um einen Speed-Up von 1 zu erreichen, muss t genfit (SC) für alle dargestellten Werte von n c mindestens etwa 4 ms betragen. Mit wachsendem t genfit (SC) konvergiert der Speed-Up wie zu erwarten gegen n c. Wird ein Multicore eingesetzt, so muss der Speed-Up die Anzahl der Kerne des Multicores übersteigen, damit das Cluster einen Geschwindigkeitsgewinn erbringt. Bei einem Multicore mit 8 Kernen muss t genfit (SC) dafür mindestens etwa 130 ms für n c = 10 betragen und mindestens etwa 35 ms für n c = 80. Für kleinere Werte von t genfit (SC) sollte die globale Parallelisierung kaum praxisrelevant sein. Außerdem ist die Größe der zu transferierenden Daten mit 4 MiB bzw. 16 KiB verhältnismäßig groß gewählt. Es ist davon auszugehen, dass die Größe aller Nachkommen einer Generation üblicherweise kleiner ist als 4 MiB und da nur die Fitnesswerte von den Workern zum Master transferiert werden müssen, weniger als 16 KiB per Gather eingesammelt werden müssen. Die bisherigen Untersuchungen beruhen auf den Messungen mit 10 Gbit/s InfiniBand. Wie sich der Speed-Up hingegen beim Einsatz eines langsameren Netzwerks verhält, ist in Abbildung 6.29 zu sehen. Dabei werden zur Berechnung von t genfit (Cluster) entsprechend Formel (6.9) t scatter-eth und t gather-eth statt t scatter und t gather genutzt. Somit ergibt sich eine Abschätzung des Speed- Ups, wenn im Cluster Gigabit Ethernet eingesetzt wird.

138 116 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Data in =4 MiB, Data out =16 KiB, 10 Gbit/s InfiniBand Speed Up Cluster/Singlecore n c =10 n c =20 n c =40 n c =60 n c =80 0, t genfit (SC) [ms] Abbildung 6.28: Speed-Up für die Bewertung einer Generation mit einem Cluster im Vergleich zu einem Singlecore abhängig von der Laufzeit t genfit (SC) für die Bewertung einer Generation auf dem Singlecore für verschiedene Anzahlen n c genutzter Kerne im Cluster. Für die Bewertung im Cluster müssen anfangs 4 MiB Daten per Scatter aufgeteilt werden und am Ende 16 KiB per Gather eingesammelt werden. Die benötigten Zeiten für Scatter und Gather wurden mit den evolvierten Funktionen t scatter und t gather abgeschätzt. Damit ein Speed-Up von mindestens 1 erreicht wird, muss t genfit (SC) für alle betrachteten Werte von n c mindestens etwa 30 ms betragen. Die Anforderungen an t genfit (SC), um einen Speed-Up von mindestens 8 zu erreichen, sind für n c = 80 am geringsten, nämlich dass t genfit (SC) 280 ms gelten muss. Werden nur n c = 10 Kerne im Cluster eingesetzt, muss t genfit (SC) schon mindestens 1,1 s betragen, damit ein Speed-Up über 8 erreicht wird. Also auch unter Nutzung von Gigabit Ethernet sind die Anforderungen an t genfit (SC), sodass sich im Cluster ein Geschwindigkeitsgewinn verglichen mit einem Single-/Multicore erzielen lässt, gering. Außerdem wurde wie bereits erwähnt die Größe der zu transferierenden Daten bei den Untersuchungen relativ hoch gewählt und die Mehrzahl aktueller Cluster sollte mit einem Hochgeschwindigkeitsnetzwerk wie InfiniBand ausgestattet sein. Somit kann man sagen, dass sich der Einsatz eines Clusters statt eines Single-/Multicores für die globale Parallelisierung in der Praxis üblicherweise lohnt, falls n c und die

139 6.3. Die globale Parallelisierung 117 Data in =4 MiB, Data out =16 KiB, Gigabit Ethernet Speed Up Cluster/Singlecore 10 1 n c =10 n c =20 n c =40 n c =60 n c =80 0, t genfit (SC) [ms] Abbildung 6.29: Speed-Up analog Abb. 6.28, wobei die Kommunikationszeiten im Cluster über die evolvierten Funktionen t scatter-eth und t gather-eth abgeschätzt werden. Anzahl der Nachkommen pro Generation die Anzahl der Kerne des Multicores übersteigen. Im Folgenden soll nun das Cluster mit der GPU verglichen werden. Wenn sich die Bewertung der Nachkommen einer Generation auf der GPU um den Faktor α im Vergleich zu einem Singlecore beschleunigen lässt, so ergibt sich die Zeit t genfit (GP U), die auf der GPU für die Bewertung einer Generation inklusive Datentransfers zwischen CPU und GPU benötigt wird zu: t genfit (GP U) = t genfit(sc) α + t CP U-GP U (Data in ) + t GP U-CP U (Data out ). (6.10) t CP U-GP U und t GP U-CP U sind dabei die Zeiten, die für Datentransfers zwischen CPU und GPU benötigt werden, abhängig von der Größe der In-/Output-Daten. Setzt man dafür Zeiten entsprechend der in Abb dargestellten Messwerte ein (die Werte müssen dabei halbiert werden, da Kommunikation nur in eine Richtung verläuft), so lässt sich wieder der Speed-Up abschätzen, der sich mit einem Cluster im Vergleich zu einer GPU erzielen lässt. Dieser ist für ein Cluster mit 10 Gbit/s InfiniBand in Abb abhängig von t genfit (SC) für verschiedene Werte von n c und α dargestellt. Dabei wird für Data in wieder

140 118 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen von 4 MiB und für Data out von 16 KiB ausgegangen. Wie an der Kurve für Data in =4 MiB, Data out =16 KiB, 10 Gbit/s InfiniBand Speed Up Cluster/GPU 10 1 n c =10, α=8 n c =60, α=8 n c =80, α=8 n c =10, α=20 n c =60, α=30 n c =100, α=80 n c =200, α= t genfit (SC) [ms] Abbildung 6.30: Speed-Up für die Bewertung einer Generation in einem Cluster mit 10 Gbit/s InfiniBand im Vergleich zu einer GPU abhängig von der Laufzeit t genfit (SC) für die Bewertung einer Generation auf dem Singlecore für verschiedene Anzahlen n c genutzter Kerne im Cluster und verschiedene Speed-Ups α, die sich mit der GPU für die Bewertung einer Generation im Vergleich zu einem Singlecore erzielen lassen. Für die Bewertung im Cluster müssen anfangs 4 MiB Daten per Scatter aufgeteilt werden und am Ende 16 KiB per Gather eingesammelt werden. Die benötigten Zeiten für Scatter und Gather wurden mit den evolvierten Funktionen t scatter und t gather abgeschätzt. Für die Bewertung auf der GPU müssen dieselben Daten zur bzw. von der GPU transferiert werden. Für die Transferzeiten zwischen CPU und GPU wurden die in Abbildung 6.18 dargestellten Messwerte genutzt. n c = 10, α = 20 zu sehen ist, kann das Cluster keinen Geschwindigkeitsgewinn gegenüber einer GPU erbringen, falls n c α, da die Kommunikationskosten im Cluster höher sind als die Kosten für die Datentransfers zwischen CPU und GPU. Falls jedoch n c > α gilt, so sind Geschwindigkeitsgewinne möglich, falls t genfit (SC) ausreichend groß ist. Für n c = 10, α = 8 beispielsweise muss t genfit (SC) mindestens etwa 100 ms betragen, damit im Cluster ein Geschwindigkeitsgewinn möglich ist. Für n c = 200, α = 100 muss t genfit (SC) mindestens etwa 550 ms betragen, damit die Berechnung im Cluster schneller ist als auf

141 6.3. Die globale Parallelisierung 119 der GPU und für n c = 100, α = 80 mindestens etwa 1050 ms. Allgemein kann man sagen, dass falls t genfit (SC) > 1 s und n c > α gilt, ein Geschwindigkeitsgewinn im Cluster gegenüber einer GPU zu erwarten ist. Für kleinere Werte von α bis zu 20 ist es auch ausreichend, wenn t genfit (SC) im Bereich von etwa 100 ms liegt. Wie sich der Speed-Up beim Einsatz von Gigabit Ethernet im Cluster verhält, ist in Abb zu sehen. Für n c = 10 und α = 8 muss t genfit (SC) hier Data in =4 MiB, Data out =16 KiB, Gigabit Ethernet Speed Up Cluster/GPU 10 1 n c =10, α=8 n c =60, α=8 n c =80, α=8 n c =10, α=20 n c =60, α=30 n c =100, α=80 n c =200, α=100 0, t genfit (SC) [ms] Abbildung 6.31: Speed-Up für die Bewertung einer Generation mit einem Cluster im Vergleich zu einer GPU analog Abb unter der Annahme, dass im Cluster Gigabit Ethernet genutzt wird. mindestens ca. 1 s betragen, damit ein Geschwindigkeitsgewinn im Cluster erzielt wird und mindestens etwa 10 s, falls n c = 100 und α = 80 gilt. Falls n c α gilt, ist selbstverständlich auch hier wieder kein Geschwindigkeitsgewinn zu erzielen. Aus den Untersuchungen kann man schlussfolgern, dass falls n c > α gilt und kein Hochgeschwindigkeitsnetzwerk im Cluster eingesetzt wird, t genfit (SC) im Sekundenbereich liegen sollte für Werte von α bis zu 20 und im Bereich über 10 s für größere Werte von α, um vom Cluster im Vergleich zur GPU profitieren zu können.

142 120 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Die globale Parallelisierung im Grid Die globale Parallelisierung läuft im Grid analog zum Cluster ab. Ein Master ist verantwortlich für das Verwalten der Population und das Erzeugen von Nachkommen in jeder Generation. Die erzeugten Nachkommen einer Generation werden auf mehrere Jobs im Grid aufgeteilt, wo sie parallel bewertet und anschließend eingesammelt werden, um die nächste Generation zu berechnen. Da im Allgemeinen keine direkte Kommunikation zwischen dem Master und den Jobs möglich ist, beziehungsweise sich dies nur mit großem Aufwand erreichen lässt, müssen die Jobs jede Generation neu gestartet werden. Damit ergibt sich für die Ausführung der globalen Parallelisierung ein Overhead analog dem Overhead für das Insel-Modell, wie in Abschnitt beschrieben. Der Overhead sollte auch hier wieder von Wartezeiten in den lokalen Batch- Systemen dominiert werden. Sei δt sync die Differenz der Synchronisationszeiten die im Cluster und im Grid pro Generation anfallen. Wie im letzten Abschnitt dargestellt, liegt der Aufwand für die Kommunikation im Cluster pro Generation im Millisekunden-Bereich. Damit entspricht δt sync praktisch dem im Grid anfallenden Overhead. Sei δt genfit (n c, n g ) die Differenz in den Rechenzeiten für die Bewertung der Nachkommen einer Generation im Cluster mit n c Kernen und im Grid mit n c n g Kernen. δt genfit (n c, n g ) ist somit der Gewinn, der sich im Grid für die reine Rechenzeit im Vergleich zum Cluster erzielen lässt, und lässt sich abschätzen zu: δt genfit (n c, n g ) = t genfit (SC)/n c t genfit (SC)/(n c n g ). (6.11) Für δt sync < δt genfit (n c, n g ) lässt sich ein Geschwindigkeitsgewinn im Grid verglichen mit einem Cluster erzielen. In Abbildung 6.32 ist δt genfit (n c, n g ) für verschiedene Werte von n c und n g abhängig von t genfit (SC) dargestellt. Man beachte die logarithmische Darstellung. Selbst für einen kleinen Wert von 10 für n c und mit achtmal so viel genutzten Kernen im Grid, muss t genfit (SC) mindestens etwa 11 Minuten betragen, damit der Gewinn, der sich in der reinen Rechenzeit im Grid gegenüber dem Cluster erzielen lässt, größer ist als 1 min und sich somit ein Overhead von 1 Minute im Grid kompensieren lässt. Üblicherweise ist aber davon auszugehen, dass der Overhead im Grid größer ist als 1 min. Beträgt er 10 min, muss t genfit (SC) schon mindestens etwa 115 min groß sein, damit sich das Grid gegenüber dem Cluster lohnt.

143 6.3. Die globale Parallelisierung δt genfit (n c =10,n g =8) δt genfit (n c =10,n g =2) δt genfit (n c =20,n g =8) δt genfit (n c =20,n g =2) δt genfit (n c =40,n g =8) δt genfit (n c =40,n g =2) 10 Zeit [min] 5 1 0, t genfit (SC) [min] Abbildung 6.32: Gewinn δt genfit (n c, n g ) in der reinen Rechenzeit pro Generation im Grid verglichen mit dem Cluster für verschiedene Werte von n c und n g abhängig von t genfit (SC). Für wachsende Werte von n c nehmen die Anforderungen an t genfit (SC) weiter zu. Für n c = 40 und n g = 8 beispielsweise muss t genfit (SC) mindestens ca. 45 min betragen, um einen Overhead von einer Minute im Grid kompensieren zu können und mindestens ca. 460 min für einen Overhead von 10 min. Sollten bei n c = 40 nicht achtmal, sondern nur doppelt so viele Kerne im Grid genutzt werden, muss t genfit (SC) mindestens 800 min betragen, damit sich der Einsatz des Grids statt des Clusters lohnt. Ein Vergleich zwischen Grid und GPU würde zu analogen Ergebnissen kommen wie der Vergleich zwischen Grid und Cluster. Der einzige Unterschied ist, dass statt der Anzahl n c der Kerne im Cluster, der Speed-Up α der GPU verglichen mit einer Einkern-CPU in die Untersuchungen einfließen würde. Als Schlussfolgerung lässt sich sagen, dass sich der Einsatz eines Grids für die globale Parallelisierung im Allgemeinen nur dann lohnt, wenn die Bewertung der Nachkommen einer Generation auf einem Singlecore mindestens ein bis zwei Stunden in Anspruch nimmt. Dies ist aber in der Praxis nur selten der Fall. Aus den dargestellten Zeiten aus Abb lässt sich weiterhin schließen, dass die Anzahl der Nachkommen pro Generation und damit die Anzahl der parallel nutzbaren Kerne im Grid die Anzahl der Kerne im Cluster (bzw. den

144 122 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen Speed-Up auf der GPU) mindestens um ein doppeltes übersteigen sollte, damit das Grid einen Vorteil gegenüber einem Cluster (bzw. einer GPU) erbringen kann. Andernfalls sind die Anforderungen an die Rechenzeit für die Bewertung der Nachkommen unrealistisch hoch. Die globale Parallelisierung ist für die meisten Probleme schlicht ungeeignet für die Ausführung im Grid, da sie zu feingranular ist Zusammenfassung globale Parallelisierung auf den untersuchten Architekturen Die Ergebnisse der vorangegangenen Untersuchungen zeigen, dass ein Multicore für die globale Parallelisierung im Allgemeinen nur dann einen Geschwindigkeitsgewinn gegenüber all den anderen untersuchten Architekturen erbringt, wenn entweder die Anzahl λ der pro Generation parallel zu bewertenden Nachkommen sehr gering ist, sodass sich von der höheren Parallelität auf den anderen Architekturen nicht profitieren lässt, oder aber die Bewertung der Nachkommen einer Generation nur sehr kurze Zeit benötigt, sodass der Overhead auf den anderen Architekturen zu groß ist. Die Anforderungen dafür, dass die GPU einen Vorteil gegenüber einem Multicore erbringt sind allerdings sehr gering und es ist in den meisten Fällen mit einem Geschwindigkeitsgewinn auf der GPU verglichen mit einem Multicore zu rechnen. Weiterhin haben die Untersuchungen gezeigt, dass der Kommunikations- Overhead nur einen geringen Einfluss auf die Laufzeit der globalen Parallelisierung im Cluster hat. Sollte also die Anzahl n c der im Cluster genutzten Kerne den Speed-Up α übersteigen, den die GPU für die Bewertung aller Nachkommen einer Generation gegenüber einem Singlecore erbringt und ausreichend Nachkommen pro Generation vorhanden sein, um die n c Kerne auszulasten, ist von einem Geschwindigkeitsgewinn im Cluster verglichen mit der GPU auszugehen. Der Einsatz eines Grids für die globale Parallelisierung sollte sich hingegen nur in den wenigsten Fällen lohnen. Die Anforderungen an die Laufzeit t genfit (SC) der Bewertung einer Generation auf einem Singlecore sind sehr hoch und selbst bei einer Laufzeit von mehreren Stunden ist noch nicht sicher

145 6.4. Die parallele Bewertung 123 Abbildung 6.33: Richtlinien zur Auswahl einer geeigneten Architektur für die globale Parallelisierung, abgeleitet aus den Ergebnissen der vorhergehenden Untersuchungen. n c bezeichnet dabei die Anzahl der Kerne des zur Verfügung stehenden Clusters und α ist der Speed-Up für die Bewertung der Nachkommen einer Generation auf der GPU im Vergleich zu einer Singlecore-CPU. von einem Geschwindigkeitsgewinn gegenüber einem Cluster oder einer GPU auszugehen. Abbildung 6.33 zeigt eine Zusammenfassung, unter welchen Umständen sich welche Architektur am besten für die globale Parallelisierung eignet, basierend auf den Ergebnissen der vorangegangenen Untersuchungen. Die angegebenen Werte verstehen sich als grobe Richtlinien. 6.4 Die parallele Bewertung Für die parallele Bewertung lassen sich nur schwer allgemeine Aussagen treffen. Welche Architektur sich hier am besten eignet, hängt sehr von der Art der Parallelisierung der Bewertung ab. So spielt es eine Rolle, wie viele Teiltasks

146 124 Kapitel 6: Untersuchung paralleler EAs auf verschiedenen Architekturen bei der Bewertung parallel ausgeführt werden können, wie viel Rechenzeit sie benötigen, ob bzw. wie viel zwischen den Teiltasks kommuniziert werden muss und welche Kommunikationsmuster auftreten. Bei vielen Teiltasks, die jeweils lange laufen und nur wenig Kommunikation erfordern, sollte ein Cluster am besten geeignet sein. Wenn die Teiltasks hingegen nicht lange laufen und/oder mehr Kommunikation aufweisen, scheint eine GPU im Vorteil. Ist die Anzahl der Teiltasks gering, sodass die GPU und das Cluster nicht ausgelastet werden können, ist ein Multicore vorzuziehen. Ein Grid sollte sich aufgrund der feingranularen Parallelisierung im Allgemeinen nicht für die parallele Bewertung eignen. Die Angabe aussagekräftiger unterer/oberer Schranken, ab wann sich eine Architektur mehr als eine andere lohnt, ist hier nicht möglich, da diese entscheidend von der Menge und Art der Kommunikation zwischen den Teiltasks abhängen.

147 7 Anwendungsbeispiele aus dem Bereich Entwurf miniaturisierter optischer und elektronischer Bauelemente Zur Lösung unterschiedlicher Realweltprobleme wurden im Kontext dieser Arbeit verschiedene evolutionäre Algorithmen entwickelt und eingesetzt. Um die Optimierungen zu beschleunigen, wurden die EAs parallelisiert, wobei unterschiedliche Parallelisierungsformen und unterschiedliche Hardware-Plattformen eingesetzt wurden. Im Folgenden sollen vier dieser Optimierungen beschrieben werden und erklärt werden, warum sich für die jeweilige Parallelisierungsform und Hardware entschieden wurde. Alle vier beschriebenen Optimierungen betreffen den Entwurf miniaturisierter optischer oder elektronischer Bauelemente. Es handelt sich um den Entwurf eines binären reversiblen Signed-Digit-Addierers, den Entwurf passiver und aktiver freiraumoptischer Netzwerk-Verbindung sowie den Entwurf eines strukturierten plasmonischen Wellenleiters. 7.1 Entwurf eines binären reversiblen Signed- Digit-Addierers Im Rahmen der Forschungen des Lehrstuhls für Rechnerarchitektur der FAU Erlangen-Nürnberg zu Nanocomputing wurde mittels evolutionärer Optimierung ein reversibler Signed-Digit-(SD-)Addierer entworfen [70]. Diese Optimierung soll in diesem Abschnitt als erstes Anwendungsbeispiel beschrieben werden. Nanocomputing [69] bezeichnet eine unkonventionelle Form der Rechnerarchitektur basierend auf nanoskalierten Bauelementen, welche wiederum üblicherweise auf sogenannten Nanostäben beziehungsweise Nanodrähten basieren. Im Vergleich zur klassischen CMOS-Technologie sind diese Nano-Bauelemente 125

148 126 Kapitel 7: Anwendungsbeispiele sehr dicht angeordnet und in hoher Anzahl auf einem Chip vorhanden. Die Herstellung zuverlässiger Schaltkreise basierend auf Nanocomputing stellt jedoch eine große Herausforderung dar. Daher sind Mechanismen zur Fehlererkennung und -toleranz notwendig, um Nanocomputing praktisch nutzbar zu machen. Ein Ansatz ist, die Redundanz der SD-Darstellung zu nutzen, um die Fehlertoleranz zu erhöhen und gleichzeitig reversible Logik einzusetzen, um Fehler während der Laufzeit erkennen zu können. Um die Machbarkeit zu demonstrieren, wurde ein reversibler Addierer für binäre SD-Zahlen mithilfe eines EA entworfen. In den nächsten beiden Abschnitten wird zunächst erläutert, was man unter Signed-Digit-Darstellung und unter reversibler Logik versteht. Abschnitt beschreibt den EA, welcher für den Entwurf reversibler Logik entwickelt wurde. Die Ergebnisse der Optimierung werden in Abschnitt vorgestellt und in Abschnitt werden Möglichkeiten zur Parallelisierung des EA diskutiert Signed-Digit-Repräsentation In der SD-Repräsentation (redundante Zahlendarstellung) zur Basis b werden Zahlen typischerweise mit den Ziffern { r 1, r 1 + 1,..., 0,..., r 2 1, r 2 } dargestellt mit r 1 = b 1 2 und r 2 = b 1 [165]. Das heißt, es sind also nicht nur positive, sondern auch negative Ziffern zulässig. Bei der binären SD-Darstellung (b = 2) werden Zahlen dementsprechend mit den Ziffern { 1, 0, 1} dargestellt. Eine Eigenschaft der SD-Repräsentation ist, dass es mehrere Darstellungen für ein und dieselbe Zahl gibt. Diese Redundanz kann ausgenutzt werden, um bei der Addition zweier Zahlen die Ausbreitung des Übertrags auf nur eine Stelle zu begrenzen [16]. Damit ist es möglich, zwei Zahlen in konstanter Zeit zu addieren, unabhängig von der Länge der Zahlen. Dies ist ein entscheidender Vorteil gegenüber der herkömmlichen Zahlendarstellung, bei welcher sich der Übertrag über alle Stellen ausbreiten kann und die Rechenzeit somit von der Anzahl der Stellen abhängt (linear beim Ripple-Carry- Addierer und logarithmisch beim Carry-Lookahead-Addierer). Die Nachteile der SD-Darstellung sind, dass für die Arithmetik mehr Logik benötigt wird und dass Zahlen in SD-Darstellung mehr Speicherplatz benötigen als Zahlen in herkömmlicher Darstellung. Der Nachteil des höheren Speicherbedarfs lässt sich aber weitestgehend vermeiden, wenn Zahlen in herkömmlicher Darstellung

149 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 127 abgespeichert werden und nur für die Arithmetik in SD-Darstellung umgewandelt werden. Nach der Durchführung der arithmetischen Operationen werden die Ergebnisse dann wieder in konventionelle Darstellung umgewandelt, bevor sie abgespeichert werden. Dies hat aber wiederum den Nachteil, dass die Umwandlung einer SD-Zahl in das herkömmliche 2er-Komplement eine Rechenzeit von O(n) aufweist. Wird aber eine Kette von vielen Additionen hintereinander durchgeführt, so können Zwischenergebnisse in SD-Darstellung gehalten werden und erst zum Schluss der Kette wird das Endergebnis in die herkömmliche Darstellung umgewandelt. Dies kann man sich zum Vorteil machen, um eine schnelle Arithmetik basierend auf SD-Darstellung in Spezialprozessoren zu realisieren, welche Algorithmen mit eben solchen Additions-Ketten umsetzen. Der CORDIC-(COordinate Rotation DIgital Computer-)Algorithmus [216], welcher zur Berechnung von Funktionen wie Sinus, Kosinus, Tangens, Exponentialfunktion und Logarithmus genutzt werden kann, weist beispielsweise Ketten von Additionen auf. Ercegovac et al. [64] haben die Geschwindigkeitsvorteile, die sich durch den Einsatz von SD-Darstellung und -Arithmetik bei der Umsetzung des CORDIC erzielen lassen, demonstriert. Bei der binären SD-Darstellung einer Zahl x werden pro Ziffer x i zwei Bits benötigt, welche üblicherweise als x + i und x i bezeichnet werden. Die Addition zweier SD-Zahlen erfolgt in zwei Schritten: Im ersten Schritt wird für jede Stelle i der beiden Zahlen eine Zwischensumme z i und ein Zwischenübertrag c i gebildet, was parallel über alle Stellen erfolgen kann. Anschließend wird dann für jede Stelle i die Zwischensumme z i mit dem Zwischenübertrag c i 1 der vorhergehenden Stelle addiert, wobei c 1 = 0 gesetzt wird. Die Redundanz der Darstellung erlaubt es, die Zwischensummen und Zwischenüberträge so zu wählen, dass im zweiten Schritt kein Übertrag entstehen kann. Damit kann auch der zweite Schritt über alle Stellen parallel durchgeführt werden. Um eine Reihe konventionell codierter Zahlen in einer Kette von Additionen über SD-Arithmetik zu addieren, genügen hybride SD-Additionen. Das heißt, nur einer der Operanden ist in SD-Darstellung gegeben, während der andere Operand in konventioneller Darstellung gegeben ist. Damit können die Zahlen auf die Zwischensummen aufaddiert werden, ohne sie in SD-Darstellung umwandeln zu müssen. Nur eine der beiden ersten zu addierenden Zahlen muss in SD-Darstellung umgewandelt werden (was sehr leicht vonstattengeht). Sei

150 128 Kapitel 7: Anwendungsbeispiele a der Operand in SD-Darstellung mit den Ziffern a + i a i {01, 00, 10} 1 für i = 0,..., n 1. Und sei b der Operand in konventioneller Darstellung mit den Ziffern b i {0, 1} für i = 0,..., n 1. Dann lassen sich die Ziffern der Zwischensumme z und des Zwischenübertrags c folgendermaßen bilden: z i + = 0 (7.1) zi = ((b i a i ) (b i a + i )) c + i = (a + i a i ) b i (7.2) c + i = (b i a + i ) (b i a i ) (7.3) c i = 0 (7.4) Die Ziffern der Zwischensumme z sind damit immer 1 oder 0 und die Ziffern des Zwischenübertrags sind immer +1 oder 0. Damit ist gewährleistet, dass beim zweiten Schritt der SD-Addition analog Tabelle 7.1 nicht zwei 1 oder zwei +1 zu addieren sind und somit, dass dabei kein Übertrag auftreten kann. Tabelle 7.1: Wahrheitswerttabelle für die Addition einer Ziffer z i der Zwischensumme und der vorgehenden Ziffer c i 1 des Zwischenübertrags zu der Ziffer s i der Summe im zweiten Schritt der (hybriden) SD-Addition. z i + zi c + i 1 c i 1 s + i s i Abb. 7.1 zeigt den Aufbau eines parallelen hybriden n-bit-sd-addierers. In jedem A1-Block werden dabei die Formeln (7.1) (7.4) umgesetzt und in jedem A2-Block wird die Wahrheitswerttabelle 7.1 umgesetzt. Ziel ist es, diese Blöcke A1 und A2 mittels reversibler Logik zu synthetisieren Reversible Logik Eine reversible Logik bildet eineindeutig n Eingänge auf n Ausgänge ab. Damit ist es möglich, aus den Werten an den Ausgängen auf die Werte an den Eingängen zu schließen. In den 1960er Jahren wurde das wissenschaftliche Interesse an 1 Die Ziffer 11 ist nicht definiert.

151 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 129 Abbildung 7.1: Aufbau eines hybriden n-bit-sd-addierers zur Addition einer SD-Zahl a mit einer herkömmlich codierten Zahl b. reversibler Logik durch den Wunsch, den Energieverbrauch bzw. die Wärmeentwicklung logischer Schaltungen zu reduzieren, geweckt. Irreversible Logik ist stets mit Informationsverlust verbunden. So geht beispielsweise bei einem NAND-Gatter mit zwei Eingängen und einem Ausgang ein Bit an Information verloren. Landauer [112] hat gezeigt, dass Informationsverlust auch stets mit Energieverbrauch verbunden ist. Laut dem Landauer-Prinzip wird mit jedem Bit Information, das verloren geht, eine Wärme von kt ln(2) an die Umgebung abgegeben, wobei k die Boltzmann-Konstante ist und T die Temperatur der Umgebung. Daraus folgt, dass Reversibilität eine notwendige, wenn auch nicht hinreichende Bedingung dafür ist, dass eine logische Schaltung keine Energie verbraucht. Heutzutage wird der Großteil des Energieverbrauchs durch unvollkommene Eigenschaften von Transistoren und anderen Bauteilen verursacht. Mit steigender Qualität der Fertigung könnte reversible Logik aber zukünftig interessant werden, um den Energieverbrauch von CMOS-Schaltungen auf ein Minimum zu reduzieren. Zudem spielt reversible Logik eine wichtige Rolle beim Quantencomputing [154]. Quantengatter die elementaren Operationen beim Quantencomputing sind reversibel und damit sind alle logischen Schaltungen beim Quantencomputing reversibel. Damit ist der Entwurf reversibler Schaltungen unverzichtbar, um Quantencomputing praktisch nutzbar zu machen. Die Eigenschaft reversibler Logik, dass man von den Werten der Ausgänge auf die Eingänge schließen kann, lässt sich für den Zweck der Fehlererkennung zur Laufzeit nutzen. Ob in einem reversiblen Schaltkreis Fehler aufgetreten sind, lässt sich prüfen, indem die Ausgänge als Eingänge an einen inversen Schalt-

152 130 Kapitel 7: Anwendungsbeispiele kreis angelegt werden. Die Ausgänge des inversen Schaltkreises sollten dann dieselben Werte aufweisen wie die Eingänge des ursprünglichen Schaltkreises, andernfalls ist ein Fehler aufgetreten. Thapliyal et al. [208] haben 2010 die Verwendung reversibler Logik zur Fehlererkennung demonstriert. Ein reversibler Schaltkreis setzt sich wie ein herkömmlicher Schaltkreis aus gewissen Gattern zusammen. Im Vergleich zu einem herkömmlichen Schaltkreis müssen diese Gatter jedoch reversibel sein, weshalb sonst gebräuchliche Gatter wie NAND- oder NOR-Gatter nicht verwendet werden können. Beim Entwurf reversibler Logik kommen am häufigsten die 1980 von Toffoli [210] eingeführten Gatter der sogenannten NCT-Bibliothek zum Einsatz. Dies sind die folgenden drei Gatter: NOT Das NOT-Gatter negiert lediglich den Eingang. Abbildung 7.2: Das NOT-Gatter. CONTROLLED NOT Das CONTROLLED NOT-Gatter hat zwei Eingänge und zwei Ausgänge. Der erste Eingang A wird auf den ersten Ausgang P weitergeleitet. Wenn A = 0 gilt, wird der zweite Eingang B auf den zweiten Ausgang Q weitergeleitet. Wenn A = 1 gilt, wird NOT(B) auf Q weitergeleitet. Abbildung 7.3: Das CONTROLLED NOT-Gatter. TOFFOLI (auch als CONTROLLEND CONTROLLED NOT- Gatter bezeichnet) Das TOFFOLI-Gatter hat drei Eingänge und drei Ausgänge. Die Eingänge A und B werden auf die Ausgänge P und Q weitergeleitet. Falls (A AND B) = 0 gilt, wird C auf den dritten Ausgang R weitergeleitet. Falls (A AND B) = 1 gilt, wird NOT(C) weitergeleitet. Abbildung 7.4: Das TOFFOLI-Gatter.

153 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 131 Mit diesen drei Gattern lassen sich beliebige logische Funktionen umsetzen. In der sogenannten NCTSF-Bibliothek sind zusätzlich noch die folgenden beiden Gatter enthalten: FREDKIN Bei dem FREDKIN-Gatter wird Eingang A auf Ausgang P weitergeleitet. Falls A = 0 gilt, wird B auf Q und C auf R weitergeleitet. Falls A = 1 gilt, werden die Eingänge B und C an den Ausgängen Q und R vertauscht. Abbildung 7.5: Das FREDKIN-Gatter. SWAP Das SWAP-Gatter vertauscht die Eingänge A und B an den Ausgängen P und Q. Abbildung 7.6: Das SWAP-Gatter. Van Rentergem und De Vos [213] haben Umsetzungen dieser fünf Gatter in CMOS basierend auf Pass-Transistoren vorgeschlagen. Tabelle 7.2 zeigt die dabei benötigten Transistoranzahlen für die Gatter. Das NOT-Gatter benötigt keine Transistoren, da jede Variable A mit je zwei Signalen dargestellt wird: ein Signal für A und ein Signal für A. Damit lässt sich das NOT durch ein Vertauschen der entsprechenden Signale realisieren. Tabelle 7.2: Benötigte Anzahl Transistoren für reversible Gatter nach [213]. Gatter Transistoren NOT 0 CONTROLLED NOT 8 TOFFOLI 16 FREDKIN 16 SWAP 0

154 132 Kapitel 7: Anwendungsbeispiele Eine rückkopplungsfreie logische Schaltung, welche sich nur aus reversiblen Gattern mit einem Fan-Out von genau 1 zusammensetzt, ist immer auch insgesamt reversibel. Van Rentergem und De Vos haben einen reversiblen 1-Bit- Addierer bestehend aus den oben genannten Gattern mit einer minimalen Anzahl Transistoren entworfen [213]. Der Addierer (Abb. 7.7) wurde über eine Brute-Force-Suche gefunden und setzt sich aus drei CONTROLLED NOT- Gattern, einem FREDKIN-Gatter und zwei SWAP-Gattern zusammen. Damit benötigt er 40 Transistoren in CMOS-Umsetzung. Die beiden Ausgänge Abbildung 7.7: Hinsichtlich der Transistoranzahl minimaler reversibler 1-Bit- Addierer nach [213]. Der Addierer lässt sich mit 40 Transistoren in CMOS realisieren. G 1 und G 2 sind sogenannte Garbage-Ausgänge, welche nicht zur eigentlich zu realisierenden logischen Funktion beitragen, sondern nur benötigt werden, um die Schaltung reversibel zu machen. Ein Garbage-Ausgang kommt allein dadurch zustande, dass ein 1-Bit-Addierer nur zwei Ausgänge bei drei Eingängen hat, eine reversible Schaltung aber immer genauso viele Ausgänge wie Eingänge haben muss. Der zweite Garbage-Ausgang resultiert aus dem zusätzlichen Eingang, welcher konstant auf 0 gesetzt ist. Solche konstanten Eingänge auch Ancilla-Bits genannt sind oftmals nötig, um eine Funktion in reversibler Logik umsetzen zu können. Ein reversibler 1-Bit-Addierer benötigt mindestens einen konstanten Eingang und hat somit immer mindestens zwei Garbage- Ausgänge [213]. Um analog zu [213] reversible Schaltungen, welche hinsichtlich bestimmter Kriterien optimal sind, entwerfen zu können, wurde ein EA implementiert, welcher im nächsten Abschnitt beschrieben wird.

155 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers Evolutionärer Algorithmus für den Entwurf reversibler Schaltungen Jedes Individuum des EA codiert einen reversiblen Schaltkreis. Abb. 7.8 zeigt den allgemeinen Aufbau einer reversiblen Schaltung: m Eingänge werden über m Signale durch eine Folge von n reversiblen Gattern geleitet, wodurch die m Ausgänge der Schaltung gebildet werden. Jedes der n Gatter hat dabei maximal m Ein- und Ausgänge. Ein Individuum codiert einen solchen Schaltkreis Abbildung 7.8: Allgemeiner Aufbau eines reversiblen Schaltkreises. wie in Abb. 7.9 zu sehen. k Gatter werden über je fünf Werte codiert, wobei Abbildung 7.9: Codierung eines reversiblen Schaltkreises in einem Individuum des EA. die Codelänge k ein externer Parameter des EA ist. Für jedes Gatter gibt op (0 op 4) an, um welche Art von Gatter (NOT, CONTROLLED NOT, TOFFOLI, FREDKIN oder SWAP) es sich handelt. Über adr1, adr2 und adr3 (1 adr1, adr2, adr3 m) wird angegeben, welche der m Signale die Ein- und Ausgänge des Gatters bilden. Für Gatter mit weniger als drei Ein-/Ausgängen sind adr3 und gegebenenfalls auch adr2 bedeutungslos. Ein Signal darf dabei nicht mehr als einmal als Eingang des Gatters genutzt werden. Ist dies der Fall, so ist das Gatter ungültig, was in dem Wert valid vermerkt wird, welcher bei der Bewertung des Individuums gesetzt wird. Der Wert out (1 out k) gibt an, welches das letzte genutzte Gatter der Schaltung ist. Auch er wird bei der Bewertung gesetzt und zwar so, dass sich eine möglichst gute Fitness des Individuums ergibt. Die Ausgänge dieses Gatters werden als Primärausgänge

156 134 Kapitel 7: Anwendungsbeispiele der Schaltung genutzt. Die Fitness eines Individuums gibt also immer die Güte der Schaltung an, welche aus den Gattern 1 bis out besteht, wobei nur gültige Gatter in die Bewertung einfließen. Ein Individuum setzt sich insgesamt aus 4k + 1 Integer-Werten und k Boolean-Werten zusammen. Werden CONTROLLED NOT-Gatter mit einer 0 codiert und SWAP-Gatter mit einer 1, könnte ein Individuum des EA und die entsprechende reversible Schaltung aussehen, wie in Abbildung 7.10 dargestellt. Gatter 3 ist dabei un- Abbildung 7.10: Beispiel für ein Individuum des EA und der zugehörige reversible Schaltkreis. gültig, da adr1 3 = adr2 3 = 1 gilt und Gatter 6 befindet sich nicht in der Schaltung, da out bei der Bewertung auf 5 gesetzt wurde. Die Werte von adr3 sind für alle Gatter nicht von Bedeutung, da die genutzten Gatter nur je zwei Eingänge haben. Das wichtigste Gütemerkmal einer Schaltung ist, inwiefern sie die gewünschte logische Funktion fehlerfrei umsetzt. Die logische Funktion wird dabei in Form einer Wahrheitstabelle von einer Input-Datei eingelesen. Bei der Bewertung eines Individuums werden die im Individuum codierten Gatter der Reihe nach durchgegangen und für jedes gültige Gatter wird berechnet, wie viele Bits in der Wahrheitstabelle nicht der Spezifikation entsprechen würden, wenn das jeweilige Gatter als letztes in die Schaltung einfließen würde. Wenn sich bei einem Gatter g keine fehlerhaften Bits ergeben, so wird out = g gesetzt und die restlichen Gatter werden nicht geprüft. Andernfalls werden alle k Gatter geprüft und out wird auf den Index des Gatters gesetzt, welches die kleinste Anzahl NF von fehlerhaften Bits ergibt und zuerst geprüft wurde, falls es mehrere solcher Gatter in der Schaltung gibt. Andere oft genutzte Gütemerkmale neben der Anzahl der Fehler N F sind die Anzahl GK der benötigten reversiblen Gatter, die Anzahl T K der benötigten Transistoren in CMOS-Technologie und die Quantenkosten QK. Die Quan-

157 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 135 tenkosten sind dabei ein Maß, welches 2003 von Maslov et al. [143] eingeführt wurde und angibt, wie viele elementare Quantengatter nötig wären, um eine Schaltung für das Quantencomputing umzusetzen. Bei der Bewertung eines Individuums durch den EA werden GK, T K und QK berechnet. T K wird dabei als Summe über die Transistoren der genutzten Gatter entsprechend Tabelle 7.2 berechnet. QK wird als Summe der Quantenkosten über alle genutzten Gatter berechnet. Die Quantenkosten der Gatter nach [144, 100] finden sich in Tabelle 7.3. SWAP-Gatter, welche sich am Ende der Schaltung befinden, Tabelle 7.3: Quantenkosten reversibler Gatter nach [144, 100]. Gatter Quantenkosten NOT 1 CONTROLLED NOT 1 TOFFOLI 5 FREDKIN 5 SWAP 3 fließen dabei nicht in die Berechnung mit ein, da sie nur bedeuten, dass Ausgänge vertauscht sind. Aus den Werten NF, GK, T K und QK, die sich bei der Bewertung eines Individuums I ergeben, wird die Fitness des Individuums wie folgt berechnet: k 1 NF, falls NF > 0 fit(i) = k 2 GK + k 3 T K + k 4 QK, sonst. (7.5) Ziel ist es, ein Individuum mit einem möglichst geringen Fitnesswert zu finden. Das Gewicht k 1 sollte dabei möglichst hoch gesetzt werden, damit fehlerfreie Schaltungen gefunden werden. k 2, k 3 und k 4 werden je nach Gewichtung der restlichen Optimierungskriterien GK, T K und QK gesetzt. Folgende evolutionäre Operatoren kommen zum Einsatz: Die Auswahl von Elternindividuen erfolgt über Tournament-Selektion auf fünf zufällig gewählten Individuen der Population. Die Rekombination erfolgt über One-Point- Rekombination, wobei der Schnittpunkt so gewählt wird, dass immer komplette Gatter der Elternindividuen in den Nachkommen übernommen werden und keine Gatter durchgeschnitten werden. Bei der Mutation wird jedes Gatter eines Individuums mit der Mutationswahrscheinlichkeit pm zufällig neu

158 136 Kapitel 7: Anwendungsbeispiele initialisiert. Für eine Populationsgröße µ werden in jeder Generation λ = µ Nachkommen erzeugt. Die µ besten Individuen aus der Vereinigung der alten Population und der Menge der Nachkommen bildet die Population der nächsten Generation (Truncation-Selektion). Experimentelle Evaluation des evolutionären Algorithmus anhand von Benchmark-Problemen Um den EA zu evaluieren, wurde er auf verschiedenen gängigen Benchmark- Problemen für reversible Logik ausgeführt und die Resultate mit denen aus [119], [54], [55] und [229] verglichen. Bei den Optimierungen wurden die Gewichte der Fitnessfunktion (7.5) wie folgt gesetzt: k 1 = 1000, k 2 = 50, k 3 = 1 und k 4 = 1. Damit ist das Hauptoptimierungskriterium, neben der korrekten Funktionsweise der Schaltung, die Anzahl der Gatter, wie auch bei [119], [54] und [55]. In [229] wurden GK und QK initial gleich gewichtet und die Gewichte dynamisch während der Optimierung verändert. Die Mutationsrate betrug bei allen Optimierungen 10 % und die Rekombinationsrate 90 %. Die restlichen Parameter des EA wurden für die verschiedenen Probleme variiert und finden sich im Anhang B in Tabelle B.1. Für jedes Problem wurde die Optimierung 10-mal ausgeführt und das beste Resultat vermerkt. Die Benchmark-Resultate sind in Tabelle 7.4 zu sehen. N GO bezeichnet dabei die Anzahl der Garbage-Ausgänge. Dort, wo zusätzliche Eingänge zur Umsetzung in reversibler Logik nötig waren, wurde konstant 1 für die zusätzlichen Eingänge verwendet. Die Benchmark-Probleme sind größtenteils in Form von Permutationen angegeben. Werden die Ein- und Ausgänge eines reversiblen Schaltkreises als dualcodierte Dezimalzahlen interpretiert, so realisiert der Schaltkreis nämlich aufgrund der eineindeutigen Abbildung und der gleichen Anzahl von Ein- und Ausgängen stets eine Permutation. Die Permutation (π(0)... π(2 m 1)) besagt entsprechend, dass die Schaltung eine 0 am Eingang auf π(0) am Ausgang abbildet, dass eine 1 auf π(1) abgebildet wird, usw. Die Probleme 4mod5 und graycode6 entsprechen der Spezifikation von [144] (siehe Anhang A). In [119], [54] und [55] wurden keine FREDKIN-Gatter zugelassen, dafür aber allgemeine n-tofolli-gatter mit n 2 Eingängen. Dabei wird der Eingang n negiert weitergeleitet, falls alle anderen Eingänge 1 sind und

159 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 137 Tabelle 7.4: Ergebnisse Benchmark-Optimierungen reversibler Logik. Benchmark-Problem [119] [54] [55] [229] Vorgeschlagener EA GK GK GK QK T K N GO GK QK N GO GK QK T K F ( ) * ( ) ( ) * ( ) * ( ) ( ) * ( ) * ( ) * ( ) * ( ) 1-Bit-Addierer * ( ) * 3_17 ( ) ham3 4mod * graycode sonst wird er nicht negiert weitergeleitet. Die Eingänge 1 bis n 1 werden immer nicht negiert weitergeleitet. In [229] werden weder FREDKIN-Gatter noch n-tofolli-gatter zugelassen. Daher gibt die letzte Spalte in Tabelle 7.4 an, ob unsere evolvierten Schaltungen FREDKIN-Gatter enthalten, oder nicht. Hinsichtlich des Hauptoptimierungskriteriums der Anzahl GK reversibler Gatter sind die Resultate des vorgeschlagenen Algorithmus bis auf zwei Ausnahmen (( ) und ( )) genauso gut oder besser als die Vergleichswerte. Auch hinsichtlich der Quantenkosten und der Anzahl von Transistoren sind die Resultate in den meisten Fällen besser oder gleich gut, wie die aus [55] und [229]. Ein Grund dafür ist sicherlich die Verwendung von FREDKIN-Gattern. Für das Problem ham3 wurde jedoch auch eine Schaltung ohne FREDKIN-Gatter gefunden, die weniger Gatter auf-

160 138 Kapitel 7: Anwendungsbeispiele weist als die restlichen aufgeführten Lösungen. Für den 1-Bit-Addierer wurde eine Lösung mit minimaler Anzahl von Transistoren analog Abb. 7.7 gefunden Optimierungsergebnisse Ziel ist es, mittels des EA einen reversiblen binären SD-Addierer zu entwerfen, das heißt, reversible Schaltungen für die Blöcke A1 und A2 aus Abb. 7.1 zu finden. Dazu müssen die umzusetzenden logischen Funktionen mittels einer Wahrheitswerttabelle spezifiziert werden. Der Block A1 setzt die Gleichungen (7.1) (7.4) um. Eine entsprechende Wahrheitswerttabelle, welche in reversibler Logik umgesetzt werden kann, zeigt Tabelle 7.5. Der Ausgang G ist ein Tabelle 7.5: Wahrheitswerttabelle für den ersten Schritt (A1) der SD-Addition in reversibler Logik. a + i a i b i P S c + i c i z i + zi G Garbage-Ausgang, der nötig ist, da ohne ihn Ausgangskombinationen in der Wahrheitswerttabelle mehrfach vorkommen würden, von denen sich dann nicht eindeutig auf die Eingänge schließen ließe. Da es fünf Ausgänge gibt, müssen auch fünf Eingänge vorhanden sein. Dies wird durch die zusätzlichen Eingänge P und S erreicht, welche konstant auf 0 gesetzt sind. Die Tabelle 7.5 wurde als Spezifikation der logischen Funktion für den EA genutzt. Bei den Optimierungen wurden die Gewichte der Fitnessfunktion (7.5) wie folgt gesetzt: k 1 = 1000, k 2 = 1, k 3 = 10 und k 4 = 0. Damit ist das Hauptoptimierungskriterium, neben der korrekten Funktionsweise der Schaltung, die Anzahl der Transistoren. Etliche Optimierungsläufe mit verschiedenen Optimierungsparametern ergaben wiederholt Schaltungen mit 32 Transistoren. Abb zeigt ein solches Ergebnis mit 3 Gattern. Eine niedrigere Anzahl von Gattern oder von Transistoren wurde bei den Optimierungsläufen nicht erreicht.

161 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 139 Abbildung 7.11: Evolvierte reversible Schaltung für den ersten Schritt der SD-Addition (A1) entsprechend Tabelle 7.5. Die Schaltung lässt sich mit 32 Transistoren umsetzen. Analog wurde eine reversible Schaltung für den Block A2 aus Abb. 7.1 evolviert. Die dabei genutzte Wahrheitswerttabelle zeigt Tabelle 7.6. Die Optimie- Tabelle 7.6: Wahrheitswerttabelle für den zweiten Schritt der SD-Addition (A2) in reversibler Logik. z i + zi c + i 1 c i 1 s + i s i G 1 G rungen mit dieser Wahrheitswerttabelle ergaben eine reversible Schaltung mit 24 Transistoren, wie sie in Abb zu sehen ist. Für beide Blöcke A1 und A2 Abbildung 7.12: Evolvierte reversible Schaltung für den zweiten Schritt der SD-Addition (A2) entsprechend Tabelle 7.6. Die Schaltung lässt sich mit 24 Transistoren umsetzen. werden somit insgesamt 56 Transistoren benötigt. Damit konnte gezeigt werden, dass eine reversible Umsetzung eines SD-Addierers nur 16 Transistoren mehr benötigt als ein reversibler Addierer für herkömmlich codierte Zahlen. Verglichen mit einem irreversiblen Addierer für herkömmliche Zahlen, welcher

162 140 Kapitel 7: Anwendungsbeispiele in Standard-CMOS-Technologie üblicherweise mit 28 Transistoren umgesetzt wird [7, 179, S. 253], wird die doppelte Anzahl von Transistoren benötigt Parallelisierung des EA für reversible Logik Die Optimierungen für die Benchmark-Probleme sowie für den reversiblen SD- Addierer wurden alle seriell durchgeführt, da die Rechenzeit des EA verhältnismäßig gering ist. Eine serielle Optimierung für das Benchmark-Problem ( ) mit einer Populationsgröße von 500, mit 4000 Generationen und maximal k = 50 Gattern pro Individuum benötigt beispielsweise ca. 13 s auf einer Intel Xeon 5650-CPU (2,6 GHz) und ist dabei von den durchgeführten Optimierungen eine der rechenaufwendigsten. Bei komplexeren Problemen kann der Rechenaufwand jedoch rasch steigen, sodass sich eine Parallelisierung lohnen würde. Bei der Fitnessbewertung werden alle Gatter, welche in einem Individuum codiert sind, der Reihe nach durchgegangen und für jedes Gatter werden alle Zeilen der Wahrheitswerttabelle der umzusetzenden logischen Funktion überprüft. Für jede Zeile wird berechnet, welche Outputs das Gatter liefern würde, wenn an der Schaltung Primäreingänge entsprechend der Zeile anliegen würden. Damit hängt die Dauer der Fitnessbewertung von der Anzahl der Zeilen der Wahrheitstabelle und von der maximalen Anzahl k von Gattern ab. Zudem erfordern komplexe Probleme üblicherweise auch eine höhere Anzahl an Generationen und eine größere Population bei der Optimierung als einfachere Probleme. Was wäre eine sinnvolle Parallelisierung, um die Berechnung für komplexe Probleme zu beschleunigen? Eine Parallelisierung der Fitnessfunktion erscheint nicht sinnvoll. Es wäre zwar möglich, die Berechnung für ein Gatter über die Zeilen der Wahrheitstabelle zu parallelisieren, jedoch ist davon keine nennenswerte Beschleunigung zu erwarten. Die Spalten der Wahrheitstabelle werden intern als Integer-Werte gehalten und bei der Fitnessbewertung werden bitweise logische Operationen durchgeführt. Das heißt, 32 Zeilen einer Spalte der Wahrheitstabelle werden zu einem Integer-Wert zusammengefasst und bei beispielsweise 128 Zeilen würden somit nur 4 parallel auszuführende Tasks existieren. Ein Task besteht dabei aus wenigen logischen Verknüpfungen, ist also nicht rechenintensiv. Damit kann die Beschleunigung der reinen Berechnung durch eine Parallelisierung nur kaum den Overhead kompensieren, der

163 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers 141 durch die Parallelisierung entsteht. Eine Fitnessberechnung benötigt nur eine vergleichsweise geringe Rechenzeit. Für ein komplexes Problem wie ham7 entsprechend [144] mit einer 128-zeiligen Wahrheitstabelle benötigt eine Fitnessberechnung auf einer AMD Opteron 2216HE-CPU (2,4 GHz) mit maximal k = 80 Gattern ca. 58,3 µs. Entsprechend den Richtlinien zur globalen Parallelisierung in Abb auf Seite 123, lohnt sich die globale Parallelisierung in einem Cluster mit Hochgeschwindigkeitsnetzwerk erst, wenn die serielle Bewertung einer Generation ca. 100 ms beträgt. Damit dies für das ham7 -Problem auf der AMD Opteron 2216HE-CPU der Fall ist, müssten etwa 1715 Nachkommen pro Generation bewertet werden. Abbildung 7.13 zeigt die Laufzeit der Optimierung für das ham7 -Problem abhängig von der Populationsgröße µ (die Anzahl der Nachkommen pro Generation entspricht auch µ) auf der CPU und im Cluster. Für die CPU ist die Laufzeit der seriellen Optimierung gezeigt und die Laufzeit einer per globaler Parallelisierung und OpenMP auf 4 Kernen parallelisierten Version. Die Optimierung im Cluster wurde mittels globaler Parallelisierung und MPI auf 40 Kernen (10 Knoten zu je 4 Kernen) ausgeführt. Im Cluster wird ein 10 Gbit/s InfiniBand-Netzwerk für die Kommunikation genutzt. Die gezeigten Werte sind über 10 Messungen gemittelt. Wie man sieht, trifft die Abschätzung, dass sich das Cluster ab 1715 Nachkommen lohnt, annähernd zu. Ab etwa 1500 Nachkommen ist die Optimierung im Cluster schneller als die Optimierung auf der CPU mit 4 Kernen. Allerdings wird selbst für eine Populationsgröße von 5000 nur ein Speed-Up von ca. 2 erreicht, obwohl im Cluster 10-mal so viele Kerne genutzt werden, wie auf der einzelnen CPU. Auch von der globalen Parallelisierung auf der GPU ist für den EA kein großer Speed-Up zu erwarten. Dies liegt nicht nur an der geringen Rechenzeit für die Fitnessberechnung, sondern auch daran, dass die Fitnessberechnung vergleichsweise schlecht geeignet ist für eine Ausführung auf der GPU. In einer Schleife wird über die Gatter iteriert und für jedes Gatter wird in einer Case-Anweisung entschieden, um welche Art von Gatter es sich handelt und es werden entsprechende logische Verknüpfungen ausgeführt. Damit weist die Fitnessberechnung viel Diversität auf. Gleichzeitig ist die operationelle Intensität gering, da nur wenige logische Operationen auf Integer-Werten ausgeführt werden.

164 142 Kapitel 7: Anwendungsbeispiele AMD Opteron 2216HE seriell AMD Opteron 2216HE (4 Kerne) Cluster ( 40 AMD Opteron 2216HE Kerne) Zeit [s] µ Abbildung 7.13: Laufzeit der Optimierung für das ham7 -Problem seriell und mit globaler Parallelisierung auf der CPU (AMD Opteron 2216HE-CPU) und mit globaler Parallelisierung im Cluster auf 10 AMD Opteron 2216HE-CPUs mit je 4 Kernen abhängig von der Populationsgröße µ. Die Anzahl der Generationen beträgt 100 und pro Individuum wurden 80 Gatter codiert. Das Inselmodell ist besser für die GPU und das Cluster geeignet als die globale Parallelisierung. Die genutzten evolutionären Operatoren sind gut für die GPU geeignet, wie bereits in Abschnitt gezeigt und beim Inselmodell entsteht weniger Overhead als bei der globalen Parallelisierung. Um zu evaluieren, ob auch die Fitnessbewertung ausreichend auf der GPU beschleunigt werden kann, wurde der EA auf der GPU entsprechend dem Inselmodell mit nur einer Insel parallelisiert. Eine Generation des EA wird dabei verteilt auf die gesamte GPU berechnet und die Migration entfällt. Abb zeigt die Rechenzeit auf einer GTX580-GPU für das ham7 -Problem mit maximal k = 80 Gattern, 100 Generationen und verschiedenen Populationsgrößen von 500 bis Die Werte sind über 10 Messungen gemittelt. Die Rechnungen wurden mit 128 Threads pro Threadblock durchgeführt. Außerdem zeigt Abb die Laufzeiten der seriellen und der parallelen Optimierungen auf der CPU (AMD Opteron 2216HE). Das Inselmodell auf der CPU wurde per OpenMP wie in Abschnitt beschrieben implementiert. Zum Generieren von Zufallszahlen wurde wieder ein selbst implementierter Mersenne-Twister genutzt und zum Sortieren der Population wurde die Funktion _gnu_parallel::sort des parallelen Modus der libstdc++ verwendet.

165 7.1. Entwurf eines binären reversiblen Signed-Digit-Addierers AMD Opteron 2216HE seriell AMD Opteron 2216HE (4 Kerne) Geforce GTX Zeit [s] µ Abbildung 7.14: Laufzeit der Optimierung für das ham7 -Problem auf der GPU (GTX580) und auf der CPU (AMD Opteron 2216HE) mit einem und mit vier Threads abhängig von der Populationsgröße µ. Die Parallelisierung auf CPU und GPU wurde analog dem Inselmodell mit nur einer Insel und ohne Migration vorgenommen. Die Anzahl der Generationen beträgt 100 und pro Individuum wurden 80 Gatter codiert. Wie zu sehen, läuft die Optimierung auf der GPU deutlich schneller als auf der CPU mit nur einem Kern. Für eine Populationsgröße von 5000 ist die Berechnung auf der GPU mehr als 40-mal schneller als die serielle Berechnung auf der CPU. Auch im Vergleich zur parallelen Version auf der CPU ist die Ausführung auf der GPU schneller. Für µ = 5000 wird auf der GPU im Vergleich zur CPU mit 4 Kernen ein Speed-Up von mehr als 10 erreicht. Ein solcher Speed-Up wäre im Cluster unter Nutzung von 40 Kernen nicht möglich (da die Anzahl der Kerne im Cluster nur 10-mal der Anzahl der Kerne der einzelnen CPU entspricht). Insbesondere für komplexe Probleme ist es erforderlich, den EA mehrmals auszuführen, um gute Lösungen zu erhalten. Damit stellt die parallele Mehrfachausführung im Cluster oder gar im Grid einen einfachen Weg dar, um die Gesamtrechenzeit zu reduzieren. Insgesamt lässt sich sagen, dass der EA zum Entwurf reversibler Schaltungen für kleine Probleme mit bis zu 16-zeiligen Wahrheitstabellen keiner Parallelisierung bedarf, da die Rechenzeit verhältnismäßig gering ist. Für komplexere Probleme stellt die parallele Mehrfachausführung eine geeignete Methode zur

166 144 Kapitel 7: Anwendungsbeispiele Beschleunigung dar. Falls der EA nicht mehrfach ausgeführt werden soll, stellen die globale Parallelisierung auf einer Multicore-CPU und im Cluster und das Inselmodell auf der GPU sinnvolle Alternativen dar.

167 7.2. Entwurf der Anordnung von passiven freiraumoptischen Netzwerkverbindungen Entwurf der Anordnung von passiven freiraumoptischen Netzwerkverbindungen Als zweites Anwendungsbeispiel soll der evolutionäre Entwurf eines freiraumoptischen Netzwerks betrachtet werden, welcher in Zusammenarbeit mit dem Lehrstuhl für optische Kommunikation der Fernuniversität Hagen durchgeführt wurde [123]. Dies geschah im Kontext eines Projekts der Europäischen Weltraumorganisation ESA, bei welchem Möglichkeiten untersucht werden sollten, elektronische Verbindungen zwischen Kommunikationsmodulen von Telekommunikationssatelliten durch optische Verbindungen zu ersetzen. Die Verbindungen zwischen den Kommunikationsmodulen sind in Form von Clos-Netzwerken [49] realisiert. Abb zeigt den allgemeinen Aufbau eines n n-clos-netzwerks. Es besteht aus drei Stufen von Schaltern (Switches). Im Abbildung 7.15: Struktur eines n n-clos-netzwerks. Vergleich zu einem klassischen n n-kreuzschienenverteiler benötigt ein solches Clos-Netzwerk weit weniger Kreuzungspunkte (Crosspoints). Die genaue Anzahl der benötigten Kreuzungspunkte hängt dabei von den Parametern r und k des Netzwerks ab, wobei r die Anzahl der Ein- bzw. Ausgänge pro Gatter der ersten bzw. dritten Stufe angibt und k die Anzahl der Gatter in der zweiten Stufe darstellt. Die Clos-Netzwerke der Telekommunikationssatelliten werden derzeit mit einer Bandbreite von 300 Mbit/s pro Verbindung betrieben [23] und es ist vorgesehen, die Bandbreite auf 3 6 Gbit/s zu erhöhen. Dafür eignen sich optische Verbindungen sehr gut, da sie über den Einsatz von Wellenlängenmultiplexing [33] eine sehr hohe Bandbreite erlauben und zudem weniger Gewicht

168 146 Kapitel 7: Anwendungsbeispiele aufbringen als klassische Kupferverbindungen. Das geringere Gewicht ist in dem genannten Anwendungsfall ein großer Vorteil, da somit das Gewicht des Satelliten reduziert wird und weniger Treibstoff benötigt wird, um ihn in den Orbit zu befördern. Für Distanzen über 2 cm weisen optische Verbindungen zudem den Vorteil auf, dass die Signalverschlechterung durch Dämpfung und der Energieverbrauch geringer ist als bei elektronischen Verbindungen. Abb zeigt den Aufbau eines opto-elektronischen Clos-Netzwerks. Das Schalten von Signalen erfolgt elektronisch und der Transport zwischen den Schaltern erfolgt optisch. Zur Konvertierung von elektrischen Signalen in optische Signale werden sogenannte MC-TX-Konverter genutzt und zur Rückkonvertierung kommen MC-RX-Konverter zum Einsatz. Die Konvertierung benötigt dabei ca. 5 mw pro Gbit/s und Signal. Abbildung 7.16: Aufbau eines opto-elektronischen dreistufigen Clos-Netzwerks mit elektrischen Schaltern, optischen Backplanes zur Verbindung der Schalter und MC-TX-/MC-RX-Konvertern zur Wandlung zwischen elektrischen und optischen Signalen. Werden die optischen Verbindungen freiraumoptisch umgesetzt, so bietet das den Vorteil, dass nicht darauf geachtet werden muss, dass Leitungen kreuzungsfrei verlaufen. Im Gegensatz zu elektrischen Signalen, kann es bei optischen Signalen auch nicht zu Wechselwirkungen (Crosstalk) kommen. Damit ist es über den Einsatz von Freiraumoptik möglich, die Verbindungen sehr dicht auf kleinstem Raum zu realisieren, was insbesondere für Netzwerke mit Dimen-

169 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 147 sionen von 16 und höher wichtig ist. Daher sollen die optischen Backplanes aus Abb mithilfe der sogenannten PIFSO-(Planar Integrated Free Space Optics)-Technologie [102] und kommerziell erhältlichen MT-Steckern umgesetzt werden. Bei dem PIFSO-Ansatz wird ein dreidimensionaler optischer Aufbau über eine 2D-Geometrie umgesetzt, um Kompatibilität zu planartechnisch gefertigten Halbleiterbauelementen zu erreichen. Die Vorteile gegenüber anderen freiraumoptischen Verfahren sind, dass PIFSO-Netzwerke sehr robust sind und sich gut integrieren und herstellen lassen [88]. Abb zeigt eine schematische Darstellung eines PIFSO-Netzwerks. Abbildung 7.17: Ein PIFSO-Netzwerk. Lichtstrahlen werden über eine Reihe von Eingangs-Steckern (nicht zu sehen in Abb. 7.17) in ein Substrat (z. B. SiO 2 ) eingebracht, in dem sie sich über Reflexion in Zickzack-Pfaden zu einer Reihe von Ausgangs-Steckern bewegen, wo sie das Substrat wieder verlassen. Die Stecker sind dabei auf der Oberfläche des Substrats angebracht. Abb zeigt die Draufsicht auf die Stecker eines n n-pifso-netzwerks mit n = 16. Es kommen je n Einund Ausgangsstecker zum Einsatz. Jeder dieser MT-Stecker verfügt über n Glasfasern, über welche das Licht zu dem Stecker geführt und letztendlich in das Substrat eingebracht wird, bzw. aus dem Substrat herausgeführt und vom Stecker wegtransportiert wird. Die Geometrie eines MT-Steckers ist in der Norm IEC [98] standardisiert. Der Abstand zwischen zwei benachbarten Glasfasern eines Steckers beträgt 0,25 mm und der Abstand zwischen zwei Glasfasern unterschiedlicher Stecker muss mindestens 4 mm betragen. Der Abstand zwischen einer Eingangsglasfaser und einer Ausgangsglasfaser sollte in Übertragungsrichtung nicht mehr als 100 mm betragen.

170 148 Kapitel 7: Anwendungsbeispiele Abbildung 7.18: Draufsicht auf die Stecker eines n n-pifso-netzwerks mit n = 16. Ein PIFSO-Netzwerk muss gewisse Anforderungen erfüllen, damit die Funktionalität sichergestellt und eine hohe Bandbreite möglich ist (siehe Abschnitt für Details). Zudem existiert eine Vielzahl von Entwurfsparametern, die beeinflussen, wie gut die Anforderungen erfüllt sind. Eine optimale Wahl von Werten für diese Parameter ist auf dem analytischen Wege nicht möglich. Ein EA stellt hingegen einen vielversprechenden Ansatz für die Suche nach einer optimalen Parameterkombination dar. Für das vorliegende Problem können allerdings keine Standardoperatoren, wie z. B. One-Point-Rekombination, bei der evolutionären Optimierung genutzt werden. Daher wurde ein problemspezifischer EA entwickelt, mit dem es erstmals gelungen ist, Parameter zu finden, die es erlauben, ein PIFSO-Netzwerk mit einer Bandbreite über 10 Gbit/s zu realisieren. Im nächsten Abschnitt wird zunächst das Optimierungsproblem genauer beschrieben, bevor in Abschnitt der EA beschrieben wird. Die parallele Ausführung sowie die erzielten Optimierungsergebnisse werden in Abschnitt diskutiert Problembeschreibung Abb zeigt die Seitenansicht eines Lichtstrahls in einem PIFSO-Netzwerk. Der Strahl wird an einem Punkt A mit einem bestimmten Winkel β in das Substrat eingebracht. An der Unter- und Oberseite des Substrats wird der

171 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 149 Abbildung 7.19: Seitenansicht eines Lichtstrahls in einem PIFSO-Netzwerk. Strahl dann mehrfach mit dem Winkel β reflektiert und erreicht so über eine bestimmte Anzahl n F I von Sprüngen, sogenannten Faltungsintervallen, den Punkt B, wo der Strahl das Substrat verlässt. In der Abbildung gilt n F I = 2. Sowohl die Reflexionswinkel als auch die Anzahl der Faltungsintervalle können für alle Strahlen unabhängig voneinander gesetzt werden. Die Strahlen eines Netzwerks müssen die folgenden drei Anforderungen erfüllen: 1. Der Ausgangspunkt B sollte möglichst exakt vom Strahl getroffen werden. Dies kann durch folgende Gleichung ausgedrückt werden: L AB = ( x AB ) 2 + ( y AB ) 2 =! H n F I 2 tan β. (7.6) Dabei sind x AB und y AB die Abstände zwischen den Ein- und Auskoppelpunkten in x- bzw. y-richtung. L AB ist somit die Distanz zwischen den Ein- und Auskoppelpunkten. n F I 2 H tan β Lichtstrahl zurücklegt, wobei H die Höhe des Substrats ist. ist die Distanz, die der 2. Die Längen L opt der optischen Pfade (die gestrichelte Linie in Abb. 7.19) aller Strahlen des Netzwerks sollten möglichst gleich groß sein. Somit sind die Transferzeiten nämlich möglichst gleich lang, was eine hohe Bandbreite ermöglicht. Beispielsweise verursacht ein Unterschied von 10 mm zwischen den optischen Pfaden zweier Strahlen in SiO 2 bereits einen Signalversatz von ca. 50 ps, was bei einer Bandbreite von 10 Gbit/s der halben Länge eines Signalimpulses entsprechen würde. Die optische Weglänge L opt kann für einen Strahl entsprechend folgender Formel berechnet werden: L opt = n F I 2 H sin β. (7.7)

172 150 Kapitel 7: Anwendungsbeispiele Eine Abweichung der optischen Weglänge eines Strahls von der mittleren optischen Weglänge aller Strahlen von mehr als 1 mm ist nicht tolerabel. 3. Die Reflexionswinkel aller Strahlen müssen in dem Bereich zwischen 32 und 43 liegen, um Totalreflexion zu gewährleisten und somit eine Verringerung der Lichtintensität zu vermeiden. Die Anforderung 2 ist ein Grund dafür, dass das Licht auf Zickzack-Pfaden transportiert wird. Durch eine Erhöhung oder Verringerung der Anzahl der Faltungsintervalle ist es nämlich möglich, die Länge des optischen Pfades zu erhöhen beziehungsweise zu verringern. Ziel ist es, ein möglichst hochdimensionales PIFSO-Netzwerk zu entwerfen, sodass die Anforderungen 1 3 erfüllt sind. Dafür wurde zunächst ein analytischer Ansatz (mehr Details dazu im nächsten Abschnitt) hergeleitet, der es ermöglicht, für eine gegebene Anordnung der Ein- und Ausgangsstecker die Reflexionswinkel und Anzahlen der Faltungsintervalle für alle Strahlen (im Folgenden Strahlparameter genannt) so zu bestimmen, dass die Anforderungen 1 und 2 erfüllt sind. Bei dem Ansatz wird jedoch Anforderung 3 nicht berücksichtigt, weshalb etliche der damit hergeleiteten Reflexionswinkel nicht im gewünschten Intervall liegen. Ein weiterer Ansatz war ein EA, bei welchem die Individuen die Anzahlen n F I der Faltungsintervalle der einzelnen Strahlen codieren [129]. Bei der Bewertung eines Individuums werden die Reflexionswinkel β der Strahlen abhängig von den im Individuum codierten Faltungsintervallanzahlen so gesetzt, dass die Anforderungen 1 und 3 erfüllt sind. Die Fitness eines Individuums berechnet sich bei dem EA als die Summe der Abweichungen der optischen Weglängen von der mittleren optischen Weglänge über alle Strahlen. Für ein Netzwerk mit einer Steckeranordnung, wie in Abb zu sehen, ergab dieser EA akzeptable Resultate bei denen für alle Strahlen die Abweichung der optischen Weglänge von der mittleren optischen Weglänge unter 1 mm liegt. Für höhere Dimensionen, wie (16 Ein-/Ausgangsstecker mit je 16 Glasfasern), waren die Resultate jedoch nicht mehr befriedigend. Hier ergab der EA für eine Steckeranordnung analog Abb kein besseres Resultat als Strahlenparameter mit einer Fitness von 1248,08. Damit weicht die optische Weglänge eines Strahls im Durchschnitt um 4,875 mm (1248,08 mm/256) von

173 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 151 der mittleren optischen Weglänge ab. Die Reflexionswinkel und Anzahlen der Faltungsintervalle für die Strahlen sind jedoch nicht die einzigen Parameter für ein PIFSO-Netzwerk, welche variiert werden können. Die Anordnung der Stecker muss nämlich nicht exakt wie in Abb sein, solange die bereits angesprochenen Randbedingungen für die Anordnung der Stecker eingehalten werden. Durch Variation der Steckeranordnung kann L AB die Distanz zwischen den Ein- und Auskoppelpunkten eines Strahls variiert werden, was wiederum dazu führen kann, dass bessere Strahlparameter gefunden werden können. Daher wurde die Anordnung manuell variiert und der EA auf einer Reihe verschiedener Anordnungen ausgeführt [129]. So ist es gelungen, für ein Netzwerk ein Resultat mit einer Fitness von 75,88 zu finden. Dabei lag die Abweichung der optischen Weglängen von der mittleren optischen Weglänge aber immer noch für vier Strahlen über 1 mm. Eine Steckeranordnung, welche bessere Ergebnisse ermöglicht, wurde nicht über die manuelle Variation gefunden. Die Vermutung lag jedoch nahe, dass solche Steckeranordnungen existieren. Daher wurde ein EA entworfen, welcher die Anordnung der Stecker bezüglich der Erfüllbarkeit der Anforderungen 1 3 optimiert. Dieser EA wird im nächsten Abschnitt beschrieben Der evolutionäre Algorithmus zum Entwurf passiver freiraumoptischer Netzwerke Die Individuen und die Fitnessbewertung Ein Individuum des EA repräsentiert eine Steckeranordnung. Ein einzelner Stecker kann als Rechteck abstrahiert werden, dessen Lage wiederum durch 3 Werte beschreibbar ist: Ein Punkt (x, y) (mit positiven Koordinaten) und ein Rotationswinkel α. Für ein PIFSO-Netzwerk mit 32 Steckern besteht ein Individuum also aus 32 3 = 96 Fließkommawerten. Zwischen den benachbarten Glasfasern eines Steckers wird ein Abstand von 0,25 mm angenommen und jede Glasfaser hat einen Abstand von mindestens 2 mm zum Rand des Steckers. Damit wird von Steckern ausgegangen, wie in Abb maßstabsgetreu zu sehen. Aus der Lage eines Steckers können die Positionen der Glasfasern hergeleitet werden und daraus wiederum die Positionen der Ein-

174 152 Kapitel 7: Anwendungsbeispiele Abbildung 7.20: Eine maßstabsgetreue Darstellung eines Steckers für ein Netzwerk (das heißt, 16 Glasfasern pro Stecker). Der Stecker ist an dem Punkt (x, y) positioniert und um den Winkel α rotiert. bzw. Ausgangspunkte der entsprechenden Strahlen. Die obere Grenze für die x-koordinaten der Stecker wird bei der Optimierung auf 104 (mm) gesetzt, sodass zwischen zwei Glasfasern in x-richtung maximal 100 mm liegen können. Die obere Grenze für die y-koordinaten beträgt 100 (mm). Die beschriebene Geometrie der Stecker und die oberen/unteren Grenzen wurden so gewählt, dass die Randbedingungen, welche in Abb illustriert sind, erfüllt sind. Die Fitness eines Individuums soll ausdrücken, wie gut sich die drei Anforderungen aus dem letzten Abschnitt mit der im Individuum codierten Steckeranordnung erfüllen lassen, wenn die Strahlparameter (Reflexionswinkel und Anzahlen der Faltungsintervalle) geeignet gesetzt werden. Um ein Individuum beziehungsweise eine Steckeranordnung entsprechend bewerten zu können, ist es daher nötig, geeignete Strahlparameter zu finden. Dazu könnte der im letzten Abschnitt angesprochene EA genutzt werden, wodurch sich ein geschachtelter EA ergeben würde. Da dies zu rechenintensiv ist, wird aber die ebenfalls im letzten Abschnitt bereits angesprochene analytische Methode genutzt. Wie bereits erwähnt, lassen sich damit für eine gegebene Steckeranordnung geeignete Strahlparameter finden, mit der Ausnahme, dass die Reflexionswinkel außerhalb des erlaubten Bereichs liegen können. Im Folgenden soll dies etwas näher erläutert werden: Sei n F Ii, β i, L ABi und L opti die Anzahl der Faltungsintervalle, der Reflexionswinkel, die Distanz zwischen Ein- und Ausgang und die optische Weglänge des Strahls i für 0 i n 1. Aus Gleichung (7.6) folgt, dass für ein gegebenes n F Ii die Anforderung 1 erfüllt ist, wenn der Winkel β i nach folgender Formel berechnet wird: ( ) nf Ii 2 H β i = arctan. (7.8) L ABi

175 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 153 Die zweite Anforderung ist erfüllt, wenn die optischen Weglängen aller Strahlen gleich lang sind, das heißt, L opt0 = L opti für alle 1 i n 1. Unter der Voraussetzung, dass die β i entsprechend Formel (7.8) berechnet werden, folgt aus Gleichung (7.7), dass dies äquivalent ist mit: ( sin arctan n F Ii beziehungsweise nach n F Ii ( n F Ii 2H L ABi )) = umgestellt: ( sin arctan n F I0 ( n F I0 2H L AB0 )), ( ( )) nf n F Ii = L AB i 2H tan arccos L ABi sin arctan I0 2H L AB0 2H n (7.9) F I0 für alle 1 i n 1. Also kann man für eine gegebene Anzahl n F I0 von Faltungsintervallen für Strahl 0 die restlichen n F Ii entsprechend Formel (7.9) berechnen und daraus die Reflexionswinkel entsprechend (7.8). Da die n F Ii immer ganzzahlig sein müssen, ist es gegebenenfalls nötig, das Resultat von Formel (7.9) zu runden. Nichtsdestotrotz ist es möglich, über den beschriebenen Weg alle Strahlparameter zu berechnen, sodass alle Strahlen exakt die Ausgänge treffen und dass die Abweichung der optischen Weglänge von der mittleren optischen Weglänge für alle Strahlen unter 1 mm liegt. Es ist jedoch nicht garantiert, dass die resultierenden Reflexionswinkel im erlaubten Bereich von 32 bis 43 liegen. Der eben beschriebene Weg zur Berechnung der Strahlenparameter wird wie folgt zur Bewertung eines Individuums genutzt: Bezeichne B(m) für m N das n-tupel (β 0,..., β n 1 ) von Reflexionswinkeln, welches entsprechend der obigen Formeln für n F I0 = m berechnet wurde. Sei weiterhin δ(β i ) die Abweichung des Winkels β i vom erlaubten Bereich: 32 β i, falls β i < 32 δ(β i ) = β i 43, falls β i > sonst (m) bezeichne die Summe über alle δ(β i ), die sich für B(m) ergeben: (m) = δ(β i ). β i B(m)

176 154 Kapitel 7: Anwendungsbeispiele Das heißt, für eine optimale Steckeranordnung ließe sich ein m N finden mit (m) = 0. Zusätzlich sollen die optischen Weglängen aller Strahlen möglichst gleich groß sein. Sei D(m) die maximale Abweichung der optischen Weglänge eines Strahls von der mittleren optischen Weglänge: n 1 j=0 L optj D(m) = max L 0 i n 1 opti, n wobei die L opti und L optj die optischen Weglängen sind, welche sich aus den Strahlenparametern ergeben, die wie oben beschrieben mit n F I0 = m berechnet wurden. Damit lässt sich für eine in einem Individuum I codierte Steckeranordnung und einen Wert m N für n F I0 folgende Fitnessfunktion definieren: (m), falls (m) > 0 f(i, m) =. (7.10) D(m) sonst Für Werte von m, welche in Strahlenparametern resultieren, bei denen Winkel nicht im erlaubten Bereich liegen, ist f(i, m) negativ und je höher die Abweichungen der Winkel vom erlaubten Bereich sind, umso kleinere Werte ergibt f(i, m). Falls alle Winkel im erlaubten Bereich liegen, hängt f(i, m) nur noch von den Abweichungen der optischen Weglängen von der mittleren optischen Weglänge ab und liegt im Bereich zwischen 0 (da die Abweichung der optischen Weglänge eines Strahls mit Strahlenparametern, die wie oben beschrieben berechnet wurden, kleiner 1 ist) und 100. Der Wert 100 in (7.10) wurde dabei willkürlich gewählt. Je höher f(i, m) ist, umso besser ist die in I codierte Steckeranordnung und die Strahlenparameter, die sich aus n F I0 ergeben. = m Um ein Individuum I zu bewerten, wird f(i, m) für alle gültigen Werte m von n F I0 berechnet. Ein Wert m wird dabei als ungültig angesehen, falls er entweder in ein β 0 außerhalb des erlaubten Bereichs resultiert, oder sich Formel (7.9) mit diesem m nicht lösen lässt. Formel (7.9) ist dann nicht lösbar, falls L opt0 kleiner ist, als das maximale L ABi über alle Strahlen i (da somit unmöglich alle n F Ii so gesetzt werden können, dass alle L opti gleich L opt0 sind). Sei m min bzw. m max der minimale bzw. maximale Wert des Bereichs gültiger m. Folgende Fitnessfunktion wird zur Bewertung eines Individuums I genutzt: fit(i) = max f(i, m). (7.11) m min m mmax

177 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 155 Analog zur Funktion f bedeutet ein höherer Wert von fit(i) eine höhere Güte des Individuums I und ein Individuum mit fit(i) = 100 wäre ein perfektes Individuum. Die evolutionären Operatoren Eine Schwierigkeit bei der Optimierung der Steckeranordnung stellt dar, dass Steckeranordnungen, bei welchen sich Stecker überlappen, praktisch nicht umsetzbar und somit ungültig sind. Ein Weg dieses Problem zu lösen könnte sein, Individuen, welche ungültige Steckeranordnungen codieren, bei der Optimierung zwar zuzulassen, bei der Bewertung allerdings zu bestrafen. Es hat sich allerdings gezeigt, dass bei guten Steckeranordnungen die Stecker üblicherweise sehr dicht gepackt sind. Kleinste Änderungen an der Anordnung können diese dann schon ungültig machen. Das heißt, dass gute Elternindividuen in einem Großteil der Fälle zu ungültigen Nachkommen führen würden, was die Anzahl der Bewertungen und somit den Rechenaufwand unnötig in die Höhe treiben würde. Daher wurden evolutionäre Operatoren entworfen, die sicherstellen, dass alle Individuen gültig sind. Dass bei der zufälligen Initialisierung der Startpopulation keine ungültigen Individuen erzeugt werden, wird folgendermaßen sichergestellt: Die Stecker eines Individuums werden einer nach dem anderen zufällig initialisiert. Sollte ein Stecker dabei einen der vorher initialisierten Stecker überlappen, so wird er so lange neu initialisiert, bis keine Überlappung mehr vorhanden ist. Da alle anfänglichen Testläufe mit dem ursprünglichen Gültigkeitsbereich von [0, 104] [0, 100] für die Steckerpositionen zu Resultaten führten, bei denen Eingangsstecker an niedrigen x-koordinaten und Ausgangsstecker an hohen x-koordinaten lagen, wurde der Gültigkeitsbereich für die x-koordinaten bei der Initialisierung wie folgt abgeändert: Die x-koordinaten von Eingangssteckern werden mit Werten im Intervall [0, 20] initialisiert und die x-koordinaten von Ausgangssteckern mit Werten im Intervall [84, 104]. Für die Selektion wird Tournament-Selektion auf zwei zufällig gewählten Individuen der Population genutzt. Für die Rekombination können keine herkömmlichen Operatoren wie Uniform-Rekombination, One-Point-Rekombination oder Two-Point-Rekombination genutzt werden, da mit ihnen nicht die Gültigkeit der Nachkommen si-

178 156 Kapitel 7: Anwendungsbeispiele chergestellt wäre. Stattdessen wird folgende Methode für die Rekombination genutzt, welche aus zwei Elternindividuen P 1 und P 2 zwei Nachkommen O1 und O2 erzeugt: Die Stecker eines Individuums werden fortlaufend durchnummeriert. Bei einem n n-netzwerk gibt es 2 n Stecker. Bezeichne I.c i den Stecker i des Individuums I. Bei der Rekombination wird zunächst ein Stecker c j zufällig gewählt und O1.c j wird auf P 1.c j gesetzt. Sollte P 1.c j mit Steckern P 2.c k des zweiten Elternindividuums überlappen, so werden die Stecker O1.c k ebenfalls auf P 1.c k gesetzt. Überlappen diese neu gesetzten Stecker nun wieder mit Steckern P 2.c l von P 2 und die Stecker O1.c l sind noch nicht gesetzt, so wird mit den Steckern c l rekursiv so verfahren, wie mit c k, bis in O1 ausschließlich Stecker gesetzt sind, welche nicht mit Steckern aus P 2 überlappen, die nicht ebenfalls in O1 gesetzt sind. Die gesamte Prozedur wird nun analog für O2 durchgeführt. O2.c j wird auf P 2.c j gesetzt. Überlappt P 2.c j mit Steckern P 1.c m, werden O2.c m ebenfalls auf P 2.c m gesetzt, usw. Danach kann ein ungesetzter Stecker von O1 entweder von P 1 oder P 2 gewählt werden. In beiden Fällen kann es nicht zu einer Überlappung kommen. Daher wird der erste ungesetzte Stecker c n von O1 zufällig von P 1 oder P 2 gewählt und die rekursive Prozedur wiederholt sich. Das ganze wird für die Nachkommen O1 und O2 solange wiederholt, bis alle ihre Stecker gesetzt sind. Die Rekombination soll an folgendem Beispiel verdeutlicht werden: Angenommen zwei Elternindividuen P 1 und P 2 mit Steckeranordnungen entsprechend Abb werden rekombiniert und dabei wird c 3 als erster Stecker zufällig gewählt. Damit würde O1.c 3 auf P 1.c 3 gesetzt. Da P 1.c 3 mit P 2.c 1 und Abbildung 7.21: Beispielhafte Steckeranordnung zweier Elternindividuen P 1 und P 2.

179 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 157 P 2.c 4 überlappt, werden O1.c 1 = P 1.c 1 und O1.c 4 = P 1.c 4 gesetzt. Diese neu gesetzten Stecker überschneiden sich mit keinen weiteren Steckern von P 2 und somit wird mit O2 weiter verfahren. O2.c 3 wird auf P 2.c 3 gesetzt. Da P 2.c 3 nicht mit Steckern von P 1 überlappt, werden zunächst keine weiteren Stecker von O2 gesetzt. O1 besteht zu diesem Zeitpunkt aus den Steckern (P 1.c 1,, P 1.c 3, P 1.c 4,, ). Der erste ungesetzte Stecker von O1 ist somit c 2 und wird zufällig von P 1 oder P 2 gewählt. Angenommen, es wird O1.c 2 = P 2.c 2 gesetzt. Dieser Stecker überschneidet sich mit P 1.c 6, und somit wird O1.c 6 = P 2.c 6 gesetzt. Der letzte ungesetzte Stecker von O1 ist nun c 5 und dieser Stecker werde beispielsweise von P 1 gewählt. Von O2 ist bisher nur c 3 gesetzt und der erste ungesetzte Stecker ist somit c 1. Werde dieser von P 2 gewählt, was zur Folge hat, dass auch c 3 und c 5 von P 2 gewählt werden (wobei bereits schon vorher O2.c 3 = P 2.c 3 gilt). Die Stecker von O2 sind nun (P 2.c 1,, P 2.c 3,, P 2.c 5, ). Werde O2.c 2 von P 1 gewählt. Dann muss O2.c 4 ebenfalls von P 1 gewählt werden und der letzte Stecker c 6 von O2 kann zufällig von P 1 oder P 2 gewählt werden. Angenommen, er wird von P 1 gewählt, dann besteht O2 aus den Steckern (P 2.c 1, P 1.c 2, P 2.c 3, P 1.c 4, P 2.c 5, P 1.c 6 ) und O1 aus den Steckern (P 1.c 1, P 2.c 2, P 1.c 3, P 1.c 4, P 1.c 5, P 2.c 6 ). Die entsprechenden Steckeranordnungen sind in Abb dargestellt. Abbildung 7.22: Mögliche Nachkommen der Elternindividuen aus Abb Bei der Mutation eines Individuums wird jeder Stecker des Individuums mit einer gewissen Mutationswahrscheinlichkeit mutiert. Die Mutation eines Steckers erfolgt über eine bestimmte Anzahl an Änderungen an dem Stecker. Welche und wie viele Änderungen dies genau sind, wird bei jeder Mutation per Zufall entschieden. Maximal werden drei Änderungen durchgeführt, wobei folgende Arten von Änderungen an einem Stecker möglich sind: Eine

180 158 Kapitel 7: Anwendungsbeispiele Verschiebung in x-richtung, eine Verschiebung in y-richtung, eine Rotation und ein Austausch mit einem anderen Stecker. Stecker auszutauschen mag zunächst sinnlos erscheinen, da sich die Anordnung der Stecker damit im Grunde nicht ändert. Jedoch ändern sich dadurch die Wege und deren Distanzen, die Lichtstrahlen zurücklegen müssen. Die Zuordnung der Eingangsglasfasern zu den Ausgangsglasfasern ist nämlich fix: Die i-te Glasfaser des j-ten Eingangssteckers wird immer mit der j-ten Glasfaser des i-ten Ausgangssteckers verbunden. Der Effekt eines Steckeraustauschs wird in Abb verdeutlicht. Durch Abbildung 7.23: Effekt auf die Verbindungen zwischen den Glasfasern, wenn zwei Stecker vertauscht werden. In diesem Fall werden die beiden Eingangstecker I1 und I2 eines 4 4-Netzwerks vertauscht. einen Steckeraustausch ändern sich die Distanzen L ABi zwischen den Ein- und Ausgängen für bestimmte Strahlen i. Dies kann zu geringfügigen Verbesserungen führen. Jedoch haben Testläufe gezeigt, dass die Verschiebung und die Rotation von Steckern ein höheres Potenzial für Verbesserungen aufweisen. Aus diesem Grund wird die Wahrscheinlichkeit für einen Steckeraustausch bei der Mutation auf nur 1/13 gesetzt, während die Wahrscheinlichkeit für die anderen drei Arten von Änderungen je 4/13 beträgt. Damit Stecker in den Bereichen bleiben, in denen sie wie oben beschrieben zu Anfang initialisiert wurden, findet der Austausch von Steckern nur innerhalb der Gruppe der Einbzw. Ausgangsstecker statt. Im Gegensatz zum Austausch von Steckern muss bei der Verschiebung und der Rotation darauf geachtet werden, dass keine Überlappungen auftreten. Aus diesem Grunde wird bei einer Verschiebung eines Steckers in x-richtung ein Wert x für die maximale Verschiebung in negative x-richtung ohne Überschneidung berechnet und ein Wert x + für die maximale Verschiebung in positive x-richtung ohne Überschneidung. Analog werden Werte y, y +, α und α + für die Verschiebung in y-richtung und die Rotation berechnet. Abb illustriert diese Werte an einem Beispiel. Sie werden nicht nur abhängig von benachbarten Steckern, sondern auch abhängig von den Gültigkeitsbereichen

181 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 159 Abbildung 7.24: Verdeutlichung der Werte x, x +, y, y +, α und α +, wie sie bei der Mutation des mittleren Steckers für die Verschiebung und Rotation berechnet und genutzt würden. der x- und y-koordinaten berechnet, um sicherzustellen, dass der Stecker bei der Rotation oder Verschiebung die Gültigkeitsbereiche nicht verlässt. Die Rotation und Verschiebung eines Steckers bei der Mutation wird zufällig unter Berücksichtigung der berechneten Werte vorgenommen. Der komplette EA läuft wie folgt ab: Zunächst wird eine zufällige Population von µ Individuen erzeugt, auf der anschließend g Generationen berechnet werden. In jeder Generation werden µ-mal per Selektion, Rekombination und Mutation zwei Nachkommen erzeugt, von denen der bessere sofort in die Population eingefügt wird und dort das schlechteste Individuum ersetzt, falls er besser ist als das bis dato schlechteste Individuum. Es wird also eine (µ+2)- Aktualisierungsstrategie genutzt Parallele Ausführung und Ergebnisse der Optimierung passiver freiraumoptischer Netzwerke In diesem Abschnitt sollen die Ergebnisse der Optimierungen für Netzwerke und die parallele Ausführung des EA diskutiert werden. Abb zeigt die beste Steckeranordnung für ein Netzwerk, die von Hand im Zusammenhang mit den Optimierung mit dem in Abschnitt beschriebenen EA gefunden wurde. Die Fitness dieser Anordnung entsprechend der Fitnessfunktion (7.11) beträgt -7,83. Das heißt, dass für die besten Strahlenparameter etliche Reflexionswinkel außerhalb des erlaubten Bereichs liegen

182 160 Kapitel 7: Anwendungsbeispiele Abbildung 7.25: Beste manuell gefundene Steckeranordnung. Die x-koordinate der Eingangsstecker beträgt 0 und die x-koordinate der Ausgangsstecker beträgt 95,55. Die Ausgangsstecker sind im Vergleich zu den Eingangssteckern um 4,1 mm in y-richtung versetzt. Die Fitness dieser Anordnung nach Funktion (7.11) beträgt -7,83. und die Summe der Abweichungen vom erlaubten Bereich 7,83 beträgt. Die maximale Abweichung der optischen Weglänge eines Strahls von der mittleren optischen Weglänge beträgt bei der Steckeranordnung 0,67 mm. Mithilfe des im letzten Abschnitt beschriebenen EA soll es gelingen, eine bessere Anordnung zu finden. Der Suchraum aller möglichen Steckeranordnungen ist sehr groß. Wenn man die erlaubten Intervalle für die Positionen und die Rotationswinkel der Stecker in 0,1er-Schritten diskretisieren würde, ergäbe sich eine Anzahl von ca. 2, möglichen (ggf. ungültigen) Steckeranordnungen für ein Netzwerk. Um einen Eindruck von der Schwere des zu lösenden Problems zu bekommen, wurden eine Million zufällige Individuen erzeugt und bewertet. Dies wurde zunächst ohne die Einschränkung, dass Eingangsstecker links und Ausgangsstecker rechts liegen müssen, durchgeführt. Die resultierenden Individuen hatten eine durchschnittliche Fitness von 5201,70 und die Fitness des besten Individuums betrug 3338,58. Mit der Einschränkung bei der Positionierung der Stecker betrugt die durchschnittliche Fitness 751,93 und die

183 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 161 beste Fitness 396,80. Das zeigt zum einen, dass die Einschränkung durchaus sinnvoll ist und zum anderen, dass eine simple Zufallssuche kaum eine akzeptable Steckeranordnung liefern kann. Alle Anordnungen, die bei der zufälligen Initialisierung erzeugt wurden, waren deutlich schlechter als die von Hand gefundene Anordnung entsprechend Abb Der evolutionäre Algorithmus wurde zunächst 20-mal für ein Netzwerk ausgeführt. Die Populationsgröße betrug dabei 1000, die Rekombinationswahrscheinlichkeit 90 % und die Mutationswahrscheinlichkeit 20 %. Bei jedem Durchlauf wurden (seriell) 2000 Generationen auf einem AMD Opteron 2435 mit 2,6 GHz und 64 GiB RAM berechnet. Der durchschnittliche Optimierungsverlauf dieser Optimierungen ist in Abb zu sehen. In zwei der 20 Durch Fitness Generation Abbildung 7.26: Durchschnittlicher Optimierungsverlauf für ein Netzwerk gemittelt über 20 Durchläufe. Die Optimierungen wurden mit einer Populationsgröße von 1000, mit einer Rekombinationswahrscheinlichkeit von 90 % und einer Mutationswahrscheinlichkeit von 20 % durchgeführt. Pro Optimierungsdurchlauf wurden 2000 Generationen berechnet. läufe wurden Steckeranordnungen gefunden, bei denen alle Reflexionswinkel im erlaubten Bereich lagen. Das beste gefundene Resultat hatte eine Fitness von 50,54. Die maximale Abweichung der optischen Weglänge eines Strahls von der mittleren optischen Weglänge beträgt bei diesem Resultat 0,495 mm. Das schlechteste Resultat von den 20 Durchläufen hatte eine Fitness von 9,62. Damit ist der Algorithmus also in der Lage, Steckeranordnungen mit dazugehörigen Strahlenparametern zu finden, sodass alle Reflexionswinkel im erlaubten

184 162 Kapitel 7: Anwendungsbeispiele Bereich liegen und zusätzlich die maximale Abweichung einer optischen Weglänge von der mittleren optischen Weglänge kleiner ist, als bei der manuell gefundenen Steckeranordnung entsprechend Abb Die durchschnittliche Laufzeit eines Optimierungslaufs betrug 198 min. Ausgehend von den Ergebnissen der seriellen Optimierungen erschien es wahrscheinlich, dass sich mit dem EA bessere Ergebnisse erzielen lassen, wenn die Populationsgröße und/oder die Anzahl der berechneten Generationen erhöht wird. Dies würde aber die ohnehin schon hohe Laufzeit nochmals beträchtlich erhöhen. Daher wurde die Optimierung mit einer größeren Population und mehr Generationen parallel ausgeführt. Die globale Parallelisierung ist für den EA nicht sinnvoll, da durch die (µ+2)-aktualisierungsstrategie immer nur zwei Nachkommen parallel bewertet werden können. Daher wurde das Inselmodell mit einer Ringtopologie als Parallelisierungsform gewählt, welches sowohl in einem Grid als auch in einem Cluster ausgeführt wurde. Eine GPU ist wegen der (µ + 2)-Aktualisierungsstrategie als Plattform ungeeignet. Das eingesetzte Grid besteht aus zwei Clustern mit je 40 Kernen (AMD Opteron 2216HE, 2,4 GHz). In dem einen Cluster kommt Slurm als Batch- System zum Einsatz und in dem anderen die Oracle Grid Engine. Beide Cluster sind über Globus erreichbar. Für die parallele Ausführung des EA in dem Grid wurde Frog-EA (siehe Abschnitt 5) eingesetzt. Zum Vergleich wurde der EA unter Nutzung nur eines der beiden Cluster (das Cluster unter Kontrolle der Oracle Grid Engine) parallel über MPI ausgeführt. Die Kommunikation in dem Cluster erfolgt über 10 Gbit/s InfiniBand. Tabelle 7.7 zeigt die genutzten Konfigurationen für das Inselmodell auf beiden Plattformen. Die Gesamtzahl der Individuen ist für beide Plattformen gleich. Im Cluster werden sie jedoch in 40 Inseln unterteilt, welche auf 40 Kernen berechnet werden und im Grid werden sie in 60 Inseln unterteilt, welche auf 60 Kernen berechnet werden. Die Rekombinationswahrscheinlichkeit und die Mutationswahrscheinlichkeit betrugen wie bei der seriellen Ausführung 90 % bzw. 20 %. Auf beiden Plattformen wurden je 5 Optimierungen durchgeführt. Laut den Richtlinien zum Inselmodell in Abb auf Seite 104, sollte t gen (SC) #gens mig /n c > 10 min sein, damit ein Grid gegenüber einem Cluster einen Vorteil erbringen kann. Die serielle Laufzeit einer Generation auf den insgesamt Individuen auf einem Kern des Grids beziehungsweise Clusters,

185 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 163 Tabelle 7.7: Genutzte Konfigurationen für das Inselmodell bei den Ausführungen im Grid und im Cluster. Parameter System Grid Cluster Inseln Individuen pro Insel Migrationsintervalle Generationen pro Migrationsintervall Migranten pro Insel und Intervall und damit t gen (SC), beträgt etwa 16,5 min. Damit ist t gen (SC) #gens mig /n c etwa 124 min, also deutlich höher, als 10 min. Zusätzlich muss die Anzahl der Inseln bzw. der genutzten Kerne im Grid noch ausreichend hoch sein. Laut den Richtlinien sollte #inseln > 1/(1/n c (10 min)/(t gen (SC) #gens mig )) gelten. Da die Laufzeit eines Migrationsintervalls sehr hoch ist, bedeutet das, dass es ausreichen sollte, wenn im Grid mindestens 44 Kerne genutzt werden, damit ein Geschwindigkeitsgewinn im Vergleich zum Cluster erzielt werden kann. Dies ist mit 60 Kernen im Grid erfüllt. Es ist also davon auszugehen, dass die Ausführung im Grid schneller ist als im Cluster. Dies ist auch der Fall, wie man an den durchschnittlichen Laufzeiten in Abb sehen kann. Jedoch ist die Ausführung im Grid nicht 1,5-mal so schnell wie im Cluster, obwohl 1,5-mal so viele Kerne wie im Cluster zum Einsatz kamen. Daran lässt sich erkennen, dass ein nicht unwesentlicher Overhead bei der Ausführung im Grid entsteht, obwohl die Wartezeiten durch die Batch-Systeme bei den Optimierungen vergleichsweise gering waren, da die Cluster des Grids zu diesem Zeitpunkt nicht für andere Berechnungen genutzt wurden. Die durchschnittliche Laufzeit im Grid betrug etwa 24,5 h, was ca. 7,7-mal so viel ist, wie die durchschnittliche Laufzeit der seriellen Optimierungen. Allerdings wurden bei den parallelen Optimierungen im Vergleich zu den seriellen Optimierungen auch 7,5-mal so viele Generationen auf 60-mal mehr Individuen berechnet. Obwohl die Laufzeiten im Grid besser waren als im Cluster, ergaben die Optimierungen im Cluster leicht bessere Ergebnisse als im Grid. Abb zeigt die durchschnittlichen Optimierungsverläufe im Cluster und im Grid.

186 164 Kapitel 7: Anwendungsbeispiele Laufzeit [s] Cluster Grid Abbildung 7.27: Durchschnitte und Standardabweichungen über die Laufzeiten von je fünf parallelen Optimierungen in Grid und Cluster über das Inselmodell mit Konfigurationen entsprechend Tabelle Cluster (40 Inseln à 1500 Individuen) Grid (60 Inseln à 1000 Individuen) Fitness Migrationsintervall Abbildung 7.28: Durchschnittliche Verläufe der Optimierungen in Grid und Cluster inkl. Standardabweichungen von Migrationsintervall 5 bis 50. Die beste Steckeranordnung wurde bei einer der Optimierungen im Cluster gefunden und hat eine Fitness von 56,644. Damit beträgt die maximale Abweichung der optischen Weglänge eines Strahls von der mittleren optischen Weglänge über alle Strahlen bei dieser Steckeranordnung 0,434 mm. Im Vergleich zum besten Ergebnis der seriellen Ausführungen stellt dies eine Verbesserung von über 12 % dar, die durch die parallele Ausführung erreicht wurde. Alle 10 durchgeführten parallelen Optimierungsläufe ergaben Ergebnisse, welche besser sind als das beste Ergebnis der 20 seriellen Optimierungen.

187 7.2. Entwurf passiver PIFSO Netzwerkverbindungen 165 Üblicherweise wird davon ausgegangen, dass ein Signalversatz von bis zu 10 % der Länge eines Signalimpulses akzeptabel ist. Das heißt, dass die beste gefundene Steckeranordnung eine Bandbreite von ca. 45 Gbit/s erlauben würde 2. Abb zeigt die entsprechende Steckeranordnung mit und ohne Lichtstrahlen zwischen den Ein- und Ausgängen. (a) (b) Abbildung 7.29: Die beste bei den Optimierungen gefundene Steckeranordnung für ein passives Netzwerk in PIFSO-Technologie (a) Ohne Lichtstrahlen. (b) Mit allen Lichtstrahlen zwischen Ein- und Ausgängen. Die Fitness der Anordnung beträgt 56,644, was eine maximale Abweichung von 0,434 mm von der mittleren optischen Weglänge bedeutet. Mithilfe des beschriebenen EA und seiner parallelen Ausführung konnte letztendlich gezeigt werden, dass es möglich ist, ein kleinskaliertes freiraumoptisches passives Netzwerk in PIFSO-Technologie zu realisieren, welches die Verbindung von 256 Eingängen mit 256 Ausgängen erlaubt und mit einer hohen Bandbreite betrieben werden kann. Aufbauend auf diesen Ergebnissen sollte als nächster Schritt ein aktives Netzwerk in PIFSO-Technologie entworfen werden, was in dem folgenden Kapitel behandelt wird. 2 Ausgehend von 5 ps Signalversatz pro 1 mm Abweichung in der Länge der optischen Pfade in SiO 2.

188 166 Kapitel 7: Anwendungsbeispiele 7.3 Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks Das im letzten Abschnitt beschriebene freiraumoptische Netzwerk hat einen entscheidenden Nachteil: Die optischen Verbindungen sind passiv. Das Schalten der Verbindungen erfolgt in der elektronischen Domäne. In einem mehrstufigen Clos-Netzwerk sind daher Konvertierungen zwischen optischen und elektronischen Signalen erforderlich, was zu einem hohen Energieverbrauch führt. Daher bestand der nächste Schritt darin, ein aktives freiraumoptisches Netzwerk basierend auf PIFSO-Technologie zu entwerfen [124, 128]. Dies wurde wiederum mithilfe eines EA durchgeführt und soll in diesem Abschnitt beschrieben werden. Der grundlegende Aufbau des aktiven freiraumoptischen Netzwerks wurde vom Lehrstuhl für optische Kommunikation der Fernuniversität Hagen entworfen und kombiniert den PIFSO-Ansatz mit Mikrospiegelarrays (Digital Mirror Devices) (Abb. 7.30(a)). Wie beim PIFSO-Ansatz üblich, werden Lichtstrahlen über optische Stecker an der Oberfläche eines Substrats in das Substrat eingebracht bzw. aus dem Substrat ausgeführt. Für das aktive Netzwerk sollen dabei keine MT-Stecker wie bei dem passiven Netzwerk eingesetzt werden, sondern neuartige sogenannte Fasermatrixstecker (fibermatrix connectors), wie in Abb. 7.30(b) zu sehen. In der Abbildung sind die Ein- bzw. Ausgänge des Steckers matrixförmig angeordnet. Sie können aber auch beliebig anders platziert werden, was ein großer Vorteil dieses Steckertyps ist. Licht, welches über optische Fasern zu den Eingängen des Netzwerks transportiert wird, wird über diffraktive Gitter oder refraktive Mikrolinsenarrays (Abb. 7.30(c)) in mehrere Strahlen (so viele, wie Ausgänge existieren) aufgespalten, bevor es in das Substrat eintritt. An der Unterseite des Substrats treffen die Strahlen auf ein Mikrospiegelarray. Dies ist ein quadratisches 1 cm 2 großes Feld von kleinen Spiegelelementen. Die Spiegel können unabhängig voneinander in zwei verschiedene Positionen (bzw. Kippwinkel) geschaltet werden. Ziel ist es, eingehende Strahlen über das Schalten der Spiegel auf die Ausgänge zu schalten. Dafür ist es erforderlich, dass die Strahlen, welche an einer Eingangsposition eingehen, über Spiegel zu den Ausgängen reflektiert werden können, wobei jeder dieser Spiegel einen der beiden möglichen Kippwinkel aufweist. Zudem

189 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 167 dürfen die Strahlen keinen Ausgang treffen, wenn diese Spiegel in den entsprechend anderen Kippwinkel geschaltet werden. (a) (b) (c) Abbildung 7.30: (a) Ein Mikrospiegelarray. Auf der Oberfläche befindet sich ein Feld von Spiegeln, welche über elektrostatische Felder unabhängig voneinander in zwei verschiedene Kippwinkel geschaltet werden können. (b) Fasermatrixstecker mit 16 optischen Fasern. Die Fasern können beliebig angeordnet werden. (c) Mikrolinsenarray, welches als Strahlteiler eingesetzt werden kann. Wie bereits in Abschnitt 7.2 beschrieben, sind PIFSO-Netzwerke sehr robust, lassen sich gut integrieren und gut herstellen. Zudem sind Mikrospiegelarrays kostengünstige Massenprodukte, welche beispielsweise in Videoprojektoren zum Einsatz kommen. Damit eignet sich der beschriebene Ansatz für ein aktives freiraumoptisches Netzwerk gut für die praktische Umsetzung. Die Frage ist, wie die Ein- und Ausgänge zu platzieren sind und die eingehenden Lichtstrahlen genau zu teilen sind, sodass möglichst viele Eingänge auf möglichst viele Ausgänge geschaltet werden können. Dieses Problem konnte nicht auf dem analytischen Wege gelöst werden und daher wurde wieder ein EA für die Lösung des Problems eingesetzt. Der nächste Abschnitt beschreibt zunächst das zu lösende Optimierungsproblem genauer, bevor der eingesetzte EA in Abschnitt beschrieben wird. In Abschnitt werden die Parallelisierung des EA und die Optimierungsergebnisse diskutiert Optimierungsproblem Abb illustriert einen Strahl des Netzwerks. Er tritt am Punkt P 1 mit Eintrittswinkeln β 1 in der x-z-ebene und γ 1 in der x-y-ebene in das Substrat ein. Am Punkt P 2 auf der Unterseite des Substrats wird er von einem Spiegel

190 168 Kapitel 7: Anwendungsbeispiele mit einem Kippwinkel α ( 12 oder +12 ) in der y-z-ebene reflektiert. Damit ergeben sich neue Winkel β 2 und γ 2, mit welchen der reflektierte Strahl am Punkt P 3 das Substrat verlässt. Abbildung 7.31: Ein Strahl des aktiven PIFSO-Netzwerks aus drei verschiedenen Perspektiven. Er tritt am Punkt P 1 in das Substrat ein, wird am Punkt P 2 an einem Spiegel mit Kippwinkel α reflektiert und verlässt das Substrat an Punkt P 3. Die grauen Flächen dienen nur der Verdeutlichung der verschiedenen Winkel und sind nicht Teil des Netzwerks. Für gegebene P 1 (x 1, y 1, z 1 ), β 1 und γ 1 lassen sich die Koordinaten x 2 und y 2 von P 2 wie folgt berechnen: und x 2 = x 1 y 2 = y 1 H tan (β 1 ) (7.12) H tan(β 1 ) tan(γ 1), (7.13) wobei H die Höhe des Substrats darstellt (z 1 = z 3 = H und z 2 = 0). Abhängig von α ergeben sich die Winkel β 2 und γ 2 zu: und β 2 = arctan(tan(β 1 ) ( cos(2α)) + tan(γ 1 ) ( sin(2α))) (7.14) γ 2 = arctan(tan(β 1 ) ( sin(2α)) + tan(γ 1 ) (cos(2α))). (7.15) Die Koordinaten x 3 und y 3 von P 3 folgen aus folgenden Gleichungen: x 3 = x 2 + H tan(β 2 ) (7.16)

191 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 169 y 3 = y 2 + H tan(β 2 ) tan(γ 2). (7.17) Die angeführten Gleichungen lassen sich umstellen, um β 1 und γ 1 für gegebene Ein- und Ausgangspunkte P 1 und P 3 und einen gegebenen Kippwinkel α zu berechnen. Dies ergibt eine quadratische Gleichung (siehe Anhang C für Details). Für einen gegebenen Kippwinkel und gegebene Ein- und Ausgangspositionen existieren somit maximal zwei Strahlen, welche den Eingang mit dem Ausgang verbinden und dabei von einem Spiegel mit dem gegebenen Kippwinkel reflektiert werden. Oder anders ausgedrückt: Für gegebene P 1, P 3, und α existieren maximal zwei mögliche Punkte P 2. Da es nur zwei mögliche Kippwinkel gibt ( 12 oder +12 ), existieren immer nur maximal vier Strahlen, über welche ein Eingang mit einem Ausgang verbunden werden kann zwei Strahlen für den einen Kippwinkel und zwei Strahlen für den anderen Kippwinkel. Damit existieren für ein gegebenes Ein-/Ausgangs-Paar immer nur maximal vier gültige Paare von Eingangswinkeln β 1 und γ 1. An jedem Eingang wird ein eintreffender Strahl in so viele Strahlen aufgeteilt, wie das Netzwerk Ausgänge besitzt. Damit das Aufteilen technisch realisierbar ist, müssen die Eingangswinkel der Strahlen folgende Bedingung erfüllen: Angenommen, die Strahlen eines Eingangs sind aufsteigend nach ihren Eingangswinkeln β 1 sortiert, dann müssen die Differenzen zwischen den Eingangswinkeln aufeinander folgender Strahlen alle möglichst gleich groß sein. Analog gilt dies auch für den Winkel γ 1. Die Strahlen eines Eingangs sollen also möglichst gleichmäßig aufgefächert sein. Das heißt, falls n Strahlen b 1,..., b n existieren, um einen Eingang mit allen Ausgängen verbinden zu können und (β 1 1,..., β n 1 ) und (γ 1 1,..., γ n 1 ) die Folgen der Eingangswinkel sind, wobei β i 1 und γ i 1 zu Strahl b i gehören und β i 1 β j 1 für i j gilt, dann sollen die folgenden Gleichungen gelten: und (β 2 1 β 1 1) = (β 3 1 β 2 1) =... = (β n 1 β n 1 1 ) (7.18) (γ 2 1 γ 1 1) = (γ 3 1 γ 2 1) =... = (γ n 1 γ n 1 1 ). (7.19) Neben dieser Bedingung existieren noch gewisse geometrische Restriktionen: Da ein Strahl einen gewissen Durchmesser aufweist, trifft er ein Feld von bis zu Spiegeln (was einer Fläche von ca. 0,1 0,1 mm 2 entspricht). Ein

192 170 Kapitel 7: Anwendungsbeispiele Spiegel darf nicht von mehr als einem Strahl gleichzeitig getroffen werden. Andernfalls wäre es nicht möglich, die Strahlen, welche den Spiegel treffen, unabhängig voneinander zu schalten. Treffen also zwei Strahlen b i und b j an den Punkten P2 i und P j 2 auf den Untergrund des Substrats, so muss zwischen diesen Punkten ein Abstand von mindestens 0,1 mm liegen. Weiterhin folgt aus den Eigenschaften der einzusetzenden Fasermatrixstecker, dass zwischen allen Ein- und Ausgangspositionen eine Distanz von mindestens 0,25 mm liegen muss. Das Optimierungsproblem besteht nun darin, eine Anordnung für das Netzwerk zu finden, sodass alle genannten Bedingungen erfüllt sind. Die Grundidee ist, geeignete Ein- und Ausgangspositionen (mit Abständen von mindestens 0,25 mm untereinander) zu finden, sodass alle Eingänge mit allen Ausgängen über Strahlen verbunden werden können und die Bedingungen bezüglich der Eingangswinkel und den Punkten P 2 an der Unterseite des Substrats erfüllt sind. Zur Lösung des Problems wurde ein memetischer EA (siehe auch Abschnitt 2.10 zu memetischen EAs) eingesetzt, wie er im nächsten Abschnitt beschrieben ist Der evolutionäre Algorithmus zum Entwurf des aktiven freiraumoptischen Netzwerks Ein Individuum des EA repräsentiert eine Anordnung der Ein- und Ausgänge des Netzwerks. Die Position eines Ein- bzw. Ausgangs wird dabei über zwei Double-Werte codiert, welche für die x- bzw. y-koordinate der Position stehen. Ein Individuum für den Entwurf eines n n-netzwerks besteht demnach aus 4n Double-Werten. Bei der Berechnung der Fitness eines Individuums wird entschieden, über welche Strahlen die im Individuum codierten Ein- und Ausgangspositionen verbunden werden sollen. Wie bereits beschrieben, kann ein Ein-/Ausgangs-Paar über maximal vier Strahlen verbunden werden. Bei der Optimierung werden jedoch nur zwei Strahlen berechnet ein Strahl, welcher von einem Spiegel mit Kippwinkel +12 reflektiert wird und ein Strahl, welcher von einem Spiegel mit Kippwinkel 12 reflektiert wird. Dies lieferte bessere Optimierungsergebnisse, als wenn für jeden Kippwinkel beide Strahlen berücksichtigt werden.

193 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 171 Insbesondere wurden die Gleichungen 7.18 und 7.19 auf diese Weise besser erfüllt. Details zur Berechnung eines Strahls für einen gegeben Kippwinkel finden sich in Anhang C. Für jede mögliche Kombination eines Eingangs mit einem Ausgang werden bei der Bewertung beide Strahlen zur Verbindung berechnet und einer der beiden Strahlen wird für die Verbindung ausgewählt. Sollte einer dieser Strahlen am Untergrund des Substrats nicht auf das Mikrospiegelarray treffen, so wird er nicht ausgewählt. Sollten beide Strahlen nicht auf das Mikrospiegelarray treffen, so wird die Ein-/Ausgangs-Kombination als ungültig gekennzeichnet, da sie nicht durch einen gültigen Strahl verbunden werden kann (genauer gesagt, durch keinen der beiden berücksichtigten Strahlen). Wenn beide Strahlen gültig sind, wird der Strahl für die Verbindung per Zufall gewählt. Abb stellt die drei möglichen Beziehungen zwischen einer Ein- und einer Ausgangsposition dar. (a) (b) (c) Abbildung 7.32: Die drei möglichen Beziehungen zwischen einer Ein- und einer Ausgangsposition. (a) Beide Strahlen, die potenziell zur Verbindung des Eingangs mit dem Ausgang genutzt werden können, treffen nicht auf das Mikrospiegelarray. Damit lassen sich die Strahlen nicht umsetzen und das Ein- /Ausgangs-Paar wird als ungültig gekennzeichnet. (b) Der Eingang kann mit dem Ausgang nur durch einen Strahl verbunden werden, welcher das Mikrospiegelarray trifft (bei einem Spiegel mit Kippwinkel α = 12 ) (c) Der Eingang kann mit dem Ausgang über zwei Strahlen verbunden werden, welche das Mikrospiegelarray treffen. Das Ergebnis der Strahlenberechnung wird für die eigentliche Fitnessberechnung genutzt: Sei I ein Individuum, welches die Eingangspositionen I 1,..., I n = (x 1 i, y 1 i ),..., (x n i, y n i )

194 172 Kapitel 7: Anwendungsbeispiele und die Ausgangspositionen eines n n-netzwerks codiert. O 1,..., O n = (x 1 o, y 1 o),..., (x n o, y n o ) Für jedes Ein-/Ausgangs-Paar (I k, O l ) wird ein verbindender Strahl b kl mit zugehörigen Eingangswinkeln β kl 1 und γ kl 1 und dem Punkt P kl 2 = (x kl 2, y kl 2 ) auf der Unterseite des Substrats in der oben beschriebenen Weise berechnet. Die Fitness eines Individuums berechnet sich aus vier Teilfunktionen: Die erste Teilfunktion f 1 ist folgendermaßen definiert: f 1 (I) = + mit S(x 1, x 2, y 1, y 2 ) = n 1 n k=1 l=k+1 n n k=1 l=1 1, falls 0, sonst (S(x k i, x l i, y k i, y l i) + S(x k o, x l o, y k o, y l o)) S(x k i, x l o, y k i, y l o) (x 1 x 2 ) 2 + (y 1 y 2 ) 2 < 0,25. Die erste Summe bestraft das Individuum für jedes Paar von zwei Eingängen und jedes Paar von zwei Ausgängen mit einem Abstand von weniger als 0,25 mm und die zweite Summe bestraft es für jedes Ein-/Ausgangs-Paar mit einem Abstand von weniger als 0,25 mm. Damit gilt f 1 (I) = 0 genau dann, wenn ein Abstand von mindestens 0,25 mm zwischen allen Ein-/Ausgangspositionen liegt, andernfalls gilt f 1 (I) > 0. Die zweite Teilfunktion f 2 (I) ist definiert als f 2 (I) = + mit B(x 1, x 2, y 1, y 2 ) = n n 1 n k=1 l=1 q=l+1 n 1 n n k=1 l=1 p=k+1 q=1 1, falls 0, sonst B(x kl 2, x kq 2, y kl 2, y kq 2 ) n B(x kl 2, x pq 2, y kl 2, y pq 2 ) (x 1 x 2 ) 2 + (y 1 y 2 ) 2 < 0,1. f 2 (I) bestraft damit ein Individuum, falls mindestens zwei der berechneten Strahlen die Unterseite des Substrats zu nah aneinander treffen die erste

195 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 173 Summe für Strahlen, die zum selben Eingang gehören und die zweite Summe für Strahlen unterschiedlicher Eingänge. Die dritte Teilfunktion bestraft das Individuum, falls Ein-/Ausgangs-Paare in ihm codiert sind, welche nicht durch einen gültigen Strahl verbunden werden können und ist folgendermaßen definiert: n n f 3 (I) = V (I k, O l ) k=1 l=1 mit 10, falls (I, O) ungültiges Ein-/Ausgangs-Paar ist V (I, O) =. 0, sonst Da ein ungültiges Ein-/Ausgangspaar als ungünstigster Fall betrachtet wird, beträgt der Strafwert für jedes ungültige Ein-/Ausgangspaar 10. Ohne Beschränkung der Allgemeinheit sei für alle Eingänge I k, k = 1,..., n, die Folge der Eingangswinkel β k1 1,..., β kn 1 der Strahlen des Eingangs aufsteigend geordnet. Damit lässt sich die vierte Teilfunktion f 4 (I) folgendermaßen definieren: f 4 (I) = mit β (k) = und γ (k) = n n 1 k=1 l=1 ( β (k) (β k(l+1) 1 β kl 1 ) + γ (k) (γ k(l+1) 1 γ kl n 1 l=1 (βk(l+1) 1 β1 kl ) n 1 n 1 l=1 (γk(l+1) 1 γ kl n 1 1 ). 1 ) ) β (k) und γ (k) sind die durchschnittlichen Abstände zwischen den Eingangswinkeln der Strahlen des Eingangs k ( γ (k) kann dabei auch negativ sein). Das heißt, je kleiner f 4 (I) ist, umso besser sind die Gleichungen (7.18) und (7.19) erfüllt. Die Fitness eines Individuums bildet sich als Summe über die Teilfunktionen: fit(i) = f 1 (I) + f 2 (I) + f 3 (I) + f 4 (I). (7.20) Je kleiner die Fitness ist, umso besser ist das Individuum und die bestmögliche Fitness ist 0. Eine Fitness kleiner als 1 bedeutet, dass die Teilfunktionen f 1, f 2

196 174 Kapitel 7: Anwendungsbeispiele und f 3 gleich 0 sein müssen, was bedeutet, dass die Ein- und Ausgänge über gültige Strahlen verbunden werden können und die geometrischen Restriktionen eingehalten werden. Als evolutionäre Operatoren werden die Operatoren des memetischen Algorithmus MA-LSCh-CMA von Molina et al. [146] genutzt. Für die Selektion wird Negative Assortative Mating [66] in Kombination mit Tournament- Selektion genutzt: Das erste Elternindividuum wird per Tournament-Selektion aus zwei zufälligen Individuen der Population gewählt und anschließend werden fünf weitere Individuen zufällig gewählt, von denen dasjenige als zweites Elternindividuum gewählt wird, welches die größte euklidische Distanz zum ersten Elternindividuum aufweist. Als Variationsoperatoren kommen BLX- 0.5-Rekombination [65] und der BGA-Mutationsoperator (siehe Abschnitt 2.6, Seite 20) zum Einsatz. Die BLX-0.5-Rekombination arbeitet analog zur linearen Rekombination (Abschnitt 2.6, Seite 19) mit dem Unterschied, dass die Zufallszahlen α i aus dem Intervall [ 0,5; 1,5] gezogen werden. Das Ersetzungsschema folgt dem (µ + 1)-Schema. In jeder Generation wird iterativ P -mal Reproduktion und Mutation ausgeführt, wobei P der Populationsgröße entspricht. In jeder Iteration wird dabei ein Paar von Nachkommen erzeugt, von dem der bessere Nachkomme das bislang schlechteste Individuum der Population ersetzt, falls er besser als dieses ist. Nach jeder Generation wird ein Individuum der Population durch eine lokale Suche optimiert. Als lokale Suchstrategie kommt dabei (µ, λ)-cma-es (siehe Abschnitt 2.7) zum Einsatz, wobei die Parameter der CMA-ES-Suche, wie z. B. µ und λ, entsprechend den Empfehlungen von Hansen und Kern [89] gesetzt sind. Nach jeder Generation wird CMA-ES auf das beste Individuum der Population angewendet, welches eine der beiden Bedingungen erfüllt: (a) CMA-ES wurde auf das Individuum weniger als 30-mal angewendet. (b) Von den letzten 30 Anwendungen von CMA-ES auf das Individuum führte mindestens eine Anwendung zu einer Verbesserung des Individuums. Bei jeder Anwendung von CMA-ES auf ein Individuum der Population werden 2 Populationsgröße/λ Iterationen berechnet. Somit werden bei der CMA- ES-Optimierung genauso viele Fitnessbewertungen durchgeführt, wie beim

197 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 175 Rest des Algorithmus. Nach einer Anwendung von CMA-ES wird der interne Zustand (die Schrittweite σ und die Kovarianzmatrix C) aus der letzten Iteration gespeichert und für die nächste Anwendung auf dasselbe Individuum wieder benutzt. Damit wird CMA-ES bei der nächsten Anwendung gleich mit einer vielversprechenden Suchrichtung und Schrittweite initialisiert und muss diese nicht erst im Laufe der Optimierung auffinden. Molina bezeichnet dies als Kette lokaler Suche (LS-Chain) [146]. Algorithmus 6 verdeutlicht den gesamten Ablauf des EA. Algorithmus 6 Ablauf des Optimierungsalgorithmus für aktive PIFSO- Netzwerke. Input: G (Anzahl Generationen) P (Populationsgröße) Output: P op (Population) 1 Initialisierung: 1.1 Initialisiere und bewerte P op. Setze g = 0. 2 Globale Optimierung: 2.1 Falls g = G, stoppe, andernfalls setze k = Selektiere zwei Elternindividuen p1, p2 von P op über Tournament- Selektion und Negative Assortative Mating. 2.3 Erzeuge Nachkommen o1 und o2 von p1 und p2 mittels BLX-0.5- Rekombination und BGA-Mutation. 2.4 Bewerte o1 und o2 mit Fitnessfunktion (7.20). 2.5 Füge besseres Individuum aus {o1,o2} in P op ein, falls es besser ist als schlechtestes Individuum in P op. 2.6 Falls k < P, setze k = k + 1 und gehe zu Lokale Optimierung: 3.1 Wähle das beste Individuum b aus P op aus, auf welches CMA-ES entweder weniger als 30-mal angewendet wurde oder für welches mindestens eine der letzten 30 Anwendungen zu einer Verbesserung geführt hat. 3.2 Wende 2 P/λ Iterationen von (µ, λ)-cma-es auf b an. 3.3 Setze g = g + 1 und gehe zu 2.1.

198 176 Kapitel 7: Anwendungsbeispiele (a) (b) (c) Abbildung 7.33: Intensitätsplot der Fitness abhängig von der x- und y-position des ersten Eingangs. Die restlichen Ein- und Ausgänge wurden zufällig initialisiert. (a) Dimension 4 4. (b) Dimension 8 8. (c) Dimension Der EA wurde auch ohne lokale Suche getestet. Ohne lokale Suche war er in der Lage, zufriedenstellende Lösungen für Netzwerke kleiner Dimensionen (wie 4 4) zu finden, aber nicht für höhere Dimensionen. Dass die Schwierigkeit des Optimierungsproblems mit steigender Dimension zunimmt, sieht man an Abb Diese zeigt, wie sich die Fitness zufällig initialisierter Individuen für die Dimensionen 4 4, 8 8 und ändert, wenn die Position des ersten Eingangs des Netzwerks variiert wird. Zum einen sieht man, dass die durchschnittliche Fitness mit wachsender Dimension zunimmt (und damit schlechter wird). Zum anderen sieht man, dass die Fitnesslandschaft komplexer wird und die Anzahl lokaler Minima und Maxima zunimmt, wenn die Dimension erhöht wird Parallelisierung und Ergebnisse der Optimierung aktiver freiraumoptischer Netzwerke Durch die Ersetzungsstrategie nach dem (µ + 1)-Schema erbringt eine parallele Ausführung auf der GPU keine Geschwindigkeitsvorteile gegenüber einer CPU es können viel zu wenige Nachkommen parallel erzeugt und bewertet werden, um die GPU effizient auszulasten. Aber auch wenn eine (µ + λ)- Ersetzungsstrategie genutzt wird, bei welcher die Nachkommen alle gleichzeitig am Ende einer Generation in die alte Population eingefügt werden, kann die GPU nicht effizient ausgenutzt werden. Dies liegt an der lokalen Suche. Für die lokale Suche kommt eine CMA-ES-Implementierung von Nikolaus Han-

199 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 177 sen zum Einsatz. Die Aktualisierung der internen Parameter von CMA-ES nach jeder Iteration ist sehr komplex und lässt sich nicht ohne Schwierigkeiten auf die GPU portieren. Es ist aber auch kein Geschwindigkeitsgewinn zu erwarten, wenn die Aktualisierung auf der GPU ausgeführt wird, da sie kaum Möglichkeiten zur Parallelisierung bietet. Die Anzahl λ der Nachkommen in jeder Iteration von CMA-ES ist vergleichsweise klein. Sie richtet sich nach der Anzahl der Gene der Individuen und damit nach der Dimension des zu optimierenden Netzwerks. Für ein n n-netzwerk berechnet sich λ entsprechend [89] zu λ = ln(4n). Damit ist λ für ein Netzwerk 16. Dies sind zu wenige Individuen, als dass sich eine parallele Bewertung auf der GPU lohnen würde. Das sieht man in Abb Der Graph GPU+CPU-1 zeigt die Zeiten für CPU (Xeon E5620) GPU+CPU-1 (Geforce GTX580, Xeon E5620) GPU+CPU-2 (Geforce GTX580, Xeon E5620) Zeit [ms] P Abbildung 7.34: Laufzeiten der Optimierung eines Netzwerks für unterschiedliche Populationsgrößen P des EA, wenn der gesamte Algorithmus seriell auf der CPU läuft, wenn die globale Optimierung und die Bewertungen der lokalen Optimierung auf die GPU ausgelagert werden (GPU+CPU-1) und wenn nur die globale Optimierung auf die GPU ausgelagert wird (GPU+CPU-2). Bei den Optimierungen wurden je 100 Generationen berechnet. Alle Werte sind über 10 Messungen gemittelt. den Entwurf eines Netzwerks für verschiedene Populationsgrößen P, wenn die globale Optimierung und die Bewertung der lokalen Optimierung auf der GPU (GTX580) ausgeführt werden. Alle evolutionären Operatoren

200 178 Kapitel 7: Anwendungsbeispiele werden auf der GPU ausgeführt und es wird eine (µ + λ)-ersetzungsstrategie genutzt. Nach jeder Generation wird die Population von der GPU auf die CPU (Intel Xeon E5620, 2,6 GHz) transferiert, wo ein Individuum per CMA- ES optimiert wird und wieder zurück auf die GPU kopiert wird. Die Bewertung innerhalb von CMA-ES wird ebenfalls auf der GPU ausgeführt. Abb zeigt auch die Zeiten, wenn die gesamte Optimierung seriell mit einer (µ + 1)-Ersetzungsstrategie auf der CPU (Intel Xeon E5620, 2,6 GHz) ausgeführt wird. Wie man sieht, ist die Optimierung schneller, wenn sie komplett auf der CPU ausgeführt wird, als wenn die globale Optimierung und die Bewertungen der lokalen Optimierung auf die GPU ausgelagert werden. Für eine Populationsgröße von 2000 ist die Bewertung auf der CPU etwa 1,9-mal schneller. Der Grund ist, dass die Bewertungen der lokalen Optimierung auf der GPU langsamer laufen als auf der CPU, da zu wenig Arbeit parallel ausgeführt werden kann. Dies sieht man am Graph GPU+CPU-2. Dieser zeigt die Laufzeiten, wenn nur die globale Optimierung (mit (µ+λ)-ersetzungsstrategie) auf der GPU ausgeführt wird und die Bewertungen der lokalen Optimierung auf der CPU durchgeführt werden. Die Laufzeiten sind geringer als bei der Ausführung komplett auf der CPU. Trotzdem ist der Speed-Up noch vergleichsweise gering (für P = 2000 etwa 2), da die lokale Optimierung in beiden Fällen gleich viel Zeit beansprucht. Man sieht, dass sich der Einsatz der GPU durch die lokale Optimierung nur bedingt lohnt, selbst wenn auf eine (µ + λ)-ersetzungsstrategie ausgewichen wird. Entsprechend gilt dies auch für eine globale Parallelisierung mittels MPI in einem Cluster. Auch hierfür bietet die lokale Optimierung zu wenig Parallelität, um einen nennenswerten Speed-Up gegenüber einer seriellen Ausführung zu erzielen. Lohnenswerter ist aus Sicht der Parallelisierung der Einsatz des Inselmodells im Cluster oder gar Grid, da hier für die Inseln die lokalen Optimierungen parallel ausgeführt werden können. Auch die parallele Mehrfachausführung ergibt aus Sicht der Parallelisierung Sinn. Da sich gezeigt hat, dass unterschiedliche Optimierungsläufe teilweise sehr unterschiedliche Ergebnisse liefern, ergibt dies auch aus Sicht der Optimierung Sinn und wurde zum Entwurf aktiver PIFSO-Netzwerke folgendermaßen eingesetzt: 120 Optimierungen für ein Netzwerk der Dimension n n werden parallel in einem Cluster (bestehend aus 56 AMD Opteron 2216HE

201 7.3. Evolutionärer Entwurf eines aktiven freiraumoptischen Netzwerks 179 2,4 GHz Dualcores und vier AMD Opteron 2435 Sixcores) durchgeführt. Mit dem dabei besten gefundenen Resultat werden die Startpopulationen weiterer 120 Optimierungen für das n n-netzwerk initialisiert, welche erneut parallel im Cluster durchgeführt werden. Dies wird solange wiederholt, bis keine Verbesserungen in den Resultaten mehr eintreten. Danach werden in gleicher Weise Optimierungen für ein (n + 1) (n + 1)-Netzwerk durchgeführt, wobei zur Initialisierung der Populationen für die ersten 120 Optimierungen das beste Resultat für das n n-netzwerk genutzt wird die ersten n Ein- und Ausgänge werden entsprechend dieses Resultats initialisiert und der verbleibende Ein- und Ausgang wird zufällig initialisiert. Bei den Optimierungen wurde eine Populationsgröße von 1000 genutzt und es wurden pro Optimierungslauf abhängig von der Dimension des zu optimierenden Netzwerks zwischen 1000 und 4000 Generationen berechnet. Die Mutationsrate betrug 0,125 und die Rekombinationsrate 0,9. Auf diese Weise wurden Netzwerke der Dimensionen 8 8 bis optimiert. Die Fitnesswerte der besten dabei gefundenen Lösungen für jede Dimension sind in Tabelle 7.8 zu sehen. Tabelle 7.8: Fitnesswerte der besten gefundenen Lösungen für Netzwerke der Dimensionen 8 8 bis Dimension Fitness Dimension Fitness 8 8 0, , , , , , , , ,00775 Auch wenn die Resultate nicht perfekt hinsichtlich der Fitness sind (das heißt, eine Fitness von 0 aufweisen), sind sie ausreichend gut für die Realisierung. Für die Dimension beträgt die maximale Abweichung der Schrittweite zwischen zwei Eingangswinkeln von Strahlen eines Eingangs von der mittleren Schrittweite über alle Strahlen des Eingangs 0, Dies ist ein zufriedenstellender Wert, der innerhalb der Fertigungsschwankungen liegt. Abb zeigt einen Plot des evolvierten Netzwerks. Die Ausgänge

202 180 Kapitel 7: Anwendungsbeispiele des evolvierten Netzwerks sind in einer Linie angeordnet und die Eingänge sind fächerförmig angeordnet. Mittels der Optimierungen konnte gezeigt wer- Abbildung 7.35: Der evolvierte Aufbau des aktiven freiraumoptischen Netzwerks aus zwei unterschiedlichen Perspektiven. Alle Strahlen sind eingezeichnet, um alle Eingänge mit allen Ausgängen zu verbinden (im praktischen Betrieb wäre jeder Ausgang nur mit je einem Eingang verbunden). Die Eingänge befinden sich im Vordergrund und die Ausgänge im Hintergrund. Die hervorgehobene Fläche am Untergrund des Substrats stellt das Mikrospiegelarray dar. den, dass der angedachte Aufbau eines PIFSO-Netzwerks theoretisch genutzt werden kann, um mehrere Eingänge optisch auf mehrere Ausgänge zu schalten. Unter den gegebenen Randbedingungen erscheint es unwahrscheinlich, dass die Dimension signifikant über hinaus erhöht werden kann. Doch auch wenn gegenüber der Dimension von des evolvierten passiven Netzwerks aus Abschnitt 7.2 gering wirkt, so sind doch in beiden Netzwerken gleich viele Strahlen vorhanden. Es ist auch möglich, dass evolvierte Netzwerk als optischen Switch innerhalb eines größeren Netzwerks einzusetzen. Weiter-

Evolutionäre Algorithmen Software

Evolutionäre Algorithmen Software Evolutionäre Algorithmen Software Prof. Dr. Rudolf Kruse Pascal Held {kruse,pheld}@iws.cs.uni-magdeburg.de Otto-von-Guericke-Universität Magdeburg Fakultät für Informatik Institut für Wissens- und Sprachverarbeitung

Mehr

Seminararbeit zum Thema Genetische Algorithmen

Seminararbeit zum Thema Genetische Algorithmen Seminararbeit zum Thema Genetische Algorithmen Seminar in Intelligent Management Models in Transportation und Logistics am Institut für Informatik-Systeme Lehrstuhl Verkehrsinformatik Univ.-Prof. Dr.-Ing.

Mehr

Computational Intelligence

Computational Intelligence Vorlesung Computational Intelligence Stefan Berlik Raum H-C 80 Tel: 027/70-267 email: berlik@informatik.uni-siegen.de Inhalt Überblick Rückblick Optimierungsprobleme Optimierungsalgorithmen Vorlesung Computational

Mehr

Hochflexibles Workforce Management: Herausforderungen und Lösungsverfahren

Hochflexibles Workforce Management: Herausforderungen und Lösungsverfahren Hochflexibles Workforce Management: Herausforderungen und Lösungsverfahren Dissertation zur Erlangung des akademischen Gerades eines Doktors der Wirtschaftswissenschaften ( Doctor rerum politicarum") an

Mehr

Optimierung mit Genetischen Algorithmen und eine Anwendung zur Modellreduktion

Optimierung mit Genetischen Algorithmen und eine Anwendung zur Modellreduktion METHODEN at 4/2004 Optimierung mit Genetischen Algorithmen und eine Anwendung zur Modellreduktion Optimization with Genetic Algorithms and an Application for Model Reduction Maik Buttelmann und Boris Lohmann

Mehr

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15. smichel@cs.uni-kl.de

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15. smichel@cs.uni-kl.de Datenbankanwendung Wintersemester 2014/15 Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern smichel@cs.uni-kl.de Wiederholung: Anfragegraph Anfragen dieses Typs können als Graph dargestellt werden: Der

Mehr

Synthese Eingebetteter Systeme. 16 Abbildung von Anwendungen: Optimierung mit DOL

Synthese Eingebetteter Systeme. 16 Abbildung von Anwendungen: Optimierung mit DOL 12 Synthese Eingebetteter Systeme Sommersemester 2011 16 Abbildung von Anwendungen: Optimierung mit DOL 2011/06/24 Michael Engel Informatik 12 TU Dortmund unter Verwendung von Foliensätzen von Prof. Lothar

Mehr

Aufbau und Operatoren evolutionärer Verfahren

Aufbau und Operatoren evolutionärer Verfahren Aufbau und Operatoren evolutionärer Verfahren Darstellung der Gene im Chromosom (Codierung) Basisalgorithmus Partnerwahl Erzeugung von Nachkommen (Rekombination und Mutation) Bewertung Überlebensregeln

Mehr

Hochschule Regensburg. Übung 12_3 Genetische Algorithmen 1. Spezielle Algorithmen (SAL) Lehrbeauftragter: Prof. Sauer

Hochschule Regensburg. Übung 12_3 Genetische Algorithmen 1. Spezielle Algorithmen (SAL) Lehrbeauftragter: Prof. Sauer Hochschule Regensburg Übung 12_ Genetische Algorithmen 1 Spezielle Algorithmen (SAL) Lehrbeauftragter: Prof. Sauer Name: Vorname: 1. Was sind GA? - Ein GA ist ein Algorithmus, der Strategien aus der Evolutionstheorie

Mehr

Grundlagen und Basisalgorithmus

Grundlagen und Basisalgorithmus Grundlagen und Basisalgorithmus Proseminar -Genetische Programmierung- Dezember 2001 David König Quelle: Kinnebrock W.: Optimierung mit genetischen und selektiven Algorithmen. München, Wien: Oldenbourg

Mehr

Approximationsalgorithmen

Approximationsalgorithmen Ausarbeitung zum Thema Approximationsalgorithmen im Rahmen des Fachseminars 24. Juli 2009 Robert Bahmann robert.bahmann@gmail.com FH Wiesbaden Erstellt von: Robert Bahmann Zuletzt berarbeitet von: Robert

Mehr

Genetische Algorithmen

Genetische Algorithmen Genetische Algorithmen Projektgruppe 431 Metaheuristiken Bianca Selzam Inhaltsverzeichnis 1 Einleitung......................................................... 1 2 Grundlagen aus der Biologie.......................................

Mehr

Nichtlineare Optimierung ohne Nebenbedingungen

Nichtlineare Optimierung ohne Nebenbedingungen Kapitel 2 Nichtlineare Optimierung ohne Nebenbedingungen In diesem Abschnitt sollen im wesentlichen Verfahren zur Bestimmung des Minimums von nichtglatten Funktionen in einer Variablen im Detail vorgestellt

Mehr

Teil II. Nichtlineare Optimierung

Teil II. Nichtlineare Optimierung Teil II Nichtlineare Optimierung 60 Kapitel 1 Einleitung In diesem Abschnitt wird die Optimierung von Funktionen min {f(x)} x Ω betrachtet, wobei Ω R n eine abgeschlossene Menge und f : Ω R eine gegebene

Mehr

Genetische Algorithmen

Genetische Algorithmen Genetische Algorithmen zur Lösung kombinatorischer Optimierungsprobleme aus dem Bereich Produktion und Logistik S. Häckel, S. Lemke TU Chemnitz Fakultät für Wirtschaftswissenschaften Professur für Produktionswirtschaft

Mehr

Approximationsalgorithmen

Approximationsalgorithmen Makespan-Scheduling Kapitel 4: Approximationsalgorithmen (dritter Teil) (weitere Beispiele und Illustrationen an der Tafel) Hilfreiche Literatur: Vazarani: Approximation Algorithms, Springer Verlag, 2001.

Mehr

3 Quellencodierung. 3.1 Einleitung

3 Quellencodierung. 3.1 Einleitung Source coding is what Alice uses to save money on her telephone bills. It is usually used for data compression, in other words, to make messages shorter. John Gordon 3 Quellencodierung 3. Einleitung Im

Mehr

Proseminar Genetische und Evolutionäre Algorithmen

Proseminar Genetische und Evolutionäre Algorithmen Proseminar Genetische und Evolutionäre Algorithmen Genetische Algorithmen Grundkonzept und genetische Operatoren Vortragender: Frank Förster Datum: 29.04.02 Inhaltsverzeichnis 1 Einleitung...1 2 Grundbegriffe...2

Mehr

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005 Paradigmen im Algorithmenentwurf Problemlösen Problem definieren Algorithmus entwerfen

Mehr

Lineare Programmierung

Lineare Programmierung Lineare Programmierung WS 2003/04 Rolle der Linearen Programmierung für das TSP 1954: Dantzig, Fulkerson & Johnson lösen das TSP für 49 US-Städte (ca. 6.2 10 60 mögliche Touren) 1998: 13.509 Städte in

Mehr

Einsatz Evolutionärer Algorithmen zur Optimierung der Tourenplanung eines Wachschutzunternehmens

Einsatz Evolutionärer Algorithmen zur Optimierung der Tourenplanung eines Wachschutzunternehmens Fachhochschule Brandenburg Fachbereich Informatik und Medien Kolloquium zur Diplomarbeit Einsatz Evolutionärer Algorithmen zur Optimierung der Tourenplanung eines Wachschutzunternehmens Übersicht Darstellung

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

GRIPS - GIS basiertes Risikoanalyse-, Informations- und Planungssystem

GRIPS - GIS basiertes Risikoanalyse-, Informations- und Planungssystem GRIPS - GIS basiertes Risikoanalyse-, Informations- und Planungssystem GIS based risk assessment and incident preparation system Gregor Lämmel TU Berlin GRIPS joined research project TraffGo HT GmbH Rupprecht

Mehr

Heuristiken im Kontext von Scheduling

Heuristiken im Kontext von Scheduling Heuristiken im Kontext von Scheduling Expertenvortrag CoMa SS 09 CoMa SS 09 1/35 Übersicht Motivation Makespan Scheduling Lokale Suche Weitere Metaheuristiken Zusammenfassung Literatur CoMa SS 09 2/35

Mehr

TEILWEISE ASYNCHRONE ALGORITHMEN

TEILWEISE ASYNCHRONE ALGORITHMEN TEILWEISE ASYNCHRONE ALGORITHMEN FRANK LANGBEIN Literatur: D. Berseas, J. Tsitsilis: Parallel and distributed computatoin, pp. 48 489 URI: http://www.langbein.org/research/parallel/ Modell teilweiser asynchroner

Mehr

Approximationsalgorithmen: Klassiker I. Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling

Approximationsalgorithmen: Klassiker I. Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling Approximationsalgorithmen: Klassiker I Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling VO Approximationsalgorithmen WiSe 2011/12 Markus Chimani

Mehr

Nichtlineare Optimierungsprobleme mit Komplexität

Nichtlineare Optimierungsprobleme mit Komplexität Definition eines Nichtlinearen Optimierungsproblemes (NLP) min f (x) bzw. min f (x) s.d. x S x S wobei die zulässige Menge S R n typischerweise definiert ist durch S {x R n : h(x) =, c(x) } für Gleichungs-

Mehr

Optimalitätskriterien

Optimalitätskriterien Kapitel 4 Optimalitätskriterien Als Optimalitätskriterien bezeichnet man notwendige oder hinreichende Bedingungen dafür, dass ein x 0 Ω R n Lösung eines Optimierungsproblems ist. Diese Kriterien besitzen

Mehr

Softcomputing Biologische Prinzipien in der Informatik. Neuronale Netze. Dipl. Math. Maria Oelinger Dipl. Inform. Gabriele Vierhuff IF TIF 08 2003

Softcomputing Biologische Prinzipien in der Informatik. Neuronale Netze. Dipl. Math. Maria Oelinger Dipl. Inform. Gabriele Vierhuff IF TIF 08 2003 Softcomputing Biologische Prinzipien in der Informatik Neuronale Netze Dipl. Math. Maria Oelinger Dipl. Inform. Gabriele Vierhuff IF TIF 08 2003 Überblick Motivation Biologische Grundlagen und ihre Umsetzung

Mehr

Fluid-Particle Multiphase Flow Simulations for the Study of Sand Infiltration into Immobile Gravel-Beds

Fluid-Particle Multiphase Flow Simulations for the Study of Sand Infiltration into Immobile Gravel-Beds 3rd JUQUEEN Porting and Tuning Workshop Jülich, 2-4 February 2015 Fluid-Particle Multiphase Flow Simulations for the Study of Sand Infiltration into Immobile Gravel-Beds Tobias Schruff, Roy M. Frings,

Mehr

Algorithms for Regression and Classification

Algorithms for Regression and Classification Fakultät für Informatik Effiziente Algorithmen und Komplexitätstheorie Algorithms for Regression and Classification Robust Regression and Genetic Association Studies Robin Nunkesser Fakultät für Informatik

Mehr

4 Greedy-Algorithmen (gierige Algorithmen)

4 Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. Typischerweise konstruiert ein Greedy-Algorithmus eine

Mehr

Anwendung der Theorie von Gauß Shift Experimenten auf den Kolmogorov Smirnov Test und das einseitige Boundary Crossing Problem

Anwendung der Theorie von Gauß Shift Experimenten auf den Kolmogorov Smirnov Test und das einseitige Boundary Crossing Problem Anwendung der Theorie von Gauß Shift Experimenten auf den Kolmogorov Smirnov Test und das einseitige Boundary Crossing Problem Inauguraldissertation zur Erlangung des Doktorgrades der Mathematisch Naturwissenschaftlichen

Mehr

Perzentile mit Hadoop ermitteln

Perzentile mit Hadoop ermitteln Perzentile mit Hadoop ermitteln Ausgangspunkt Ziel dieses Projektes war, einen Hadoop Job zu entwickeln, der mit Hilfe gegebener Parameter Simulationen durchführt und aus den Ergebnissen die Perzentile

Mehr

Bionische Methoden der Optimierung

Bionische Methoden der Optimierung Bionische Methoden der Optimierung Thema: KODIERUNG VON GENETISCHEN ALGORITHMEN UND SIMULATED ANNEALING Autoren: Dipl.-Ing. (FH) Christian Benjamin Ries Dipl.-Ing.

Mehr

Bestimmung einer ersten

Bestimmung einer ersten Kapitel 6 Bestimmung einer ersten zulässigen Basislösung Ein Problem, was man für die Durchführung der Simplexmethode lösen muss, ist die Bestimmung einer ersten zulässigen Basislösung. Wie gut das geht,

Mehr

Methoden zur Visualisierung von Ergebnissen aus Optimierungs- und DOE-Studien

Methoden zur Visualisierung von Ergebnissen aus Optimierungs- und DOE-Studien Methoden zur Visualisierung von Ergebnissen aus Optimierungs- und DOE-Studien Katharina Witowski katharina.witowski@dynamore.de Übersicht Beispiel Allgemeines zum LS-OPT Viewer Visualisierung von Simulationsergebnissen

Mehr

Large-Scale Mining and Retrieval of Visual Data in a Multimodal Context

Large-Scale Mining and Retrieval of Visual Data in a Multimodal Context Diss. ETH No. 18190 Large-Scale Mining and Retrieval of Visual Data in a Multimodal Context A dissertation submitted to the SWISS FEDERAL INSTITUTE OF TECHNOLOGY ZURICH for the degree of Doctor of Technical

Mehr

Codierungstheorie Rudolf Scharlau, SoSe 2006 9

Codierungstheorie Rudolf Scharlau, SoSe 2006 9 Codierungstheorie Rudolf Scharlau, SoSe 2006 9 2 Optimale Codes Optimalität bezieht sich auf eine gegebene Quelle, d.h. eine Wahrscheinlichkeitsverteilung auf den Symbolen s 1,..., s q des Quellalphabets

Mehr

Abbildungsverzeichnis. Tabellenverzeichnis. Algorithmenverzeichnis. Abkürzungsverzeichnis. Symbolverzeichnis

Abbildungsverzeichnis. Tabellenverzeichnis. Algorithmenverzeichnis. Abkürzungsverzeichnis. Symbolverzeichnis Carolin Kellenbrink Ressourcenbeschränkte Projektplanung für flexible Projekte Mit einem Geleitwort von Prof. Dr. Stefan Helber 4^ Springer Gabler Abbildungsverzeichnis Tabellenverzeichnis Algorithmenverzeichnis

Mehr

Exascale Computing. = Exascale braucht Manycore-Hardware...und was für Software??? 46/58

Exascale Computing. = Exascale braucht Manycore-Hardware...und was für Software??? 46/58 Exascale Computing Die FLOP/s-Tabelle: Name Faktor erreicht heute Giga 10 9 1976 CPU-Kern Tera 10 12 1997 Graphikkarte (GPU) Peta 10 15 2009 Supercomputer Exa 10 18 2020(?) Der gegenwärtig schnellste Rechner

Mehr

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von.

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von. HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG Fakultät Informatik Das Luzifer-Rätsel Prof. Dr. Hartmut Plesske Wintersemester 2008/09 von Max Nagl nagl@fh-konstanz.de Inhaltsverzeichnis Inhaltsverzeichnis

Mehr

Programmiertechnik II

Programmiertechnik II Analyse von Algorithmen Algorithmenentwurf Algorithmen sind oft Teil einer größeren Anwendung operieren auf Daten der Anwendung, sollen aber unabhängig von konkreten Typen sein Darstellung der Algorithmen

Mehr

Vergleichende Analyse von Genetischen Algorithmen und der Particle Swarm Optimization für den Evolutionären Strukturtest

Vergleichende Analyse von Genetischen Algorithmen und der Particle Swarm Optimization für den Evolutionären Strukturtest Vergleichende Analyse von Genetischen Algorithmen und der Particle Swarm Optimization für den Evolutionären Strukturtest Arbeit zur Erlangung des akademischen Grades Diplom-Informatiker an der Technischen

Mehr

Seminar Komplexe Objekte in Datenbanken

Seminar Komplexe Objekte in Datenbanken Seminar Komplexe Objekte in Datenbanken OPTICS: Ordering Points To Identify the Clustering Structure Lehrstuhl für Informatik IX - Univ.-Prof. Dr. Thomas Seidl, RWTH-Aachen http://www-i9.informatik.rwth-aachen.de

Mehr

Umsetzung von DEA in Excel

Umsetzung von DEA in Excel Umsetzung von DEA in Excel Thorsten Poddig Armin Varmaz 30. November 2005 1 Vorbemerkungen In diesem Dokument, das als Begleitmaterial zum in der Zeitschrift,,Controlling, Heft 10, 2005 veröffentlichten

Mehr

Informatik-Sommercamp 2012. Mastermind mit dem Android SDK

Informatik-Sommercamp 2012. Mastermind mit dem Android SDK Mastermind mit dem Android SDK Übersicht Einführungen Mastermind und Strategien (Stefan) Eclipse und das ADT Plugin (Jan) GUI-Programmierung (Dominik) Mastermind und Strategien - Übersicht Mastermind Spielregeln

Mehr

Structurally Evolved Neural Networks for Forecasting

Structurally Evolved Neural Networks for Forecasting Structurally Evolved Neural Networks for Forecasting - Strukturierte neuronale Netze für Vorhersagen Institut für Informatik - Ausgewählte Kapitel aus dem Bereich Softcomputing Agenda Grundlagen Neuronale

Mehr

Einführung. Kapitel 1. Peter Becker (H-BRS) Operations Research I Sommersemester 2015 14 / 298

Einführung. Kapitel 1. Peter Becker (H-BRS) Operations Research I Sommersemester 2015 14 / 298 Kapitel 1 Einführung Peter Becker (H-BRS) Operations Research I Sommersemester 2015 14 / 298 Inhalt Inhalt 1 Einführung Was ist Operations Research? Planungsprozess im OR Peter Becker (H-BRS) Operations

Mehr

1 Einleitung. 1.1 Motivation und Zielsetzung der Untersuchung

1 Einleitung. 1.1 Motivation und Zielsetzung der Untersuchung 1 Einleitung 1.1 Motivation und Zielsetzung der Untersuchung Obgleich Tourenplanungsprobleme zu den am häufigsten untersuchten Problemstellungen des Operations Research zählen, konzentriert sich der Großteil

Mehr

Optimierung I. 1 Einführung. Luise Blank. Wintersemester 2012/13. Universität Regensburg

Optimierung I. 1 Einführung. Luise Blank. Wintersemester 2012/13. Universität Regensburg Universität Regensburg Wintersemester 2012/13 1 Einführung Anwendungen Finanzwirtschaft: maximale Gewinnrate unter Beschränkungen an das Risiko; Portfolio von Investments Produktion: maximiere Gewinn bei

Mehr

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20 Suche in Spielbäumen Suche in Spielbäumen KI SS2011: Suche in Spielbäumen 1/20 Spiele in der KI Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche Einschränkung von Spielen auf: 2 Spieler:

Mehr

Approximation in Batch and Multiprocessor Scheduling

Approximation in Batch and Multiprocessor Scheduling Approximation in Batch and Multiprocessor Scheduling Tim Nonner IBM Research Albert-Ludwigs-Universität Freiburg 3. Dezember 2010 Scheduling Zeit als Ressource und Beschränkung Formaler Gegeben sind Jobs

Mehr

Prediction Market, 28th July 2012 Information and Instructions. Prognosemärkte Lehrstuhl für Betriebswirtschaftslehre insbes.

Prediction Market, 28th July 2012 Information and Instructions. Prognosemärkte Lehrstuhl für Betriebswirtschaftslehre insbes. Prediction Market, 28th July 2012 Information and Instructions S. 1 Welcome, and thanks for your participation Sensational prices are waiting for you 1000 Euro in amazon vouchers: The winner has the chance

Mehr

Genetische Algorithmen und Evolutionäre Strategien

Genetische Algorithmen und Evolutionäre Strategien Genetische Algorithmen und Evolutionäre Strategien von Adam El Sayed Auf und Kai Lienemann Eine Ausarbeitung zum Seminar Intelligente Algorithmen im Wintersemester 2003/2004 an der Universität Bielefeld

Mehr

2.5.2 Selbstorganisierte Karten: das Modell von Kohonen. Weil es beim Perzeptron keine Wechselwirkung in der Verarbeitungsschicht

2.5.2 Selbstorganisierte Karten: das Modell von Kohonen. Weil es beim Perzeptron keine Wechselwirkung in der Verarbeitungsschicht 2.5.2 Selbstorganisierte Karten: das Modell von Kohonen Weil es beim Perzeptron keine Wechselwirkung in der Verarbeitungsschicht zwischen den einzelnen Neuronen gibt, spielt deren räumliche Anordnung keine

Mehr

Zeichnen von Graphen. graph drawing

Zeichnen von Graphen. graph drawing Zeichnen von Graphen graph drawing WS 2006 / 2007 Gruppe: D_rot_Ala0607 Christian Becker 11042315 Eugen Plischke 11042351 Vadim Filippov 11042026 Gegeben sei ein Graph G = (V; E) Problemstellung V E =

Mehr

12. Vorlesung Spieltheorie in der Nachrichtentechnik

12. Vorlesung Spieltheorie in der Nachrichtentechnik 12. Vorlesung Spieltheorie in der Nachrichtentechnik Vorlesung: Eduard Jorswieck Übung: Rami Mochaourab Sommersemester 2010 Evolutionäre Spieltheorie Hines (1987): Game theory s greatest success to date

Mehr

Alle Speicherplatinen können als Programm- bzw. Arbeitsspeicher

Alle Speicherplatinen können als Programm- bzw. Arbeitsspeicher -1-1. Überblick Das System.009 umfaßt programmierbare binäre Steuereinrichtungen für den industriellen Einsatz. Charakteristisch ist, daß die BOOLEschen Gleichungen, die den konkreten Steueralgorithmus

Mehr

(Lineare) stochastische Optimierung

(Lineare) stochastische Optimierung (Lineare) stochastische Optimierung Bsp: Aus zwei Sorten Rohöl wird Benzin und Heizöl erzeugt. Die Produktivität sowie der Mindestbedarf (pro Woche) und die Kosten sind in folgender Tabelle angegeben:

Mehr

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13.1 Modellierung des Rucksackproblems 13.2 Lösung mit Greedy-Algorithmus 13.3 Lösung mit Backtracking 13.4 Lösung mit Dynamischer Programmierung

Mehr

Teil 1: Digitale Logik

Teil 1: Digitale Logik Teil 1: Digitale Logik Inhalt: Boolesche Algebra kombinatorische Logik sequentielle Logik kurzer Exkurs technologische Grundlagen programmierbare logische Bausteine 1 Analoge und digitale Hardware bei

Mehr

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung. Lineare Gleichungen mit einer Unbekannten Die Grundform der linearen Gleichung mit einer Unbekannten x lautet A x = a Dabei sind A, a reelle Zahlen. Die Gleichung lösen heißt, alle reellen Zahlen anzugeben,

Mehr

Orientierungsveranstaltungen 2009 Informatikstudien der Universität Wien

Orientierungsveranstaltungen 2009 Informatikstudien der Universität Wien Orientierungsveranstaltungen 2009 Informatikstudien der Universität Wien Scientific Computing 07. Oktober 2009 Siegfried Benkner Wilfried Gansterer Fakultät für Informatik Universität Wien www.cs.univie.ac.at

Mehr

Informatik II Greedy-Algorithmen

Informatik II Greedy-Algorithmen 7/7/06 lausthal Erinnerung: Dynamische Programmierung Informatik II reedy-algorithmen. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Zusammenfassung der grundlegenden Idee: Optimale Sub-Struktur:

Mehr

Evaluation von Optimierungsalgorithmen zur Tourplanung im Hamburger Hafen

Evaluation von Optimierungsalgorithmen zur Tourplanung im Hamburger Hafen Diplomarbeit Evaluation von Optimierungsalgorithmen zur Tourplanung im Hamburger Hafen von Cheng Wang November 2011 Betreut von Prof. Dr. Sibylle Schupp Rainer Marrone Technische Universität Hamburg-Harburg

Mehr

Sortierverfahren für Felder (Listen)

Sortierverfahren für Felder (Listen) Sortierverfahren für Felder (Listen) Generell geht es um die Sortierung von Daten nach einem bestimmten Sortierschlüssel. Es ist auch möglich, daß verschiedene Daten denselben Sortierschlüssel haben. Es

Mehr

Algorithmische Methoden für schwere Optimierungsprobleme

Algorithmische Methoden für schwere Optimierungsprobleme Algorithmische Methoden für schwere Optimierungsprobleme Juniorprof. Dr. Henning Meyerhenke Institut für Theoretische Informatik 1 KIT Henning Universität desmeyerhenke, Landes Baden-Württemberg Institutund

Mehr

2 Darstellung von Zahlen und Zeichen

2 Darstellung von Zahlen und Zeichen 2.1 Analoge und digitale Darstellung von Werten 79 2 Darstellung von Zahlen und Zeichen Computer- bzw. Prozessorsysteme führen Transformationen durch, die Eingaben X auf Ausgaben Y abbilden, d.h. Y = f

Mehr

(Prüfungs-)Aufgaben zum Thema Scheduling

(Prüfungs-)Aufgaben zum Thema Scheduling (Prüfungs-)Aufgaben zum Thema Scheduling 1) Geben Sie die beiden wichtigsten Kriterien bei der Wahl der Größe des Quantums beim Round-Robin-Scheduling an. 2) In welchen Situationen und von welchen (Betriebssystem-)Routinen

Mehr

Optionale Übung Hardware Konfiguration mit HCD

Optionale Übung Hardware Konfiguration mit HCD Optionale Übung Hardware Konfiguration mit HCD Erstellen Sie eine Hardware Konfiguration via HCD für folgende Konstellation. 2064-106 in Basic Mode - CPCA Type CHPID BL BL CNC CNC - - - CNC CNC CNC BL

Mehr

Informationssicherheit - Lösung Blatt 2

Informationssicherheit - Lösung Blatt 2 Informationssicherheit - Lösung Blatt 2 Adam Glodek adam.glodek@gmail.com 13.04.2010 1 1 Aufgabe 1: One Time Pad 1.1 Aufgabenstellung Gegeben ist der folgende Klartext 12Uhr (ASCII). Verschlüsseln Sie

Mehr

Katholische Universität Eichstätt-Ingolstadt. Wirtschaftswissenschaftliche Fakultät

Katholische Universität Eichstätt-Ingolstadt. Wirtschaftswissenschaftliche Fakultät Katholische Universität Eichstätt-Ingolstadt Wirtschaftswissenschaftliche Fakultät Der Nutzen betrieblicher Weiterbildung für Großunternehmen. Eine empirische Analyse unter bildungsökonomischen Aspekten

Mehr

Erklärungsmodelle der Wissens(ver)teilung in Unternehmen im. Kontext der individuellen Nutzenmaximierung. - Darstellung anhand von Fallbeispielen -

Erklärungsmodelle der Wissens(ver)teilung in Unternehmen im. Kontext der individuellen Nutzenmaximierung. - Darstellung anhand von Fallbeispielen - Erklärungsmodelle der Wissens(ver)teilung in Unternehmen im Kontext der individuellen Nutzenmaximierung - Darstellung anhand von Fallbeispielen - S. Alexander Kelm S. Alexander Kelm Erklärungsmodelle der

Mehr

Wir unterscheiden folgende drei Schritte im Design paralleler Algorithmen:

Wir unterscheiden folgende drei Schritte im Design paralleler Algorithmen: 1 Parallele Algorithmen Grundlagen Parallele Algorithmen Grundlagen Wir unterscheiden folgende drei Schritte im Design paralleler Algorithmen: Dekomposition eines Problems in unabhängige Teilaufgaben.

Mehr

Group and Session Management for Collaborative Applications

Group and Session Management for Collaborative Applications Diss. ETH No. 12075 Group and Session Management for Collaborative Applications A dissertation submitted to the SWISS FEDERAL INSTITUTE OF TECHNOLOGY ZÜRICH for the degree of Doctor of Technical Seiences

Mehr

Binäre lineare Optimierung mit K*BMDs p.1/42

Binäre lineare Optimierung mit K*BMDs p.1/42 Binäre lineare Optimierung mit K*BMDs Ralf Wimmer wimmer@informatik.uni-freiburg.de Institut für Informatik Albert-Ludwigs-Universität Freiburg Binäre lineare Optimierung mit K*BMDs p.1/42 Grundlagen Binäre

Mehr

Diskussion eines IT-Outsourcing unter Berücksichtigung von Compliance Anforderungen. Bachelorarbeit

Diskussion eines IT-Outsourcing unter Berücksichtigung von Compliance Anforderungen. Bachelorarbeit Diskussion eines IT-Outsourcing unter Berücksichtigung von Compliance Anforderungen Bachelorarbeit zur Erlangung des akademischen Grades Bachelor of Science (B.Sc.) im Studiengang Wirtschaftswissenschaft

Mehr

Technische Informatik - Eine Einführung

Technische Informatik - Eine Einführung Martin-Luther-Universität Halle-Wittenberg Fachbereich Mathematik und Informatik Lehrstuhl für Technische Informatik Prof. P. Molitor Ausgabe: 2005-02-21 Abgabe: 2005-02-21 Technische Informatik - Eine

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Algorithmen und deren Programmierung Prof. Dr. Nikolaus Wulff Definition Algorithmus Ein Algorithmus ist eine präzise formulierte Handlungsanweisung zur Lösung einer gleichartigen

Mehr

Multicore Herausforderungen an das Software-Engineering. Prof. Dr.-Ing. Michael Uelschen Hochschule Osnabrück 15.09.2010

Multicore Herausforderungen an das Software-Engineering. Prof. Dr.-Ing. Michael Uelschen Hochschule Osnabrück 15.09.2010 Multicore Herausforderungen an das Software-Engineering Prof. Dr.-Ing. Michael Uelschen Hochschule Osnabrück 15.09.2010 Inhalt _ Motivation _ Herausforderung 1: Hardware _ Herausforderung 2: Software-Partitionierung

Mehr

Schriften zu Familienunternehmen Band 9. Herausgegeben vom Wittener Institut für Familienunternehmen

Schriften zu Familienunternehmen Band 9. Herausgegeben vom Wittener Institut für Familienunternehmen Schriften zu Familienunternehmen Band 9 Herausgegeben vom Wittener Institut für Familienunternehmen Dr. Alexander Leberling E-Commerce-Strategien von Familienunternehmen Erfolgs- und Risikopotenziale Mit

Mehr

Institut für Statistik und Mathematische Wirtschaftstheorie Universität Augsburg OPTIMIERUNG II. Aufgaben und Lösungen

Institut für Statistik und Mathematische Wirtschaftstheorie Universität Augsburg OPTIMIERUNG II. Aufgaben und Lösungen Institut für Statistik und Mathematische Wirtschaftstheorie Universität Augsburg OPTIMIERUNG II Aufgaben und Lösungen SS 2005 Aufgaben Aufgabe 41 Ein Betrieb stellt zwei Produkte P 1 und P 2 her, die die

Mehr

Einleitung. Was ist das Wesen von Scrum? Die Ursprünge dieses Buches

Einleitung. Was ist das Wesen von Scrum? Die Ursprünge dieses Buches Dieses Buch beschreibt das Wesen von Scrum die Dinge, die Sie wissen müssen, wenn Sie Scrum erfolgreich einsetzen wollen, um innovative Produkte und Dienstleistungen bereitzustellen. Was ist das Wesen

Mehr

Fragestellung: Wie viele CPU Kerne sollte eine VM unter Virtualbox zugewiesen bekommen?

Fragestellung: Wie viele CPU Kerne sollte eine VM unter Virtualbox zugewiesen bekommen? Fragestellung: Wie viele CPU Kerne sollte eine VM unter Virtualbox zugewiesen bekommen? Umgebung Getestet wurde auf einem Linux-System mit voller invis-server Installation, auf dem eine virtuelle Maschine

Mehr

RS-Flip Flop, D-Flip Flop, J-K-Flip Flop, Zählschaltungen

RS-Flip Flop, D-Flip Flop, J-K-Flip Flop, Zählschaltungen Elektronik Praktikum / Digitaler Teil Name: Jens Wiechula, Philipp Fischer Leitung: Prof. Dr. U. Lynen Protokoll: Philipp Fischer Versuch: 3 Datum: 24.06.01 RS-Flip Flop, D-Flip Flop, J-K-Flip Flop, Zählschaltungen

Mehr

Scheduling und Lineare ProgrammierungNach J. K. Lenstra, D. B. Shmoys und É.

Scheduling und Lineare ProgrammierungNach J. K. Lenstra, D. B. Shmoys und É. Scheduling und Lineare ProgrammierungNach J. K. Lenstra, D. B. Shmoys und É. Tardos Janick Martinez Esturo jmartine@techfak.uni-bielefeld.de xx.08.2007 Sommerakademie Görlitz Arbeitsgruppe 5 Gliederung

Mehr

Voraussetzung wieder: Datenraum mit Instanzen, mehrere Attribute - kein ausgezeichnetes Zielattribut, keine vorgegebenen Klassen

Voraussetzung wieder: Datenraum mit Instanzen, mehrere Attribute - kein ausgezeichnetes Zielattribut, keine vorgegebenen Klassen 7. Clusteranalyse (= Häufungsanalyse; Clustering-Verfahren) wird der multivariaten Statistik zugeordnet Voraussetzung wieder: Datenraum mit Instanzen, mehrere Attribute - kein ausgezeichnetes Zielattribut,

Mehr

Faktorisierung ganzer Zahlen mittels Pollards ρ-methode (1975)

Faktorisierung ganzer Zahlen mittels Pollards ρ-methode (1975) Dass das Problem, die Primzahlen von den zusammengesetzten zu unterscheiden und letztere in ihre Primfaktoren zu zerlegen zu den wichtigsten und nützlichsten der ganzen Arithmetik gehört und den Fleiss

Mehr

Optimierung eines neuen Logarithmic-Search-Verfahrens zum Image Mosaicing unter Einsatz des CUDA-Frameworks

Optimierung eines neuen Logarithmic-Search-Verfahrens zum Image Mosaicing unter Einsatz des CUDA-Frameworks Fachhochschule Köln, Campus Gummersbach Optimierung eines neuen Logarithmic-Search-Verfahrens zum Image Mosaicing unter Einsatz des CUDA-Frameworks 03.06.2009 Eugen Sewergin, B. Sc. Erstprüfer: Prof. Dr.

Mehr

Genetische Algorithmen

Genetische Algorithmen Technische Universität Dortmund Fakultät für Mathematik Lehrstuhl III: Angewandte Mathematik und Numerik Genetische Algorithmen Wirtschaftsmathematisches Projekt zur Numerik im WS 2013/14 Qendresa Mehmeti,

Mehr

Genetic Algorithms. Seminar KE und Lernen in Spielen. Bearbeitet von: Felix Becher. Leiter des Seminars: Prof. Dr. Johannes Fürnkranz 06-07-27

Genetic Algorithms. Seminar KE und Lernen in Spielen. Bearbeitet von: Felix Becher. Leiter des Seminars: Prof. Dr. Johannes Fürnkranz 06-07-27 Genetic Algorithms Seminar KE und Lernen in Spielen Bearbeitet von: Felix Becher Leiter des Seminars: Prof. Dr. Johannes Fürnkranz Gliederung Evolutionstheorie Genetische Algorithmen Vor- und Nachteile

Mehr

Software-SPS: Software PLC: Vom Industrie-PC fähigen From industrial PCzur to leistungs high-performance Steuerung controller Zur Visualisierung und Bedienung von PCs are used in countless machines and

Mehr

Distributed testing. Demo Video

Distributed testing. Demo Video distributed testing Das intunify Team An der Entwicklung der Testsystem-Software arbeiten wir als Team von Software-Spezialisten und Designern der soft2tec GmbH in Kooperation mit der Universität Osnabrück.

Mehr

UNIVERSITÄT DORTMUND FACHBEREICH INFORMATIK

UNIVERSITÄT DORTMUND FACHBEREICH INFORMATIK UNIVERSITÄT DORTMUND FACHBEREICH INFORMATIK Thomas Fober Experimentelle Analyse Evolutionärer Algorithmen auf dem CEC 2005 Testfunktionensatz Diplomarbeit 01.07.2006 I N T E R N E B E R I C H T E I N T

Mehr

Thema: Bootstrap-Methoden für die Regressionsanalyse. Bachelorarbeit. im Fachgebiet Wirtschaftsinformatik am Lehrstuhl für Quantitative Methoden

Thema: Bootstrap-Methoden für die Regressionsanalyse. Bachelorarbeit. im Fachgebiet Wirtschaftsinformatik am Lehrstuhl für Quantitative Methoden Westfälische Wilhelms-Universität Münster Thema: Bootstrap-Methoden für die Regressionsanalyse Bachelorarbeit im Fachgebiet Wirtschaftsinformatik am Lehrstuhl für Quantitative Methoden Themensteller: Prof.

Mehr

Das Knowledge Grid. Eine Architektur für verteiltes Data Mining

Das Knowledge Grid. Eine Architektur für verteiltes Data Mining Das Knowledge Grid Eine Architektur für verteiltes Data Mining 1 Gliederung 1. Motivation 2. KDD und PDKD Systeme 3. Knowledge Grid Services 4. TeraGrid Projekt 5. Das Semantic Web 2 Motivation Rapide

Mehr

Planen mit mathematischen Modellen 00844: Computergestützte Optimierung. Autor: Dr. Heinz Peter Reidmacher

Planen mit mathematischen Modellen 00844: Computergestützte Optimierung. Autor: Dr. Heinz Peter Reidmacher Planen mit mathematischen Modellen 00844: Computergestützte Optimierung Leseprobe Autor: Dr. Heinz Peter Reidmacher 11 - Portefeuilleanalyse 61 11 Portefeuilleanalyse 11.1 Das Markowitz Modell Die Portefeuilleanalyse

Mehr

N Bit binäre Zahlen (signed)

N Bit binäre Zahlen (signed) N Bit binäre Zahlen (signed) n Bit Darstellung ist ein Fenster auf die ersten n Stellen der Binär Zahl 0000000000000000000000000000000000000000000000000110 = 6 1111111111111111111111111111111111111111111111111101

Mehr