Laufzeitanalyse Seminar Evolutionäre Algorithmen Prof. Dr. H. Kleine Büning Oliver Kramer Chuan-Kang Ting WS 04/05 Ausarbeitung von Axel Hollmann Inhaltsverzeichnis 1 Einleitung 2 2 Laufzeitanalyse für Evolutionäre Algorithmen 3 3 Fitnessbasierte Partitionen 3.1 Laufzeitanalyse von OneMax . . . . . . . . . . . . . . . . . . . . 3.2 Laufzeitanalyse von Jumpk . . . . . . . . . . . . . . . . . . . . . 4 6 7 4 Sortieren mit Evolutionären Algorithmen 4.1 Mutation im (1+1) EA . . . . . . . . . 4.2 Vorsortierung einer Folge . . . . . . . . 4.3 Eine untere Schranke . . . . . . . . . . 4.4 Eine obere Schranke . . . . . . . . . . . 4.5 Weitere Ergebnisse . . . . . . . . . . . . Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 11 12 13 14 15 1 1 Einleitung Diese Seminararbeit beschäftigt sich mit der Laufzeitanalyse für Evolutionäre Algorithmen. Sie ist wie folgt gegliedert: In Kapitel 2 erfolgt eine entsprechende Einführung. Anschließend wird in Kapitel 3 die Methode der fitnessbasierten Partitionen vorgestellt. Beispielhaft werden anschließend in den Abschnitten 3.1 und 3.2 die Laufzeiten für die zwei Fitnessfunktionen OneMax und Jumpk untersucht. Kapitel 4 widmet sich der Laufzeitanalyse für das Sortieren von Zahlen mit Hilfe von Evolutionären Algorithmen. Diese Seminararbeit basiert im Wesentlichen auf einem Vorlesungsskript der Universität Dortmund [1] und einer Veröffentlichung von Jens Scharnow, Karsten Tinnefeld und Ingo Wegener [2]. 2 2 Laufzeitanalyse für Evolutionäre Algorithmen Die Laufzeitanalysen, die in dieser Seminararbeit vorgenommen werden, beschränken sich auf den einfachen (1+1) EA mit Mutationswahrscheinlichkeit pm = n1 . Nachfolgend ist er im Pseudocode aufgeführt: 1. Wähle x ∈ Bn gleichverteilt zufällig 2. Erzeuge y ∈ Bn durch Standardbitmutation auf x 3. falls f (y) > f (x), ersetze x durch y 4. weiter bei Schritt 2 Es wird nicht nur dieser vergleichsweise einfache Algorithmus betrachtet, sondern auch mit vergleichweise einfachen Zielfunktionen gearbeitet. Im Allgemeinen ist es außerdem üblich, dass bei der Laufzeitanalyse Evolutionärer Algorithmen nur die Anzahl der Aufrufe der Fitnessfunktion gezählt werden. Bei der Laufzeitanalyse eines Evolutionären Algorithms A (hier: (1+1) EA) mit Fitnessfunktion f wird die Anzahl T der Funktionsauswertungen, bis ein x ∈ Bn mit f (x) = max{f (y)|y ∈ Bn } gefunden wurde, analysiert. Dies führt zum Begriff der erwarteten Optimierzeit E(TA,f ). 3 3 Fitnessbasierte Partitionen Die Laufzeitanalysen in diesem und dem folgenden Kapitel erfolgen im Wesentlichen mit Hilfe der Methode der fitnessbasierten Partitionen. Diese Methode wird dazu benutzt, obere Schranken für die erwartete Optimierzeit E(TA,f ) für den (1+1) EA zu berechnen. Die grundsätzliche Idee der fitnessbasierten Partitionen ist die Aufteilung aller Individuen x ∈ Bn bzw. des Suchraums in disjunkte Mengen L0 , ..., Lk . Zuordnungskriterium für die Zugehörigkeit eines Individuums x ist seine Fitness f(x). Es sei f : Bn 7→ R eine Fitnessfunktion. Die Mengen L0 , ..., Lk ⊆ Bn seien k S Li = Bn . Die Mengen L0 , ..., Lk werden fitnessbasierte Partition disjunkt mit i=0 genannt, wenn 1. ∀i, j ∈ {0, ..., k}∀x ∈ Li , y ∈ Lj : (i < j ⇒ f (x) < f (y)) und 2. Lk = {x ∈ Bn |f (x) = max{f (y)|y ∈ Bn }} gilt. Die erste Bedingung fordert, dass jeweils für zwei Individuen x ∈ Li und y ∈ Lj gilt, dass das Individuum mit dem höheren Index eine bessere Fitness besitzt, d.h. wenn j > i ist, so gilt f (y) > f (x). Es wird jedoch nicht gefordert, dass Elemente innerhalb einer Menge die gleiche Fitness besitzen. Die zweite Bedingung besagt, dass sich in der Menge Lk alle Individuen mit der maximalen Fitness befinden. Bei der Mutation im (1+1) EA wird Plus-Selektion verwendet. Daraus folgt, dass die Population sich nur aufwärts zu Partitionen mit höherem Index bzw. höherer Fitness bewegen kann. Es wird nun untersucht, wie lange es dauert, bis die Population die Menge Lk erreicht. Im ungünstigten Fall führt die Initialisierung der Population, die im (1+1) EA nur aus einem einzigen Individuum x besteht, dazu, dass x in L0 liegt und durch die Mengen L0 , L1 , ..., Lk−1 , Lk läuft, ohne dabei Mengen zu überspringen. Es stellt sich die Frage, wieviele Mutationen im Durchschnitt benötigt werden, bis ein Individuum x ∈ Li die Menge Li verlässt. Eine obere Schranke stellt dann nämlich die Summation über die erwartete Anzahl aller Mutationsschritte für die 4 Mengen L0 , ..., Lk dar. Diese Überlegungen werden nun im Folgenden präzisiert: Die Wahrscheinlichkeit sx,y um von einem x ∈ Bn zu einem y ∈ Bn in genau einem Mutationsschritt zu kommen ist definiert durch: sx,y := (pm )H(x,y) (1 − pm )n−H(x,y) = ( n1 )H(x,y) (1 − n1 )n−H(x,y) Der Hamming-Abstand H(x, y) := n P |xi − yi | zählt alle Bits von 2 Individuen i=1 x und y, in denen sie sich unterscheiden. Um also von x zu y in einem Schritt zu mutieren, müssen die H(x,y) Bits, in denen sich x und y unterscheiden mutieren (Wahrscheinlichkeit (pm )H(x,y) ) und die restlichen n-H(x,y) Bits, die schon identisch sind, dürfen sich nicht ändern (Wahrscheinlichkeit (1 − pm )H(x,y) ). Als nächstes stellt sich die Frage, wie hoch die Wahrscheinlichkeit für ein x ∈ Li ist, in einem Schritt zu einem y ∈ Lj mit j > i zu mutieren. Dieses führt zum Begriff der Verlasswahrscheinlichkeit si für eine Menge Li mit i ∈ {0, , 1, 2, ..., k − 1}: si := min k P P x∈Li j=i+1 y∈L j (pm )H(x,y) (1 − pm )n−H(x,y) Das Produkt (pm )H(x,y) (1−pm )n−H(x,y) wurde bereits erklärt. Die Doppelsumme hat folgenden Zweck: Für ein festes x ∈ Li werden alle möglichen Mutationen betrachtet, die in die Mengen Li+1 , ..., Lk führen. Es gibt somit für x maximal |Li+1 | + ... + |Lk | Möglichkeiten zu einem y mit höherer Fitness zu mutieren. Aus der Menge Li wird nun das Element ausgewählt, dessen summierte Wahrscheinlichkeit am kleinsten ist. Somit stellt die Verlasswahrscheinlichkeit si eine untere Schranke dar, die Menge Li mit einer Mutation zu verlassen. Die erwartete Anzahl der Mutationen bis Erfolg eintritt beträgt somit s1i . Die Summation über s1i für alle i ∈ {0, .., k − 1} stellt nun eine obere Schranke für die erwartete Optimierzeit für den (1+1) EA mit Fitnessfunktion f dar: E(T(1+1)EA,f ) ≤ k−1 P i=0 s−1 i Eine Maximierung in der Definition der Verlasswahrscheinlichkeit statt Minimierung würde zu einer unteren Schranke führen, die aber in der Regel nur zu schwa- 5 chen Ergebnissen führt. Im Folgenden wird nun untersucht, wie schnell der (1+1) EA die Fitnessfunktionen OneMax und Jumpk optimiert. 3.1 Laufzeitanalyse von OneMax Als erstes wird die einfache Fitnessfunktion OneMax untersucht. Sie ist definiert durch: OneMax(x) := n P xi i=1 Es werden also die 1-Bits im Individuum x gezählt. Das Optimum ist natürlich 1n . Die Abschätzung der Laufzeit nach oben erfolgt mit Hilfe der fitnessbasierten Partitionen. Die Partition Li ist dabei wie folgt definiert: Li := {x ∈ Bn |OneM ax(x) = i} (∀i ∈ {0, .., n} ) In der Partition Li befinden sich also alle Individuen, die die gleiche Anzahl von 1-Bits haben, d.h. i 1-Bits und n-i 0-Bits. Insgesamt gibt es n+1 viele Partitionen. Um die Fitness eines Indiviuums x ∈ Li zu erhöhen, ist es notwendig, dass 0Bits zu 1-Bits mutieren. Für eine exakte Analyse der Verlasswahrscheinlichkeiten n−i n−i 0-Bits , ..., , müssten in einer Partition Li die Mutationen von n−i n−i 2 1 untersucht werden. Damit würde sich für jede Partition eine unterschiedliche Verlasswahrscheinlichkeit ergeben. Für die Partitionen L0 , ..., Ln−1 gilt, dass es mindestens ein 0-Bit gibt. Für einen Wechsel von x ∈ Li zu y ∈ Lj mit j > i genügt daher, wenn genau ein 0-Bit zu einem 1-Bit mutiert wird. Es ergibt sich für alle Partitionen L0 , ..., Ln−1 folgende 1 (1 − n1 )n−1 Verlasswahrscheinlichkeit: si = n−i 1 n n P 1 . Die Harmonische Reihe Mit (1 − n1 )n < 1e < (1 − n1 )n−1 folgt si ≥ n−i en i i=1 lässt sich mit (ln(n) + 1) abschätzen. Für die erwartete Optimierzeit gilt also: 6 E(T(1+1)EA,OneM ax ) ≤ n−1 P en n−i i=0 n−1 P 1 n−i = en 1 i < en(ln(n) + 1) = O(n log n) = en i=0 n P i=1 3.2 Laufzeitanalyse von Jumpk Im Folgenden soll untersucht werden, wie schnell die Fitnessfunktion Jumpk (x) optimiert werden kann. Sie ist wie folgt definiert: n P xi n− i=1 Jumpk (x) := n P k+ xi f alls n − k < n P xi < n i=1 sonst i=1 In Abbildung 1 ist der Graph der Funktion zu sehen. n P xi ≤ n − k ist bzw. n entpricht, so verhält sich Jumpk (x) im WesentFalls i=1 lichen wie die Funktion OneMax - es wird lediglich die Konstante k ∈ {1, ..., n} addiert. Das einzige globale Optimum ist auch hier 1n . Für k = 0 sind die beiden Funktionen sogar identisch. n n P P xi im Interval (n − k, n) liegt, so ist der Funktionswert n − xi . Falls jedoch i=1 i=1 Der Parameter k dient dazu, die Größe dieses Problembereichs einzustellen. Die lokalen Hinweise führen in diesem Interval vom globalen Optimum fort, da der Funktionswert steigt, wenn 1-Bits in 0-Bits mutiert werden. Eine Laufzeitanalyse der Funktion Jumpk ist daher besonders interessant, um zu sehen, wie gut der (1+1) EA mit der Optimierung der Funktion in Abhängigkeit vom Parameter k klar kommt. Die Analyse erfolgt auch hier wieder mit der Methode der fitnessbasierten Partitionen. Die Partitionierung sieht wie folgt aus: • Li := {x ∈ Bn |Jumpk (x) = i} (∀i ∈ {1, .., n} ) • Ln+1 := {1n } 7 Jump k (x) n+k n k n−k n xi Abbildung 1: Graph der Funktion Jumpk Jede Partition enthält also alle Individuen, die die gleiche Fitness besitzen. Zur Analyse der Verlasswahrscheinlichkeiten werden im Folgenden 3 Fälle unterschieden. Die Variable i entspricht dabei dem Funktionswert von Jumpk . Fall 1: 1 ≤ i < k P Für alle Individuen x ∈ Li gilt: n − k < xi < n. Die Fitness wird verbessert, indem 1-Bits zu 0-Bits mutiert werden. Zur Vereinfachung wird nun angenommen, dass nur genau ein 1-Bit zu einem 0-Bit mutiert wird. In jeder Partition viele 1-Bits. Die Wahrscheinlichkeit genau ein Bit zu L1 , ..., Lk−1 gibt es n−i 1 1 n−1 1 mutieren, ist (1 − n ) ( n ). Für die Verlasswahrscheinlichkeit ergibt sich somit: si = (n − i)(1 − n1 )n−1 ( n1 )1 Der Term (1 − n1 )n−1 kann wieder mit 1e abgeschätzt werden: en , s−1 si ≥ n−i i ≤ n−i en 8 Fall 2: k ≤ i < n P Hier gilt für alle Individuen x ∈ Li : k ≤ xi < n − k. Indem 0-Bits zu 1-Bits mutiert werden, wird die Fitness verbessert. Auch hier wird vereinfachend angenommen, dass nur genau eines der (n+k-i) vielen 0-Bits zu einem 1-Bit mutiert. Es ergibt sich folgende Verlasswahrscheinlichkeit: si = (n + k − i)(1 − n1 )n−1 ( n1 )1 Mit der Abschätzung 1e für (1 − n1 )n−1 ergibt sich: en si ≥ n+k−i , s−1 i ≤ n+k−i en Fall 3: i = n P Für die Elemente in der Partition Ln gilt: xi = n − k. Um von Ln zu Ln+1 = {1n } zu kommen, müssen k 0-Bits zu 1-Bits mutieren. Es ergibt sich also folgende Verlasswahrscheinlichkeit: k sn = (1 − n1 )n−k ( n1 )k ≥ en1k und s−1 n ≤ en Die erwartete Optimierzeit für die 3 verschiedenen Verlasswahrscheinlichkeiten ergibt: E(T(1+1)EA,Jumpk ) ≤ = = k−1 P en n−i i=1 k−1 P en en 1 n−i i=1 n−1 P i=n−k+1 = = + + 1 i + n−1 P en n+k−i i=k n−1 P 1 en n+k−i i=k n P 1 en i i=k+1 O(n log n) + O(n log n) k O(n + n log n) + enk + enk + enk + O(nk ) Auch hier wurde die Harmonische Reihe mit ln(n) + 1 nach oben abgeschätzt bzw. in der O-Notation durch log n ersetzt, da Logarithmen zu verschiedenen Basen nur um eine Konstante voneinander entfernt sind. Am Ergebnis ist gut zu sehen, dass der Parameter k schon ab einem Wert von 2 die Gesamtlaufzeit dominiert. 9 4 Sortieren mit Evolutionären Algorithmen Innerhalb der Informatik gehört das Sortieren zu den Gebieten, die besonders gut erforscht sind. Trotzdem stellt sich die Frage, wie gut bzw. wie schnell mit Hilfe von Evolutionären Algorithmen sortiert werden kann. Besonders der Vergleich zu spezialisierten Sortieralgorithmen wie dem Quicksort-Algorithmus dürfte interessant sein. Es ist aber kaum zu erwarten, dass ein Black-Box-Algorithmus im Allgemeinen bzw. ein Evolutionärer Algorithmus entsprechende Laufzeiten erreicht. Wie schon im vorhergegangenen Kapitel wird die Laufzeit nur mit der Anzahl der Aufrufe der Fitnessfunktionen bemessen. Der verwendete Suchraum ist: Sn = {π|π ist Permutation über {1, ..., n}} Zur Vereinfachung der Notation wird also angenommen, dass die Zahlen 1,...,n zu sortieren sind. Dieses spezielle Wissen darf aber nicht beim Sortieren ausgenutzt werden. Für die verwendeten Fitnessfunktion gilt: f : Sn 7→ N0 Auch in diesem Kapitel wird der (1+1) EA benutzt. Wegens des geänderten Suchraums wird allerdings ein anderer Mutationsoperator benötigt. Die benutzten Mutationsoperatoren Austausch und Sprung werden daher im folgenden Abschnitt näher erläutert. 4.1 Mutation im (1+1) EA In dem verwendeten (1+1) EA zum Sortieren werden folgende Mutationsoperatoren verwendet: Austausch: • Wähle i, j ∈ {1, ..., n} mit i 6= j zufällig und gleichverteilt • Vertausche das i-te und das j-te Element im Individuum 2 5 4 i 1 6 3 2 j 10 5 3 1 6 4 Sprung: • Wähle i, j ∈ {1, ..., n} mit i 6= j zufällig und gleichverteilt • Setze das i-te Element auf Position j und verschiebe entsprechend 2 5 4 i 1 6 3 2 5 1 6 3 4 j Die Kombination der Mutationsoperatoren Austausch und Sprung erfolgt nach folgendem Schema: • Wähle ein k ∈ N0 , Poisson-verteilt mit E(X) = λ = 1 • Führe k + 1 Austäusche/Sprünge mit jeweils Wahrscheinlichkeit 1 2 durch Um zu vemeiden, dass k = 0 Mutationen ausgeführt werden, werden k + 1 viele k λ=1 1 ausgeführt. Es gilt: P (X = k) = λk! e−λ ⇒ P (X = k) = k!e Es ergeben sich beispielhaft für k ∈ {0, 1, 2, 3} folgende Wahrscheinlichkeiten: k Wahrscheinlichkeit 1 ≈ 0.368 0 e 1 ≈ 0.368 1 e 1 2 ≈ 0.18 2e 1 3 ≈ 0.06 6e 4.2 # Mutationen 1 2 3 4 Vorsortierung einer Folge Die Bewertung der Fitness eines Individuums erfolgt über die Messung seiner Vorsortierung. Dazu sind nachfolgend drei verschiedene Fitnessfunktionen aufgeführt: • INV(π): Anzahl der Paare, so dass π(i) > π(j) mit i < j gilt • HAM(π): Anzahl der Elemente, die am falschen Platz stehen, d.h. π(i) 6= i • LAS(π): Grösse der längsten sortierten Teilfolge 11 Die folgende Tabelle gibt an, wie lange das Erstellen bzw. Aktualisieren mit geeigneten Datenstrukturen für die einzelnen Fitnessfunktionen dauert, in welchem Intervall die möglichen Funktionswerte liegen und ob die entsprechende Fitnessfunktion zu minimieren bzw. maximieren ist. Erstellen INV O(n2 ) HAM O(n) LAS O(n log n) 4.3 Update O(|i − j|) O(1) O(n log n) Intervall 0 ≤ IN V ≤ n2 0 ≤ HAM ≤ n 1 ≤ LAS ≤ n Min/Max min min max Eine untere Schranke Im folgenden wird eine untere Schranke für die drei Fitnessfunktionen INV, HAM und LAS gezeigt. Dazu wird lediglich der letzte Schritt betrachtet, bevor das Optimum erreicht wird: Es gibt nur noch ein Paar von Zahlen in der Permutation π, das zu drehen ist, damit die Folge sortiert ist: Austausch(i,j) = Austausch(j,i): 1 1 + n(n−1) = Wahrscheinlichkeit: n(n−1) Sprung(i, i+1) = Sprung(i+1,i): Wahrscheinlichkeit: 1 (n−1) ( 1 + n(n−1) n(n−1) 2 2 n(n−1) 1 ) n(n−1) = 4 n2 (n−1) Der Faktor 1 (n−1) hat folgenden Sinn: Es gibt 12 n(n − 1) viele Folgen mit n(n−1) 2 IN V (π) = 1, d.h. bei denen nur noch ein Zahlenpaar verdreht ist. Aber nur bei (n-1) vielen dieser Permutationen sind die Zahlen benachbart, so dass ein Aufruf der Funktion Sprung die Folge in die sortierte Folge verwandelt. Insgesamt ergibt sich die Wahrscheinlichkeit: 2 2 1 2 n(n−1) (n−1) Es folgt: E(T(1+1)EA,f ) = Ω( n n+2 ) = Ω(n2 ) 12 + 1 4 2 n2 (n−1) = n+2 n2 (n−1) 4.4 Eine obere Schranke In diesem Abschnitt wird mit Hilfe der Methode der fitnessbasierten Partitionen eine obere Schranke für die Fitnessfunktion INV hergeleitet. Die Partition Li sei wie folgt definiert: Li := {π|IN V (π) = i} (∀i ∈ {0, .., n 2 }) Anzumerken ist, dass diesmal die Partition L0 das Individuum mit der besten Fitness enthält - die sortierte Folge. Es sei π die aktuelle Permutation und 1 ≤ i < j ≤ n und π(i) > π(j) (s.a. Abbildung 2). 1111111111 0000000000 0000000000 1111111111 1 i i+1 j−1 j n Abbildung 2: Permutation π Es soll zunächst betrachtet werden, wie sich ein Mutationschritt auf die Fitness auswirkt. Dazu werden die Elemente respektive die Anzahl der Elemente im Intervall [i+1,j-1] betrachtet: • a := |{k|k < π(j), k ∈ {1, ..., n}}| • b := |{k|π(j) < k < π(i), k ∈ {1, ..., n}}| • c := |{k|k > π(i), k ∈ {1, ..., n}}| Es sind a, b, c ∈ N0 und es gilt a + b + c = j − i − 1. Klar ist, dass die Elemente im Intervall [1, i) und (j, n] nicht zu einer Änderung der Fitness beitragen. Die Mutationen Austausch(i,j) und Austausch(j,i) ändern die Fitness um 2b+1, d.h. also mindestens um 1. Die Wahrscheinlichkeit errechnet sich wie folgt: 1 1 + n(n−1) ) ( n(n−1) Der Mutationsoperator Sprung(i,j) ändert die Fitness um a+b-c+1. Sprung(j,i) hingegen führt zu -a+b+c+1, d.h. dass zumindest einer der Sprünge die Fitness 1 verbessert. Die Wahrscheinlichkeit beträgt n(n−1) . 13 Es ergibt sich die folgende Verlasswahrscheinlichkeit für die Partition Li : 2 si = IN V (π) 1e ( 21 n(n−1) + 1 1 ) 2 n(n−1) 3 = IN V (π) 1e 21 n(n−1) 2 n(n−1) ⇒ s−1 i = 3 e IN V (π) Innerhalb der Verlasswahrscheinlichkeit si sind die Wahrscheinlichkeiten für die Mutationsoperatoren Sprung und Austausch mit 21 gewichtet. Wenn genau ein Mutationsschritt durchgeführt wird, ergibt sich der Faktor bzw. die Wahrscheinlichkeit 1e . Zudem gibt es IN V (π) viele mögliche Mutationen, die die Fitness verbessern können. Die erwartete Optimierzeit berechnet sich wie folgt: E(T(1+1)EA,IN V ) ≤ n (P 2) 2 i=1 = = 3 e(n2 − n) 1i 2 e(n2 3 − n) n (P 2) 1 i=1 i O(n2 log n) Die Harmonische Reihe lässt sich auch hier wieder mit ln(n2 ) = 2 ln(n) bzw. O(log n) nach oben abschätzen. 4.5 Weitere Ergebnisse Abschließend folgen noch einige Ergebnisse für die Fitnessfunktionen HAM und LAS. Beweise dazu finden sich in der verwendeten Literatur. • E(T(1+1)EA,HAM ) = O(n2 log n) • E(T(1+1)EA,LAS ) = O(n2 log n) • E(T(1+1)EA,LAS ) = Ω(n2 log n) ⇒ E(T(1+1)EA,LAS ) = Θ(n2 log n) • falls nur Vertauschungen, aber keine Sprünge durchgeführt werden: E(T(1+1)EA,HAM ) = Θ(n2 log n) 14 Literatur [1] Thomas Jansen, Spezialvorlesung Evolutionäre Algorithmen, Universität Dortmund, Wintersemester 2004/2005. [2] Jens Scharnow, Karsten Tinnefeld, Ingo Wegener, The Analysis of Evolutionary Algorithms on Sorting and Shortest Paths Problems, Journal of Mathematical Modelling and Algorithms, 3(4), S. 349-366, 2004 15