Fakultät für Informatik Professur Theoretische Informatik Studienarbeit Implementierung eines Algorithmus zur Partitionierung von Graphen Steffen Riediger Prüfer: Prof. Dr. rer. nat. Andreas Goerdt Betreuer: André Lanka Ort, Datum: Chemnitz, den 1. Mai 2007 Riediger, Steffen Clausstraße 86, 09126 Chemnitz Matrikelnummer: 74984 Studienarbeit, Fakultät für Informatik Studiengang: Angewandte Informatik Technische Universität Chemnitz, Mai 2007 Matlab ist eingetragenes Warenzeichen von: The Math Works Inc. – 24 Prime Park Way – Natick, MA 01760-1500. R wird in dieser Arbeit nicht verwendet. Das Symbol Abstract Partitionierung von Graphen ist im Allgemeinen sehr schwierig. Es stehen derzeit keine Algorithmen zur Verfügung, die ein allgemeines Partitionierungsproblem effizient lösen. Aus diesem Grund werden heuristische Ansätze verfolgt. Zur Analyse dieser Heuristiken ist man derzeit gezwungen zufällige Graphen zu Verwenden. Daten realer Graphen sind derzeit entweder nur sehr schwer zu erheben (z.B. Internetgraph), oder aus rechtlichen bzw. wirtschaftlichen Gründen nicht zugänglich (z.B. soziale Netzwerke). Die untersuchten Heuristiken liefern teilweise nur unter bestimmten Voraussetzungen Ergebnisse. Einige arbeiten lediglich auf einer eingeschränkten Menge von Graphen, andere benötigen zum Erkennen einer Partition einen mit der Knotenzahl steigenden Durchschnittsgrad der Knoten, z.B. [DHM04]. Der im Zuge dieser Arbeit erstmals implementierte Algorithmus aus [CGL07a] benötigt lediglich einen konstanten Durchschnittsgrad der Knoten um eine Partition des Graphen, wenn diese existiert, zu erkennen. Insbesondere muss dieser Durchschnittsgrad nicht mit der Knotenzahl steigen. Nach der Implementierung erfolgten Tests des Algorithmus an zufälligen Graphen. Diese Graphen entsprachen dem Gnp -Modell mit eingepflanzter Partition. Die untersuchten Clusterprobleme waren dabei große Schnitte, kleine Schnitte und unabhängige Mengen. Der von der Art des Clusterproblems abhängige Durchschnittsgrad wurde während der Tests bestimmt. Inhaltsverzeichnis 1 Aufgabenstellung und Motivation 1.1 Verwandte und vorausgegangene Arbeiten 1.2 Aufbau der Arbeit . . . . . . . . . . . . . 1.3 Aufgabenstellung . . . . . . . . . . . . . . 1.4 Einführung: Graph . . . . . . . . . . . . . 1.5 Motivation: Partitionierung von Graphen 1.6 Auswertung der Adjazenzmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 3 5 2 Grundlagen 2.1 Notationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Eigenwerte und Eigenvektoren . . . . . . . . . . . . . . . . . . . 2.3 Eigenschaften von Eigenvektoren . . . . . . . . . . . . . . . . . . 2.4 Symbolische Berechnung von Eigenwerten und Eigenvektoren . . 2.5 Numerische Berechnung von Eigenwerten und Eigenvektoren . . 2.5.1 Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Das QR-Verfahren . . . . . . . . . . . . . . . . . . . . . . 2.5.3 Laufzeit des QR-Verfahrens . . . . . . . . . . . . . . . . . 2.6 Repräsentation von Strukturen einer Matrix durch Eigenvektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 8 8 8 9 9 11 14 14 3 Modell und Algorithmus 3.1 Modell für zufällige Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Der Partitionierungsalgorithmus . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Laufzeitanalyse des Partitionierungsalgorithmus . . . . . . . . . . . . . . . . . 16 16 17 18 4 Implementierung 4.1 Programmiersprache / Umgebung . . . . . . . . . . . . . . . . . . . . . . 4.2 Aufbau des Programms . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Verwendete Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Eliminieren von Schleifen durch Matrixmultiplikation . . . . . . . . . . . 4.4.1 Schritt 2 - Normalisierung der Adjazenzmatrix . . . . . . . . . . 4.4.2 Schritt 4 - Konstruktion von M ∗ . . . . . . . . . . . . . . . . . . 4.5 Berechnung von Singulär- statt Eigenwerten . . . . . . . . . . . . . . . . 4.6 Heuristiken für Schritt 6 des Algorithmus . . . . . . . . . . . . . . . . . 4.6.1 Heuristik 1 - Vorzeichenmethode . . . . . . . . . . . . . . . . . . 4.6.2 Heuristik 2 - Histogrammmethode . . . . . . . . . . . . . . . . . 4.6.3 Histogrammmethode - Laufzeit . . . . . . . . . . . . . . . . . . . 4.7 Gemessene Laufzeit des Algorithmus zur Graphpartitionierung . . . . . 4.7.1 Schritte 1 bis 5: Normierung und Berechnung der Eigenvektoren 4.7.2 Schritt 6: Auswertung der Eigenvektoren . . . . . . . . . . . . . 4.7.3 Gesamter Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 19 20 20 20 21 21 23 23 25 25 25 26 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Inhaltsverzeichnis 5 Clusterproblemklassen und Ergebnisse 5.1 Vorstellung der Clusterprobleme . . . . . . . . . . . . . . . . . 5.1.1 Clusterproblem Großer Schnitt“ . . . . . . . . . . . . . ” 5.1.2 Clusterproblem Kleiner Schnitt“ . . . . . . . . . . . . . ” 5.1.3 Clusterproblem Unabhängige Menge“ . . . . . . . . . . ” 5.2 Entwicklung der Eigenvektoren . . . . . . . . . . . . . . . . . . 5.2.1 Eigenvektoren und steigender Durchschnittsgrad . . . . 5.2.2 Eigenvektoren und Größenverhältnis der Teilmengen der 5.3 Ergebnisse der Tests . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Ergebnisse beim Test Maximaler Schnitt“ . . . . . . . ” 5.3.2 Ergebnisse beim Test Großer Schnitt“ . . . . . . . . . . ” 5.3.3 Ergebnisse beim Test Kleine Bisektion“ . . . . . . . . . ” 5.3.4 Ergebnisse beim Test Kleiner Schnitt“ . . . . . . . . . ” 5.3.5 Ergebnisse beim Test Unabhängige Menge“ . . . . . . ” 5.4 Zusammenfassung der Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 28 29 30 31 31 32 34 35 36 38 40 42 44 46 6 Zusammenfassung und Ausblick 6.1 Zusammenfassung der Studienarbeit . . . . . . . . . . . . . . . . . . . . . . . 6.2 Ausblick für weitere Untersuchungen . . . . . . . . . . . . . . . . . . . . . . . 48 48 48 Literaturverzeichnis 50 A Implementierung A.1 Zusammenarbeit der Funktionen . . . A.2 Ausführung des gesamten Algorithmus A.3 Erzeugung eines zufälligen Graphen . A.3.1 Implementierung . . . . . . . . A.3.2 Laufzeit . . . . . . . . . . . . . A.4 Schritte 1 - 5 des Algorithmus . . . . . A.4.1 Aufruf und Parameter . . . . . A.5 Schritt 6 des Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Zusätzliche Grafiken B.1 Laufzeit Schritt 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Eigenwerte zu konstantem Durchschnittsgrad . . . . . . . . . . . . . . . . . . B.2.1 Eigenwerte beim Test Maximaler Schnitt“ . . . . . . . . . . . . . . . ” B.2.2 Eigenwerte beim Test Großer Schnitt“ . . . . . . . . . . . . . . . . . ” B.2.3 Eigenwerte beim Test Kleine Bisektion“ . . . . . . . . . . . . . . . . ” B.2.4 Eigenwerte beim Test Kleiner Schnitt“ . . . . . . . . . . . . . . . . . ” B.2.5 Eigenwerte beim Test Unabhängige Menge“ . . . . . . . . . . . . . . ” B.3 Konvergenz zu einem minimalen Durchschnittsgrad beim Clusterproblem Un” abhängige Menge“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii 51 51 52 53 53 54 54 54 56 57 57 57 58 58 59 59 60 60 1 Aufgabenstellung und Motivation Die vorliegende Studienarbeit beschreibt die Implementierung eines Algorithmus zur Partitionierung von Graphen. Der Algorithmus entstammt der Arbeitsversion [CGL07a] des zur Veröffentlichung eingereichten Papiers Spectral Partitioning of Random Graphs with Given ” Expected Degrees“ [CGL07b] von A. Coja-Oghlan, A. Goerdt und A. Lanka. Dieses ist eine Weiterführung des in [CGL06] vorgestellten Algorithmus zur Partitionierung von Graphen. Referenzen, die in dieser Arbeit verwendet wurden, können sich in der endgültig veröffentlichten Version des Papers [CGL07b] noch geändert haben. Dies ist dem Veröffentlichungsprozess geschuldet. Leser dieser Arbeit mögen diesen Umstand entschuldigen. Ebenso unterlag der implementierte Algorithmus nachträglichen Änderungen. Die Grundidee blieb dabei jedoch erhalten. Die Ergebnisse dieser Arbeit gelten somit auch für eine leicht geänderte Version des Algorithmus’. 1.1 Verwandte und vorausgegangene Arbeiten Das Forschungsfeld Partitionierung von zufälligen Graphen“ ist nicht neu. Ziel derzeitiger ” Untersuchungen ist, heuristische Verfahren zu finden, die nachweisbar eine möglichst große Zahl von Partitionierungsproblemklassen bei möglichst geringem Durchschnittsgrad erkennen. Der Durchschnittsgrad soll dabei entweder vollkommen unabhängig von der Knotenzahl sein, oder zumindest sublinear mit diesem steigen müssen. Meilensteine waren Beispielsweise die Arbeit von Alon und Kahale [AK98], wobei eine Färbung eines dreifärbbaren zufälligen Graphen bei konstantem Durchschnittsgrad ausgegeben wird. Condon und Karp [CK00] entwickelten ein Verfahren, dass ein allgemeines Parti√ tionierungsproblem bei einem Durchschnittsgrad d¯ > n erkennt1 . McSherry [McS01] stellte einen heuristischen Algorithmus vor, der ab einem Durchschnittsgrad d¯ > log6 n nachgewiesen Ergebnisse liefert. Eine weitere wichtige Arbeit für den hier betrachteten Algorithmus veröffentlichte Coja-Oghlan [CO06] mit Untersuchungen zum Spektrum der Laplaceschen Adjazenzmatrix des Graphen. 1.2 Aufbau der Arbeit Das erste Kapitel begründet, warum das Thema Partitionierung von Graphen interessant ist und beschreibt die Aufgabe für diese Studienarbeit. Anhand einiger Beispiele wird die Bedeutung des Themas in der Praxis motiviert. Abschließend wird verdeutlicht, warum Spektralmethoden ein Ansatz zur Partitionierung von Graphen sind. Im zweiten Kapitel werden anfangs die in der Arbeit verwendeten Notationen eingeführt. Anschließend folgt die Definition von Eigenwerten und Eigenvektoren, da diese die Grundlage von Spektralmethoden bilden. Ausgiebig wird in der Mitte des Kapitels die symbolische und numerische Berechnung von Eigenwerten und Eigenvektoren erläutert. Es wird dabei gezeigt 1 d¯ ist dabei der Durchschnittsgrad der Knoten, n die Anzahl der Knoten im Graph. Notationen und gängige Abkürzungen werden weiter unten in dieser Arbeit eingeführt. 1 Kapitel 1. Aufgabenstellung und Motivation werden, dass numerische Methoden bekannt sind, Eigenwerte und die zugehörigen Eigenvektoren in polynomieller Laufzeit zu erhalten. Diese Aussage ist eine wichtige Erkenntnis für die Laufzeit des behandelten Ansatzes zur Graphpartitionierung. An zwei Gedankenexperimenten wird am Ende des Kapitels der Zusammenhang zwischen der Partition eines Graphen und den Eigenvektoren der Adjazenzmatrix erläutert. In Kapitel drei wird der implementierte Algorithmus sowie das Modell für zufällige Graphen vorgestellt. Wie eingangs erwähnt, wurde in dieser Arbeit ein Zwischenstand des Algorithmus implementiert. Der endgültig veröffentlichte Algorithmus weicht leicht von dem implementierten ab. Das vierte Kapitel beschreibt die wesentlichen Punkte der Implementierung. Besonders wird auf Grundlagen wie Datenstrukturen und Matrixoperationen bzw. die effiziente Ermittlung der betragsmäßig größten Eigenwerte und Eigenvektoren eingegangen. In Kapitel fünf werden beispielhafte Clusterprobleme vorgestellt. Die Parameter mit denen diese Clusterprobleme anhand des Modells für zufällige Graphen generiert werden können sind an dieser Stelle diskutiert. Entworfene Methoden zur Auswertung der Eigenvektoren und die dadurch erzeilten Ergebnisse bei der Graphpartitionierung beenden das Kapitel. Eine Zusammenfassung der Arbeit und einen Ausblick auf mögliche zukünftige Untersuchungen und Arbeiten gibt abschließend Kapitel sechs. Anhang A gibt einen detaillierteren Einblick in die Implementierung, Anhang B schließlich enthält zusätzliche Grafiken, die zur Interpretation der Ergebnisse während der Tests hilfreich sein können. 1.3 Aufgabenstellung Ziel der Arbeit ist die Implementierung des in [CGL07a] vorgestellten Algorithmus’ zur Partitionierung von zufälligen Graphen. Zunächst soll eine eingepflanzte Partition mit zwei Teilmengen erkannt werden. Hierzu sind Heuristiken zu entwerfen, die die gewonnenen Eigenvektoren auswerten und anhand dieser eine Partition des Graphen ausgeben, wenn diese Partition existiert. Die Implementierung soll möglichst effizient in der Mathematiksprache Matlab erfolgen. An typischen Clusterproblemen soll der implementierte Algorithmus anschließend getestet werden. Für diese Clusterprobleme soll der minimale Durchschnittsgrad, ab dem das Verfahren unabhängig von der Knotenzahl eine existierende Partition ausgibt, bestimmt werden. 1.4 Einführung: Graph Ein Graph G = (V, E) besteht aus einer Menge V von Knoten (Vertices) und einer Menge E von Kanten (Edges). Bei gerichteten Graphen, bedeutet (u, v) ∈ E das eine Kante von Knoten u zu Knoten v führt. Dies bedeutet insbesondere, dass nicht zwangsweise eine Kante von v nach u führt. Anders in ungerichteten Graphen. Dann bedeutet {u, v} ∈ E, dass ein Weg von u nach v und umgekehrt von v nach u existiert. Wir werden im Folgenden ausschließlich ungerichtete Graphen betrachten. Von zufälligen Graphen wird gesprochen, wenn die Kanten zwischen den n Knoten des Graphen zufällig eingefügt werden. Werden die Kanten dabei unabhängig von einander mit gleicher Wahrscheinlichkeit Pr[{u, v} ∈ E] = p, u, v ∈ V, u 6= v eingefügt, entspricht der Graph dem Gn,p -Modell. Ein zufällig erzeugter ungerichteter Graph ist in Abb. 1.1 dargestellt. 2 1.5. Motivation: Partitionierung von Graphen Eine im Folgenden wichtige Eigenschaft der Knoten des Graphen ist der Grad. Definition 1.1 (Grad) Der Grad du eines Knotens u ist die Anzahl seiner direkten Nachbarn. Die Knoten v die von u aus erreichbar sind {v ∈ V : {u, v} ∈ E} heißen adjazente Knoten (Nachbarn) von u. Der Grad des Knoten u ist gerade du = |{v ∈ V : {u, v} ∈ E}|. Für einen Graph G = (V, E) wird in dieser Arbeit die Darstellung als Adjazenzmatrix verwendet. Die Adjazenzmatrix A = (auv ) eines ungerichteten Graphen G ist eine quadratische symmetrische n × n Matrix mit ( 1 , {u, v} ∈ E auv = . 0 , sonst Abb. 1.1: Ungerichteter Graph Eine Kante wird in dieser Matrix, bei ungerichteten Graphen, an Stelle auv und avu gespeichert. 1.5 Motivation: Partitionierung von Graphen Graphen sind ein weit verbreitetes und gut untersuchtes mathematisches Konstrukt zur Repräsentation von Strukturen. Insbesondere werden sie zur Beschreibung von Netzwerken und Netzen jeglicher Art verwandt. An dieser Stelle seien Dorogovtsev und Mendes zitiert, die die Bedeutung von Netzwerken und die Notwendigkeit der Untersuchung selbiger wie folgt begründen: Only recently have we realized that we reside in a world of networks. The Internet and World Wide Web (WWW) are changing our lives. Our physical existence is based on various biological networks. The extent of the development of communication networks is a good indicator of the level of development in a country. Network‘ turns out to be a central notion in our time, and the explosion of ’ interests in networks is already a social and cultural phenomenon. Aus: [MD03, S. v] Populäre Probleme im Zusammenhang mit Graphen sind bspw. das Travelling Salesman Problem (TSP) bei dem eine minimale Rundreise über alle Knoten eines Graphen gefunden werden soll, oder das Problem Kürzeste Wege, in dem ein kürzester Weg von einem Knoten u zu einem anderen Knoten v gefunden werden soll. Letzteres Problem wird täglich tausendfach von Navigationssystemen oder Routenplanern gelöst. Einen Algorithmus zum finden kürzester Wege stellte E. W. Dijkstra 1959 vor. Der in dieser Arbeit implementierte Algorithmus hingegen trifft Aussagen über die Struktur von Netzwerken bzw. Graphen. Zur näheren Erläuterung wird der Begriff der Partition eingeführt und anschließend Partitionierungsprobleme anhand von Beispielen motiviert. Definition 1.2 (Partition) Eine Partition der Knotenmenge V eines Graphen, ist deren Zerlegung von V in k nichtleere paarweise disjunkte Teilmengen V1 , V2 , . . . , Vk . 3 Kapitel 1. Aufgabenstellung und Motivation Aus der Definition folgt unmittelbar k ≤ |V |. Die Unterteilung in solche Teilmengen erfolgt nach charakteristischen Eigenschaften der Knoten. Es könnte bspw. in einem Graphen eine Teilmenge von Knoten geben zwischen deren Knoten keine Kanten existieren. In diesem Fall spricht man von einer unabhängigen Menge. Eine unabhängige Menge ist in Abb. 1.2 dargestellt. Die schwarz eingefärbten Knoten2 haben keine Kanten unter einander und bilden eine unabhängige Menge innerhalb dieses Graphen. Das Erkennen solcher Teilmengen ist im Allgemeinen ein schwieriges Problem, für dessen Lösung bislang kein Algorithmus bekannt ist, der dies in polynomieller Laufzeit löst. Aus diesem Grund werden Heuristiken, also Näherungslösungsverfahren, eingesetzt. Es werden im Folgenden einige sowohl praktische als auch theoretische Beispiele für Partitionierungsprobleme angegeben, die verdeutlichen sollen, warum es lohnenswert ist, sich mit solchen Algorithmen zu beschäftigen. Abb. 1.2: Unabhängige Menge innerhalb eines Graphen Zunächst ein praktisches Beispiel aus dem Bereich von Rechnernetzen: Beispiel 1.1 (Netzwerk) Ein Rechnernetz sei bekannt. Die Rechner seien die Knoten, deren Verbindungen die Kanten eines Graphen G. Die Frage ist nun, an welchen Stellen dieses Netzwerk auffällig dünn vernetzt ist. Wenn es gelingt, die Knoten des Netzwerkes in Gruppen bezüglich der Vernetzung einzuteilen, können zwischen den am dünnsten vernetzten Gruppen gezielt Verbindungen nachgezogen“ werden, um ” etwa die Performanz bei verteilten Berechnungen oder die Ausfallsicherheit des Netzwerkes zu erhöhen. Dieses Beispiel kann natürlich auch der Graph einer VoiceOverIP Anlage oder der Graph aller Mailserver etc. sein. Folgen soll ein populäres Beispiel aus dem Bereich der theoretischen Informatik/Graphentheorie: Beispiel 1.2 (Färbbarkeit von Graphen) Für einen ungerichteten Graphen G = (V, E) und einer Zahl k ∈ N ist die Frage zu beantworten: Gibt es eine Färbung der Knoten V mit k Farben, so dass ” keine zwei benachbarten Knoten in G dieselbe Farbe haben?“ vgl. [Sch97, S. 165]. Das Problem der Färbbarkeit kann ohne weiteres in ein Partitionierungsproblem übersetzt werden: Existiert in einem Graphen G = (V, E) eine Partition V = V1 , . . . , Vk , so dass die Teilmengen Vi jeweils unabhängige Mengen sind? Abschließend ein Beispiel aus der Biologie bzw. Medizin. 2 4 Das sind gerade die Knoten 0,7,8,29,31,32,33,34 und 35. 1.6. Auswertung der Adjazenzmatrix Beispiel 1.3 (Knochenbrüche) Das Knochenmark besteht aus Knochenzellen (Osteozyten), die mittels Zellfortsätzen miteinander verbunden sind. Sei nun der Graph G = (V, E) so modelliert, dass die Osteozyten die Menge der Knoten V darstellen und die Zellfortsätze gerade die Kanten E. Findet man in einem solchen Graph auffällig dicht bzw. dünn vernetzte Stellen, können Aussagen zu vergangenen und/oder möglichen Frakturen (Knochenbrüchen) getroffen werden. Tatsächlich wird mittlerweile versucht, das Verhalten eines solchen Netzes über die Lebenszeit zu simulieren um geeignete Gegenmaßnahmen zu altersbedingten Frakturen zu finden. Eine verwendete Herangehensweise ist dabei die Simulation des Knochenwachstums mittels der Finite Elemente Methode. Graphpartitionierung könnte dabei helfen in diesen Netzen zu einem fixen Zeitpunkt, diejenigen Stellen in einem Knochen zu finden, an denen Frakturen zu erwarten sind. 1.6 Auswertung der Adjazenzmatrix Zum Erkennen einer Partition eines Graphen werden die Adjazenzmatrizen von Graphen ausgewertet. Sortiert man die Knoten eines Graphen nach den Teilmengen der Partition, ergibt sich eine Adjazenzmatrix, wie in Abb. 1.3 dargestellt. Ein Punkt an Stelle u, v bedeutet, dass eine Kante von Knoten u zu Knoten v führt. In diesem Beispiel wurde eine Partition derart eingepflanzt, dass 2/3 der Kanten des Graphen zwischen zwei Teilmengen und 1/3 der Kanten innerhalb der Teilmengen der Knotenmenge verlaufen. Dies ist deutlich am höheren Grauwert des ersten und dritten Quadranten (rechts oben und links unten) der Matrix zu erkennen. Abb. 1.4 zeigt den gleichen Graph, wobei die Knoten nicht nach den Teilmengen der Partition sortiert wurden. Auch dieser Graph besitzt eine eingepflanzte Partition, die optisch nicht mehr zu erkennen ist. Abb. 1.3: Adjazenzmatrix, Knoten nach Partition sortiert Abb. 1.4: Adjazenzmatrix eines Graphen mit Partition, Knoten nicht sortiert Zur weiteren Verdeutlichung des Problems zeigt Abb. 1.5 einen Graph ohne eingepflanzte 5 Kapitel 1. Aufgabenstellung und Motivation Partition. Das Bild der Adjazenzmatrix gleicht nahezu dem Bild aus Abb. 1.4. Um eine Partition des Graphen anhand dessen Adjazenzmatrix zu erkennen, scheiden offensichtlich optische Methoden aus. Erfolgreich werden hingegen seit längerem Spektralmethoden verwendet. Dabei werden die Knoten anhand der Eigenvektoren der Matrix den Teilmengen der Partition zugeordnet. Die Grundlagen dieses Vorgehens beschreibt das folgende Kapitel. Abb. 1.5: Adjazenzmatrix eines Graphen ohne Partition 6 2 Grundlagen 2.1 Notationen Folgende Notationen werden in dieser Arbeit einheitlich verwendet: krk bezeichnet die l2 -Norm (auch euklidische Norm) eines Vektors r mit n Komponenten. Im weiteren Verlauf der Arbeit wird die l2 -Norm auch als Norm bezeichnet werden. v u n uX krk = t ri2 i=1 Bemerkung: ri bezeichnet die i-te Komponente des Vektors r. Um eine doppelte Indizierung zu vermeiden, werden die Komponenten eines Vektors rX mit rX (i), i = 1, . . . , |rX | bezeichnet. X kann dabei eine beliebige Zeichenkette sein. hq, ri bezeichnet das Skalarprodukt der Spaltenvektoren q und r. Die beiden Vektoren haben jeweils n Komponenten. hq, ri = n X qi · ri = q T r i=1 O(g(n)) ist wie folgt definiert: Es existiert ein c ∈ R+ , so dass für alle n ≥ n0 gilt f (n) = O(g(n)) ⇐⇒ f (n) ≤ c · g(n). Bemerkung: Für alle n ≥ n0 ist f (n) durch c · g(n) nach oben beschränkt. Ω(g(n)) ist wie folgt definiert: Es existiert ein c ∈ R+ , so dass für alle n ≥ n0 gilt f (n) = Ω(g(n)) ⇐⇒ f (n) ≥ c · g(n). Bemerkung: Für alle n ≥ n0 ist f (n) durch c · g(n) nach unten beschränkt. Θ(g(n)) ist definiert als: f (n) = Θ(g(n)) ⇐⇒ f (n) = O(g(n)) ∧ f (n) = Ω(g(n)) Weitere Notationen, die erst an späterer Stelle auftauchen, werden dort eingeführt. 7 Kapitel 2. Grundlagen 2.2 Eigenwerte und Eigenvektoren Eigenvektoren sind diejenigen vom Nullvektor verschiedenen Vektoren, deren Richtung durch Anwendung der Matrix auf den Vektor nicht verändert wird. Durch Anwendung der Matrix auf den Vektor wird dieser um den Eigenwert gestreckt. Das Eigenwertproblem wird wie folgt eingeführt: λx = Ax (2.1) Dabei sei λ ein Skalar, A eine n × n Matrix und x ein Spaltenvektor der Länge n. Gesucht sind nun jene λ, die dieses Gleichungssystem für x = 6 0 erfüllen. Definition 2.1 (Eigenwerte, Eigenvektoren und Spektrum) Jede der n Lösungen λ1 , λ2 , . . . , λn von Gleichung 2.1 heißt Eigenwert der Matrix A. Jede nicht triviale Lösung xi des Gleichungssystems (2.1) mit λ = λi heißt zu λi gehörender Eigenvektor. Die Menge aller Eigenwerte ist das Spektrum der Matrix A. 2.3 Eigenschaften von Eigenvektoren Die betrachteten Matrizen – die Adjazenzmatrizen ungerichteter Graphen – sind reell, quadratisch und symmetrisch. Die Schreibweise dafür ist A ∈ Rn×n mit A = AT bzw. aij = aji . Alle Elemente solcher Matrizen sind symmetrisch bezüglich der Hauptdiagonalen. Es gelten für Matrizen dieser Art die folgenden beiden Aussagen (vgl. auch [Str03, S. 333]): 1. Alle Eigenwerte symmetrischer, reeller Matrizen sind reell. 2. Die Eigenvektoren zu verschiedenen Eigenwerten sind orthogonal zueinander. (Zwei Vektoren q und r stehen genau dann orthogonal aufeinander, wenn deren Skalarprodukt hq, ri = 0 ist. Die Orthogonalität zweier Vektoren q und r wird mit q ⊥ r bezeichnet.) 2.4 Symbolische Berechnung von Eigenwerten und Eigenvektoren Gleichung 2.1 führte das Eigenwertproblem ein. Sei nun I die identische Matrix, also die Matrix mit nur Einsen auf der Hauptdiagonalen, sonst Nullen, dann kann Gleichung 2.1 umgeformt werden zu: Ax − λIx = 0 (A − λI)x = 0 Da der Eigenvektor x ungleich dem Nullvektor ist, muss der Ausdruck (A−λ·I) verschwinden. Es muss gelten: det(A − λI) = 0 (2.2) 8 2.5. Numerische Berechnung von Eigenwerten und Eigenvektoren wobei det(A − λI) = a11 − λ a12 .. . an1 a12 · · · a1n a22 − λ · · · a2n .. . . .. . . . an2 · · · ann − λ = Pn (λ) Pn (λ) ist ein Polynom n-ten Grades, das charakteristisches Polynom genannt wird. Die n Nullstellen bzw. Lösungen dieses Polynoms sind gerade die Eigenwerte von A. Um die Eigenvektoren xi zu den Eigenwerten λi , i = 1, . . . , n zu berechnen, muss jeweils das Gleichungssystem (A − λi I)xi = 0 gelöst werden. Es ist dabei offensichtlich, dass diese Methode für sehr große Matrizen als adäquate Lösung ausscheiden muss, denn schon für Matrizen der Größe 4 × 4 existiert keine geschlossene Lösungsformel zur Berechnung der Determinante. Es müsste dann das Verfahren der Adjunkten oder Kofaktoren (Entwicklungssatz nach Pierre-Simon Laplace) angewandt werden, vgl. [Göh99, S. 6]. Zur Berechnung der Determinante Dn einer n × n großen Matrix muss nach diesem Verfahren n mal eine Determinante Dn−1 gelöst werden. Die n Determinanten der Größe Dn−1 sind im Allgemeinen verschieden. Diese Vorgehensweise benötigt dann n · (n − 1) · (n − 2) · ... · 3 Berechnungen. Für Determinanten von 3 × 3 Matrizen existiert eine geschlossene Lösungsformel (z.B. nach Pierre Frederic Sarrus), für die eine Komplexität von Ω(1) angenommen werden kann. Das ist für eine Determinante einer n × n Matrix mit n > 4 insgesamt Ω(n!/2) · Ω(1) = Ω(n!). 2.5 Numerische Berechnung von Eigenwerten und Eigenvektoren Wichtig für die numerische Berechnung von Eigenwerten und Eigenvektoren ist, dass es sich bei Adjazenzmatrizen um reelle symmetrische Matrizen handelt. Der Fall von komplexen Eigenwerten und deren Berechnung muss deswegen nicht betrachtet werden. Das später vorgestellte QR-Verfahren funktioniert ausschließlich für quadratische, reelle Matrizen. 2.5.1 Definitionen Zur Vereinfachung der Schreibweisen werden die folgenden Begriffe aus der (numerischen) Mathematik eingeführt: Definition 2.2 (Orthonormale Matrix) Eine Matrix Q heißt orthonormal, wenn ihre Spalten qi orthogonal zueinander stehen und die Norm kqi k jeder Spalte i gerade 1 ist. Für orthonormale Matrizen gilt: QT Q = I (vgl. [Str03, S. 229]). In unserem Fall hat Q zusätzlich die Eigenschaft, dass es sich um eine quadratische n × n Matrix handelt. Die inverse Matrix Q−1 mit QQ−1 = I kann bei diesen Matrizen sehr einfach erhalten werden, denn es gilt: Q−1 = QT . Die Inverse von Q ist also gleich ihrer Transponierten. I sei hierbei wieder die Einheitsmatrix. 9 Kapitel 2. Grundlagen Dass die Beziehung QT Q = I gilt, wird im Folgenden erläutert. Dazu verdeutliche man sich, was bei der Multiplikation dieser Matrizen passiert. Da Q eine n × n Matrix ist, ist auch QT eine n × n Matrix. Die Einheitsmatrix I hat ebenfalls die Dimension n × n. − q1T − 1 0 ··· 0 | | | − qT − 0 1 ··· 0 2 T (2.3) = . . . Q Q= q1 q2 · · · qn .. .. = I . . . . . . . . | | | − qnT − 0 0 ··· 1 Da die Spalten qi von Q orthogonal zueinander sind, ergibt das Skalarprodukt der Vektoren qjT und qi für i 6= j gerade 0. Nur im Fall i = j, woraus die Einträge der Hauptdiagonalen der Ergebnismatrix bestehen, ist das Ergebnis gerade hqi , qi i = kqi k2 = 1. Dass QT gleichzeitig die rechtsinverse zu Q ist (dann gilt auch QQT = QQ−1 = I) wird wie Folgt gezeigt: Beweis. Für die von uns betrachteten Matrizen aus Rn×n gilt: wenn A · C = I und C · B = I folgt daraus A = B. Wegen Rang(Q) = Rang(QT ) = n existiert Q−1 mit QQ−1 = I. Damit gilt auch: Q−1 = (QT Q)Q−1 = QT (QQ−1 ) = QT (2.4) Wegen (2.4), müssen auch die Zeilen von Q paarweise orthogonal sein und 1, i = 1, . . . , n. q 2 = qij j=1 Pn Definition 2.3 (Hessenberg Matrix) Eine n × n Matrix besitzt Hessenberg-Form, wenn aij = 0 für 1 ≤ j ≤ i − 2, i = 3, . . . , n. Eine Matrix besitzt genau dann Hessenberg-Form, wenn alle Einträge unterhalb der zweiten Nebendiagonale1 Null sind: h11 h12 ··· h1n h21 h22 ··· h2n 0 h32 ··· h3n .. .. . . . . . . . . . . . 0 ... 0 hn−1n hnn Im hier behandelten Fall von symmetrischen Matrizen ergibt eine Ähnlichkeitstransformation2 von A zu einer Matrix in Hessenberg-Form AH , dass AH sogar tridiagonal ist. Alle Elemente von AH , außer die Hauptdiagonale und der beiden Nebendiagonalen, sind dann 0. Eine Matrix in Hessenberg-Form sei im Folgenden mit H bezeichnet. Um eine Matrix 1 Zur Bezifferung der Nebendiagonalen: die Hauptdiagonale sind alle Elemente aii einer Matrix von links oben nach rechts unten. Die erste Nebendiagonale, sind die Elemente darüber (bzw. rechts daneben), die zweite Nebendiagonale sind alle Elemente unterhalb der Hauptdiagonale (bzw. links der Hauptdiagonale). 2 Die Ähnlichkeitstransformation eine Matrix A ist deren Darstellung in einer Basis. Dies geschieht durch ebene Rotation. Dabei bleiben die Eigenwerte der Matrix erhalten. Die Eigenvektoren von A erhält man, indem die Eigenvektoren von A in der neuen Basis durch den inversen Rotationsoperator in die ursprüngliche Basis von A zurück transformiert. 10 2.5. Numerische Berechnung von Eigenwerten und Eigenvektoren in Hessenberg-Form zu überführen werden Householder -Transformationsmatrizen verwendet. Wie die Matrizen für die Householder-Transformation erhalten werden können, erläutert die folgende Analyse des QR-Verfahrens. 2.5.2 Das QR-Verfahren Das QR-Verfahren wurde unabhängig von J.G.F. Francis 1961, 1962 und von V.N. Kublanovskaja 1961 eingeführt: die Matrix Ai , i = 0, . . . , k mit A0 = A, wird in zwei ebenfalls n × n große Matrizen Qi und Ri zerlegt, wobei gelten soll: Ai = Qi Ri . Qi sei dabei eine orthonormale Matrix und Ri eine obere Dreiecksmatrix. Man erhält eine Matrix Ai+1 mittels Ai+1 = Ri Qi . Ai = Qi Ri , Ai+1 = Ri Qi , k = 0, . . . , m (2.5) Die Matrizen Ai und Ai+1 sind dabei aber nicht identisch, da die Matrixmultiplikation nicht kommutativ ist. Nach k solcher Iterationen befinden sich auf der Hauptdiagonale der Matrix Rk gerade die (bzw. eine sehr gute Annäherung der) Eigenwerte der Matrix A und die Spalten der Matrix Qk sind gerade die zugehörigen normierten Eigenvektoren. Bei reellen Eigenwerten kann dieses Verfahren beliebig exakt durchgeführt werden. Dazu muss lediglich die Anzahl k der Iterationen beliebig erhöht werden. Ein Satz über die Konvergenz des beschriebenen Verfahrens ist in [GO95, S. 222] als Satz 7.2.1 angegeben. Die Zerlegung der Matrix A in A = QR ist für allgemeine Matrizen aufwändig. Jede dieser Zerlegungen erfordert O(n3 ) Rechenschritte. Deswegen wird A zunächst auf HessenbergForm gebracht. Durch die Tridiagonalität der symmetrischen Matrix in Hessenberg-Form, wird dieser Aufwand auf O(n) reduziert. Deswegen ist es erstens lohnend, die Matrix A auf Hessenberg-Form zu bringen, bevor diese QR-Faktorisiert wird und zweitens eine wichtige Eigenschaft, dass die Matrix Ai+1 = Ri Qi wiederum eine tridiagonale Matrix ist. Es ergibt sich dann folgender Algorithmus: Algorithmus Eingabe: Ausgabe: 1. 2. 3. 4. 5. 6. 7. Eine quadratische Matrix A. Eine Matrix R deren Hauptdiagonale gerade die Eigenwerte von A sind und eine Matrix Q deren Spalten die zu den Einträgen von R gehörenden Eigenvektoren von A. Setze A0 = A. Reduziere A0 durch Householder -Transformationen auf Hessenberg-Form: H0 = P AP −1 . Die Matrix P ist orthonormal. Dann gilt wieder P −1 = P T . Berechne Qi und Ri , so dass Hi = Qi Ri mittels Givens-Transformation. Berechne Hi+1 = Ri Qi . Gehe zu 3. solange i ≤ k. Setze Q = P T Qk . Gibt Rk und Q zurück. Algorithmus 2.1: Einfache Form des QR-Verfahrens ohne Shift. Die Grundlage des Verfahrens ist, dass die Matrix A zunächst auf Hessenberg-Form H gebracht und anschließend Hi mit H0 = H durch Ähnlichkeitstransformation in eine Matrix Hi+1 überführt wird. Ähnliche Matrizen besitzen die gleichen Eigenwerte. Die Ähnlichkeit 11 Kapitel 2. Grundlagen der Matrizen ist leicht einzusehen: −1 Hi = Qi Ri = Qi Ri Qi kQ−1 i = Qi Hi+1 Qi . (2.6) Hi+1 ist offensichtlich die Matrix Hi in der Basis Qi . Die in Schritt 2 verwendete Matrix P erhält man mit P = Pn−1 . . . P2 , wobei Pj gerade diejenige Householder-Transformationsmatrix ist, die die j-te Spalte von A zu den bereits orthogonalisierten Spalten a1 , . . . , aj−1 orthogonalisiert. Pj ist eine symmetrische orthogonale Matrix der Form Pj = I − 2wj wjT . Für die Vektoren wj gilt: wjT wj = 1. Um die Matrix P2 zu erhalten, die die erste Spalte a1 von A so rotiert, dass alle Elemente a31 , . . . , an1 = 0 werden, wird w2 wie folgt gebildet (vgl. [GO95, S. 224]): w2 = µ2 u2 mit v uX u n 2 aj1 s2 = − sign(a21 )t u2 = (0, a21 − s2 , a31 , . . . , an1 )T q µ2 = 1/ 2s22 − 2a21 s2 (2.7) j=2 s2 trägt dabei aus Gründen der numerischen Stabilität das inverse Vorzeichen zu a21 . Die Matrix P3 wird mit dem Vektor w3 gebildet, bei dem die ersten zwei Einträge gerade 0 sind und die restlichen analog zu (2.7) erzeugt werden. Entsprechend werden die weiteren Matrizen P4 , . . . , Pn−1 gebildet. Aus dieser Bildungsvorschrift ist leicht zu sehen, dass die Matrix P orthonormal ist. Bei existierenden numerischen Implementierungen der Householder-Transformation wird auf das explizite Erzeugen der Vektoren wj verzichtet. Man berechnet lediglich den Vektor uj und µj . Für weitergehende Ausführungen dazu sei auf Literatur, wie [GO95, S. 139 ff.] verwiesen. Ohne Beweis sei hier folgender Satz aus [GO95, S. 224] angegeben: Satz 2.1: Eine reelle (n × n) Matrix A kann durch n − 2 Householder-Ähnlichkeitstransformationen auf Hessenberg-Form gebracht werden. Ist A symmetrisch, so ist die Hessenberg-Form tridiagonal. Es ist effizient möglich eine beliebige Matrix A in Hessenberg-Form zu bringen. Da dies nur einmal am Anfang des QR-Verfahrens geschehen muss, beschleunigt dies das gesamte Verfahren. In Schritt 3 wird die Matrix Hi in die Matrizen Qi und Ri zerlegt. Das Vorgehen ist dabei: erzeuge zunächst Ri und danach Qi , damit die Gleichung erfüllt ist“. (Beim Orthogonali” sierungsverfahren nach Gram und Schmidt geht man gerade anders vor. Dort wählt man zunächst die orthogonalen Vektoren und erhält R als Abfallprodukt“.) Dabei werden suk” zessive auf der unteren Dreiecksmatrix Nullen durch Rotation erzeugt. Die dabei zum Einsatz kommenden ebenen Rotationsmatrizen Gij , die nach Givens benannt sind, haben folgende 12 2.5. Numerische Berechnung von Eigenwerten und Eigenvektoren Gestalt: Gij 0 . 0 .. 1 cij = ... −sij 0 ··· 1 0 .. . . sij 1 .. . .. . .. . 1 cij 1 .. ··· 0 . 0 1 Dabei ist cij = cos(]ai , aj ) und sij = sin(]ai , aj ). Schritt 4 erzeugt die zu Hi ähnliche Matrix Hi+1 , (vgl. 2.6). Die in Schritt 2 hergestellte Struktur einer tridiagonalen Matrix bleibt dabei erhalten. Die Multiplikation einer oberen Dreiecksmatrix mit einer tridiagonalen Matrix ergibt gerade eine tridiagonale Matrix. Schritt 6 transformiert die Eigenvektoren von Hk zurück in Eigenvektoren von A. In Qk stehen die (bzw. sehr gute Näherungen der) Eigenvektoren von Hk . Die Eigenvektoren werden mit dem Operator P −1 zurück transformiert. Es gilt für die Eigenvektoren y von H und x von A, die zum Eigenwert λ gehören mit P −1 = P T folgende Beziehung: Ax = AP T y = P T P AP T y = P T Hy = λP T y = λx P ist dabei die in Schritt 2 verwendete Householder-Matrix. Rk muss nicht durch P T transformiert werden, da die Eigenwerte bei einem Basiswechsel (einer Ähnlichkeitstransformation) einer Matrix nicht verändert werden. Hk hat die gleichen Eigenwerte wie A. In [Str03, Seite 491 f.] werden zum QR-Verfahren noch folgende Anmerkungen gemacht: 1. Das QR-Verfahren liefert sehr schnell eine akzeptable Näherung des n-ten Eigenwerts. Damit kann jeweils die letzte Zeile und letzte Spalte entfernt werden. Das Problem vereinfacht sich sukzessive. 2. Der Erfolg (im Sinne der Konvergenzgeschwindigkeit) des Verfahrens wird verbessert, wenn man die Hessenberg Matrix nach i Iterationen Hi um Vielfache der Einheitsmatrix I verschiebt, bevor man sie QR-Faktorisiert und anschließend RQ zurück verschiebt (sog. Shift): Hi − cI = QR Hi+1 = RQ + cI Punkt zwei wird ebenfalls in [GO95] genannt. Zu Ausführungen wie der Verschiebungsparameter c erhalten werden kann und warum dies die Konvergenz des Verfahrens beschleunigt, sei auf die zitierte Literatur verwiesen. 13 Kapitel 2. Grundlagen 2.5.3 Laufzeit des QR-Verfahrens Jede Givens-Rotation in Schritt 3 benötigt nach [GO95, S. 227], bei triagonalen Matrizen, O(n) Operationen. Die Reduktion der Matrix A0 auf Hessenberg-Form in Schritt 2 erfordert O(n3 ) Operationen, vgl. [GO95, S. 224]. Die Matrixmultiplikation in Schritt 6 benötigt maximal O(n3 ) Operationen. Wenn die Anzahl der Iterationen k ≤ n2 ist, so hat das QR-Verfahren eine Laufzeit von O(n3 ). Nach [Str03, S. 292] ist k ≤ n2 ein realistische Abschätzung. Die Aussage ist, dass oftmals bereits 4 Iterationen genügen um den größten Eigenwert zu bestimmen. Damit hätte man zur bestimmung der n Eigenwerte k = 4n. Das QR-Verfahren ist deutlich effizienter als der diskutierte Algorithmus zum Lösen des Eigenwertproblems mittels des charakteristischen Polynoms. 2.6 Repräsentation von Strukturen einer Matrix durch Eigenvektoren Zur Erläuterung, warum bestimmte Eigenvektoren die Struktur einer Matrix beschreiben können, werden zwei Gedankenexperimente beschrieben. Ein Beweis, dass Eigenvektoren existieren die die im folgenden Beschriebenen Eigenschaften haben ist in [CGL07a, CGL07b] zu finden. Als erstes Gedankenexperiment sei A die Adjazenzmatrix eines regulären Graphen. Reguläre Graphen haben die Eigenschaft, dass die Grade der Knoten gleich sind. Jeder Knoten hat also die gleiche Anzahl r Nachbarn. Das bedeutet für die Adjazenzmatrix, dass in jeder Zeile und Spalte genau r Einsen stehen. Wendet man die Matrix A nun auf den Vektor x1 mit x1 (i) = 1, i = 1, . . . , n an, so gilt: 1 1 .. .. A . = r . . (2.8) 1 1 Also ist x1 ein Eigenvektor von A mit zugehörigem Eigenwert r (vgl. 2.1). Als zweites Gedankenexperiment sei die Matrix A nun folgendermaßen definiert: A bestehe aus den |V2 | × |V2 | großen Matrizen A1 und A2 in folgender Weise: A = A1 A2 A2 A1 . Seien nun A1 und A2 wieder die Adjazenzmatrizen von regulären Graphen mit der Eigenschaft, dass du in A1 gerade r1 für u ∈ V1 und du in A2 gerade r2 für u ∈ V2 sei (in Matrix A1 stehen in jeder Zeile (und Spalte) genau r1 Einsen, in A2 in jeder Zeile (und Spalte) genau r2 Einsen). Wendet man A auf den Vektor x1 an, so gilt: 1 1 .. .. A . = (r1 + r2 ) . (2.9) 1 14 1 2.6. Repräsentation von Strukturen einer Matrix durch Eigenvektoren ( 1 Ein zu x1 orthogonaler Vektor ist x2 mit: x2 (i) = −1 1 .. . 1 A = (r − r ) 1 2 −1 .. . −1 , i = 1, . . . , |V2 | . Dann gilt: , i = |V2 | + 1, . . . , |V | 1 .. . 1 −1 .. . −1 (2.10) Auch x2 ist ein Eigenvektor von A mit dem Eigenwert (r1 − r2 ). Die Matrix A kann nun so interpretiert werden: der Graph dessen Adjazenzmatrix gerade A ist, besteht aus zwei Knotenmengen V1 und V2 . Ein Knoten u ∈ V1 hat gerade r1 Nachbarn in V1 und r2 Nachbarn in V2 . Ein Knoten v ∈ V2 hat gerade r1 Nachbarn in V2 und r2 Nachbarn in V1 . Für r1 6= r2 besteht der Graph aus zwei Clustern, die innerhalb eines Clusters eine andere Vernetzung als zwischen den Clustern aufweisen. Der Eigenvektor x2 repräsentiert gerade die Partition des Graphen G. Für u ∈ V1 ist x2 (u) = 1, für u ∈ V2 ist x2 (u) = −1. Auf diese Weise kann mittels Eigenvektoren zu verschiedenen Eigenwerten eine Aussage über die Partition eines Graphen getroffen werden. Anschließen soll motiviert werden, dass es bei zwei Teilmengen einer Partition gerade die zwei Eigenvektoren zu den beiden betragsmäßig größten Eigenwerten sind, anhand derer Aussagen zur Partition des Graphen getroffen werden können. Die Matrix aus Gedankenexperiment zwei besitzt weitere n − 2 Eigenwerte λi , i = 3, . . . , n. Die Eigenvektoren zu verschiedenen Eigenwerten sind paarweise orthogonal. Tritt ein Eigenwert λi l-fach auf, so ist der Eigenraum3 l dimensional. Auch dann kann eine orthogonale Basis dieses Eigenraums gefunden werden. Sei xi einer dieser Eigenvektoren. Wegen Punkt 2. in Abschnitt 2.3 gilt: xi ⊥ x1 , x2 . Dar2 2 = (1, . . . , 1, 0, . . . , 0)T und xi ⊥ x1 −x = (0, . . . , 0, 1, . . . , 1)T . aus folgt unmittelbar xi ⊥ x1 +x 2 2 Deswegen ist die Summe der ersten n2 Komponenten von xi und auch die Summe der letzten n 2 Komponenten von xi gerade 0. Bei der Multiplikation xi · A wird der Eigenwert wegen der gerade beschriebenen Eigenschaft von xi nahe bei 0 liegen. Lemma 8 aus [CGL07b] beweist dieses Verhalten der Eigenwerte. Dort √ wird gezeigt, dass zwei Eigenwerte mit Betrag Θ(w0 ) und n − 2 Eigenwerte mit Betrag O( w0 ) existieren. Dabei ist w0 gerade der erwartete Durchschnittsgrad der Knoten. Abb. 1.3 zeigt eine Adjazenzmatrix mit der Eigenschaft der Matrix A aus Gedankenexperiment zwei. Nummeriert man die Knoten beliebig um, erhält man ein Bild der Adjazenzmatrix wie in Abb. 1.4 dargestellt. Die Umordnung der Knoten hat keine Auswirkungen auf die Eigenwerte der Adjazenzmatrix. Die Eigenvektoren zu den beiden betragsmäßig größten Eigenwerten haben weiterhin die gewünschte Eigenschaft. Die Komponenten der Eigenvektors x2 sind dann lediglich umsortiert, in der selben Weise, wie die Knoten umnummeriert wurden. 3 Der Eigenraum ist der Raum, der durch die Eigenvektoren zu einem Eigenwert aufgespannt wird. 15 3 Modell und Algorithmus 3.1 Modell für zufällige Graphen Für unsere Tests in Kapitel fünf beschränken wir uns auf den Spezialfall von Gnp Graphen mit eingepflanzter Partition. Wir untersuchen dabei den Fall dünner Graphen, wobei p · n = O(1) ist. Das hier vorgestellte Modell aus [CGL07b] kann weitaus komplexere zufällige Graphen mit eingepflanzter Partition erzeugen, die wir hier allerdings nicht betrachten wollen. Untersuchungen zu Graphen mit anderen erwarteten Gradsequenzen werden Inhalt nachfolgender Arbeiten sein. Sei V = {1, . . . , n} die Menge der Knoten. V wird in k disjunkte Mengen V1 , . . . , Vk mit festem k geteilt. Dabei wird angenommen, dass die Mächtigkeit der Mengen |Vi | ≥ δn sei, für beliebig kleines aber konstantes δ > 0. Für jedes u ∈ V sei nun ψ(u) die Nummer der Teilmenge zu der Knoten u gehört, so dass u ∈ Vψ(u) . Des Weiteren existiert eine k × k große Matrix D = (dij ) mit nicht-negativen konstanten Einträgen. Die Knoten des Graphen werden gewichtet, indem jedem Knoten u ∈ V das Gewicht wu zugewiesen wird. ist P Dieses Gewicht in unseren Testfällen für alle Knoten konstant wu = w. Dann sei W = wu und w = W das n arithmetische Mittel der wu , hier gerade w. Der Graph G = (V, E) wird nun konstruiert indem jede Kante {u, v} unabhängig mit der 1 Wahrscheinlichkeit Pr[{u, v} ∈ E] = W · wu · wv · dψ(u),ψ(v) = dψ(u),ψ(v) · w n eingefügt wird. Die Parameter müssen dabei natürlich so gewählt werden, dass die Wahrscheinlichkeit jeder Kante im Intervall [0, 1] liegt. In Abhängigkeit von D kann nun eine Vielzahl zufälliger Instanzen von Clusterproblemen erzeugt werden. 0 Der erwartete Grad eines Knotens u, mit wu bezeichnet, ist gerade 0 wu = wu X w X · wv · dψ(u),ψ(v) = · dψ(u),ψ(v) . W n v∈V (3.1) v∈V Zur korrekten Funktion des im nächsten Abschnitt vorgestellten Algorithmus, gelten für die Modellparameter folgende Restriktionen: 1. Die Matrix D hat vollen Rang (⇐⇒ D besitzt k linear unabhängige Spalten und Zeilen). 2. w = w ≥ d, wobei d = d(D, δ) eine hinreichend große Konstante sei. Das asymptotische Verhalten ist nun, dass die Anzahl der Knoten n wächst, während D, k und δ (und damit auch d) fest bleiben. Die Knotengewichte für das Modell können dabei beliebig (unter Beachtung der Restriktionen für die Modellparameter), insbesondere in Abhängigkeit zu n gewählt werden um verschiedene Klassen von Clusterproblemen in Graphen zu erzeugen. Die Vi zur Erzeugung der Klassen von Clusterproblemen können ebenfalls mit |Vi | ≥ δn beliebig gewählt werden. D ist eine symmetrische Matrix: wenn eine Kante einen Knoten aus Teilmenge V1 mit einem Knoten aus der Teilmenge V2 verbindet, verbindet die gleiche Kante eben diese Knoten auch in umgekehrter Richtung. Es wäre unsinnig die selbe Kante mit verschiedenen Wahrscheinlichkeiten einzufügen. 16 3.2. Der Partitionierungsalgorithmus 3.2 Der Partitionierungsalgorithmus Die Implementierung des folgenden Algorithmus erfolgt zunächst für den einfachen Fall von k = 2 Teilmengen einer Partition. Werden für diesen Fall zufriedenstellende Heuristiken gefunden, wäre ein nächster Schritt, den Algorithmus für beliebige, jedoch Konstante k Teilmengen zu implementieren: an Stelle der beiden Eigenvektoren s1 und s2 würden dann die k Eigenvektoren s1 , . . . , sk ausgewertet. In der Beschreibung des Algorithmus wird folgende zusätzliche Notation verwendet: • Für U ⊂ N und eine gegebene Matrix M = (mij ) wird M|U konstruiert indem alle Einträge mij = 0 gesetzt werden, wenn i 6∈ U oder j 6∈ U . Der zu implementierende Algorithmus aus [CGL07a]: Algorithmus Eingabe: Die Adjazenzmatrix A = (auv ) eines Graphen G = (V, E). 0 0 Ausgabe: Eine Partition V1 , V2 der Knotenmenge V . P 1. Berechne den Durchschnittsgrad d¯ = nu=1 du /n und setze dm = d¯ 0.9 . 2. Konstruiere Matrix M = (muv ) mit muv = d¯ 2 · auv /(du · dv ). 3. Sei U = {u ∈ V : du ≥ dm /2}. 4. Konstruiere die Matrix M ∗ = M|U und berechne die Eigenvektoren vom M ∗ . 5. s1 und s2 seien die zwei orthonormalen Eigenvektoren von M ∗ zu den beiden betragsmäßig größten Eigenwerten. 6. Mindestens einer der Vektoren s1 , s2 zeigt die Eigenschaft, dass alle außer O(n/d¯ 0.22 ) viele Einträge nahe bei genügend verschiedenen Konstanten c1 , c2 liegen. Für diese √ 0 Konstanten gilt: |c1 − c2 | > 1/(4 · n). In Vi seinen nun all jene Indizes, die nahe bei 0 ci für i = 1, 2 liegen. Die übrigen Indizes werden beliebig auf die Vi verteilt. Algorithmus 3.1: Partitionierung von Graphen An dieser Stelle folgt eine Analyse des Algorithmus zum besseren Verständnis der Wirkungsweise. Die in Schritt 2 konstruierte Matrix M stellt eine normalisierte Adjazenzmatrix des Graphen dar. Dabei wird jeder Eintrag mit dem Quadrat des Durchschnittsgrades, geteilt durch das Produkt der Grade der beteiligten Knoten, multipliziert. Diese Normalisierung hat auf unseren Fall von Gnp -Graphen mit eingepflanzter Partition nahezu keinen Einfluss. Wirkungsvoll wird diese Normalisierung erst bei Graphen mit schiefen“ Gradsequenzen. Solche Graphen ” sind nicht Bestandteil unserer Untersuchungen. Die Menge U , die in Schritt 3 konstruiert wird enthält nun gerade all diejenigen Knoten, deren Grad du ≥ dm /2 ist. Dieser Schritt ist enorm wichtig, da vereinzelte große Einträge in der normalisierten Adjazenzmatrix das Spektrum der Matrix negativ beeinflussen. Solche großen Einträge entstehen gerade dann, wenn es Knoten mit sehr kleinem Grad gibt (wegen der Multiplikation in Schritt 2). Die Folge dieser großen Einträge wäre, dass Eigenvektoren die keine Information über die Partition des Graphen besitzen, etwa die Eigenvektoren xi , i = 3, . . . , n aus Abschnitt 2.6, einen größeren Eigenwert haben als der Eigenvektor x2 . Der dargestellte Algorithmus wäre unwirksam, würden diese Einträge nicht entfernt. Mit Hilfe der Menge U wird anschließend in Schritt 4 die Matrix M ∗ = M|U konstruiert. Zeile mu und Spalte mu werden genau dann in M ∗ übernommen, wenn u ∈ U . Die Berechnung 17 Kapitel 3. Modell und Algorithmus der Eigenvektoren stellt, wie in Abschnitt 2.5 gezeigt, für reelle symmetrische Matrizen kein Problem dar. Wie in Abschnitt 2.6 begründet, haben die Eigenvektoren zu den betragsmäßig größten Eigenwerten die gewünschte Eigenschaft. Es existieren, wie in Kapitel 4 gezeigt werden wird, sehr komfortable Bibliotheken und Funktionen um Schritt 4 und Schritt 5 zusammen zu implementieren. Das Neue dieser Arbeit stellt die Implementierung von Schritt 6 dar. In [CGL07a] wird √ gezeigt, dass die beiden Konstanten c1 und c2 mit |c1 −c2 | > 1/(4· n) existieren. Ohne Kenntnis der Modellparameter besteht aber keine Möglichkeit, diese Konstanten zu bestimmen. Es müssen Verfahren entworfen werden, die ohne Kenntnis der Konstanten nur anhand der beiden Eigenvektoren s1 und s2 die Partitionierung des Graphen, wenn diese existiert, erkennen und ausgeben. In Abschnitt 4.6 werden zwei Heuristiken vorgestellt, die dies ermöglichen. Zur Erzeugung geeigneter Tests müssen Parameter für die Grapherzeugung gewählt werden. Die Frage der Parameter wird in Kapitel fünf behandelt und mit Beispielen unterlegt. 3.3 Laufzeitanalyse des Partitionierungsalgorithmus Abschließend einige Bemerkungen zur Laufzeit der vorgestellten Algorithmus. In Schritt 1 müssen die Summen der n Zeilen der Adjazenzmatrix gebildet werden. Der Aufwand der Division sei O(1), das Potenzieren von d¯ kann ebenso mit O(1) angenommen werden. Schritt 1 benötigt in Summe also O(n · n · 1) + O(1) = O(n2 ) Rechnungen. Das Normalisieren der Matrix A zu M in Schritt 2 benötigt O(n · (n − 1)/2) = O(n2 ) Rechnungen. Dies folgt, da die Adjazenzmatrix A maximal n · (n − 1)/2 Kanten abspeichert. Die Konstruktion der Menge U in Schritt 3 erfordert einen Schleifendurchlauf über die gesamte Knotenmenge. Der Vergleich mit dm /2 ist konstant, damit benötigt Schritt 3 O(n) Rechenschritte. Um Zeilen und Spalten aus M in Schritt 4 zu streichen, sind O(n2 ) Rechenschritte notwendig. Die anschließende Berechnung der Eigenwerte und Eigenvektoren benötigt, wie in Abschnitt 2.5 angegeben, O(n3 ) Rechenschritte. Für die Partitionierung der Knotenmenge anhand eines Eigenvektors kann, wie später in Abschnitt 4.6 gezeigt, O(n) angenommen werden. Insgesamt ergibt das für den Algorithmus eine Laufzeit von O(n3 ). Den größten Anteil an der Laufzeit hat dabei das Berechnen der Eigenwerten und Eigenvektoren, gefolgt von den Matrixoperationen zum Normalisieren der Adjazenzmatrix. 18 4 Implementierung 4.1 Programmiersprache / Umgebung Die Umsetzung des Algorithmus erfolgte mittels der Mathematiksprache Matlab1 . Diese zeichnet sich besonders durch die hervorragende Unterstützung des Datentyps Matrix und durch integrierte Funktionen zum Darstellen der Ergebnisse aus. Somit war es nicht notwendig aufwändige Frameworks zu konstruieren bzw. Bibliotheken und Klassen zum Umgang mit Matrizen, zum Berechnen von Eigenwerten und Eigenvektoren, etc. zu erstellen. 4.2 Aufbau des Programms Das erstellte Programm gliedert sich in drei Teile. Diese Gliederung ist in Tabelle 4.1 dargestellt. Die Dokumentation der Funktionsaufrufe sowie die jeweiligen Parameterlisten sind in Anhang A angegeben. Inhalt Erzeugung eines zufälligen Graphen nach dem in Abschnitt 3.1 vorgestellten Modell. Ausführung der Schritte eins bis fünf: Berechnen des Durchschnittsgrades, Konstruktion des Matrix M ∗ , Berechnung der zwei größten Eigenwerte und zugehöriger Eigenvektoren Ausführung von Schritt sechs: Erzeugung der Partitionen mittels einem der beiden Eigenvektoren zu den beiden betragsmäßig größten Eigenwerten von M ∗ . Dazu wurden zwei Heuristiken entworfen und implementiert. Matlab Datei al2 createGraph.m al2 step1to5.m al2 step6 2H.m Tabelle 4.1: Teile des erstellten Programms In diesem Kapitel werden nachfolgend lediglich die für die Laufzeit wichtigen Grundlagen der Implementierung dargelegt. Beispiele unterschiedlicher Implementierungsvarianten mit gemessenen Laufzeiten sind ebenfalls im Anhang A zu finden. 4.3 Verwendete Datenstrukturen Die Darstellung eines Vektors in einem Rechner erfolgt typischerweise in einem Feld, die Darstellung einer Matrix als Feld von Feldern. Ein Graph mit n Knoten hat in seiner Adjazenzmatrixdarstellung2 einen Speicherplatzbedarf von n2 . Allerdings interessieren lediglich 1 2 Bei der Erstellung der Matlab Dateien wurde das Buch [Beu06] sowie die Matlab Hilfe ausgiebig genutzt. Das Speichern des Graphen als Adjazenzliste, die einen Speicherplatzbedarf von O(|E|) hat, scheidet aus, da von einer Adjazenzliste keine Eigenwerte/Eigenvektoren berechnet werden können. 19 Kapitel 4. Implementierung die – maximal n · (n − 1)/2 – Kanten, denn nichts anderes wird in einer Adjazenzmatrix abgebildet. Bei einem konstanten Durchschnittsgrad d¯ und n Knoten hat ein Graph d¯ · n viele Kanten bzw. doppelt so viele Einsen in einer Matrix mit n2 Speicherplätzen. Es werden unnötiger Weise n2 − 2 · d¯ · n = Ω(n2 ) viele Nullen gespeichert. Das Missverhältnis zwischen ¯ quadratisch belegtem und genutztem Speicher wächst, bei konstantem Durchschnittsgrad d, in n. Um diesem Missverhältnis entgegen zu wirken, wurden als sparse definierte Datenstrukturen verwendet. Dieses Matlab-Konstrukt bewirkt, dass nur Elemente ungleich Null gespeichert werden. Somit sinkt der Speicherplatzbedarf auf 2 · d¯ · n, wobei dennoch die gängigen Operationen wie Matrixmultiplikation, Eigenwertberechnung, etc. auf diesem Datentypen möglich sind. Nach der Verwendung des Datentyps sparse etwa für die Adjazenzmatrix sank die Rechenzeit zur Erzeugung eines Graphen mit 100 000 Knoten auf ca. 48 Stunden. Zuvor brachen die Berechnungen nach ca. 1,5 Wochen mangels Arbeitsspeicher ab. 4.4 Eliminieren von Schleifen durch Matrixmultiplikation Matlab ist optimiert für Matrixoperationen, nicht aber für Schleifen. Deswegen wurde bei der Implementierung versucht, so viele Schleifen wie möglich durch Matrixoperationen zu ersetzen. Wirksam wird dies in den Schritten 2 und 4. 4.4.1 Schritt 2 - Normalisierung der Adjazenzmatrix In Schritt 2 wird, wie in Abschnitt 3.2 beschrieben, jeder Eintrag aij der Adjazenzmatrix A mit d¯ 2 /(di · dj ) multipliziert, um die Matrix M zu erhalten. Die naive Implementierung dazu wäre, dies mittels zweier for-Schleifen zu realisieren. Um diese Schleifen zu vermeiden wird in unserer Implementierung eine Normalisierungsmatrix N verwendet, so dass gilt: ¯ 1 ¯ 1 d/d 0 ··· 0 d/d 0 ··· 0 .. .. ¯ 2 ... ¯ 2 ... 0 0 d/d . d/d . . A M = N AN = . .. .. .. .. .. .. . . . . 0 0 . ¯ n ¯ n 0 ··· 0 d/d 0 ··· 0 d/d Bei diesen Matrixoperationen wird während der linken Matrixoperation zunächst jeder Ein¯ i multipliziert, in der zweiten Multiplikation wird dieser Eintrag a∗ dann mit trag aij mit d/d ij ¯ j multipliziert. Zusammen ergibt dies gerade die Bildungsvorschrift der Matrix M (vlg. d/d 3.2, Schritt 2). 4.4.2 Schritt 4 - Konstruktion von M ∗ Auch in Schritt 4 wäre ein naives vorgehen eine for-Schleife, die die u-te Zeile und t-te Spalte von M , wiederum in einer for-Schleife, auf Null setzt, wenn Knoten u 6∈ U . Effizienter ist es, aus dem charakteristischen Vektor χU der Menge U mit ( 1, i ∈ U χU (i) = 0, i 6∈ U 20 4.5. Berechnung von Singulär- statt Eigenwerten eine Diagonalmatrix zu konstruieren – dazu existieren in Matlab Funktionen, die Schleifen realisieren – um M ∗ wie folgt zu erhalten: χU (1) 0 ··· 0 χU (1) 0 ··· 0 . .. . . .. 0 0 χU (2) . . χU (2) . . . ∗ M = M|U = M .. . . . . . .. .. .. .. .. . 0 0 0 ··· 0 χU (n) 0 ··· 0 χU (n) dies ohne . Wenn Knoten u zur Menge U gehört, steht an Stelle χU (u) eine Eins. Dies ändert während der Multiplikation nichts an der u-ten Zeile und der u-ten Spalten von M . Gehört allerdings Knoten u nicht zur Menge U , so wird durch die Null an Stelle χU (u) zunächst die u-te Zeile der Matrix M und in der zweiten Multiplikation die u-te Spalte von M auf Null gesetzt. 4.5 Berechnung von Singulär- statt Eigenwerten Wie in Kapitel zwei angegeben, hat die Berechnung der Eigenwerte eine Laufzeit von O(n3 ). Zur Partitionierung von Graphen nach der hier behandelten Methode sind, bei k Teilmengen einer Partition, gerade die k betragsmäßig größten Eigenwerte und zugehörige Eigenvektoren notwendig. Um nicht alle Eigenwerte der Adjazenzmatrizen berechnen zu müssen, werden in unserer Implementierung Singulärwerte verwendet. Definition 4.1 (Singulärwert) Die Singulärwerte σi einer n × m Matrix A sind die positiven Wurzeln der Eigenwerte von AT A. (vgl. [Str03, S. 479]) Wir sind an den Eigenwerten von M ∗ interessiert. M ∗ ist eine quadratische symmetrische Matrix und es gilt somit M ∗T M ∗ = M ∗ M ∗T = M ∗2 . Ein Eigenvektor xi zum Eigenwert λi der Matrix M ∗ ist ein Vektor, für den gilt: M ∗ xi = λi xi . Deswegen gilt auchqM ∗2 xi = M ∗ M ∗ xi = λi (λi xi ) = λ2i xi . Mit der Definition der Singulärwerte, ergibt sich: σi = λ2i = |λi |. Es genügt für unsere Analysen die 2 größten Singulärwerte σ1 , σ2 anstatt der n Eigenwerte von M ∗ zu berechnen. Der dominierende Anteil für die Laufzeit des Algorithmus, die Berechnung der Eigenwerte, wird damit verringert. 4.6 Heuristiken für Schritt 6 des Algorithmus Die Schritte 1 bis 5 des Algorithmus liefern die Eigenvektoren zu den betragsmäßig größten Eigenwerten der normalisierten Adjazenzmatrix M ∗ . Einer dieser Vektoren muss nun in Schritt 6 ausgewählt werden um anhand der Einträge dieses Vektors den Graphen zu Partitionieren. Wir werden uns in dieser Arbeit auf die Auswertung des Eigenvektors zum Betragsmäßig zweitgrößten Eigenwert beschränken. Aufgrund der in Abschnitt 2.6 angestellten Überlegungen, erwarten wir, dass dieser Eigenvektor die geforderten Eigenschaften aufweist. Wir wollen an dieser Stelle zwei Heuristiken zur Auswertung dieses Eigenvektors diskutieren. Durch die Auswertung des Eigenvektors kann eine Partition des Graphen ausgegeben werden. Um die Idee hinter der Auswertung zu veranschaulichen, dient der nachfolgende Beispielgraph. 21 Kapitel 4. Implementierung Abb. 4.1: Adjazenzmatrix eines Graphen (1000 Knoten) mit eingepflanzter Partition Abb. 4.2: Eigenvektor s2 der normalisierten Adjazenzmatrix M ∗ von Abb. 4.1 Sei V1 = {1, . . . , 500}, V2 = {501, . . . , 1000}, und die Matrix D folgender Gestalt: 1 2 D = . 2 1 Diese Parameter erzeugen mit dem vorgestellten Modell einen Graph mit eingepflanzter Partition, welche aus zwei Teilmengen besteht. Dabei hat ein Knoten aus V1 im Mittel doppelt so viele Nachbarn in V2 hat als in V1 . Gleiches gilt analog für Knoten aus V2 . Die Adjazenzmatrix dieses Graphen ist in Abb. 4.1 dargestellt. Ein Punkt an Stelle u, v bedeutet dabei, dass eine Kante von Knoten u zu Knoten v führt. Abb. 4.2 rechts daneben trägt die Werte des Eigenvektors zum betragsmäßig zweitgrößten Eigenwert der normalisierten Adjazenzmatrix √ ab. Alle Eigenvektoren werden zur besseren Vergleichbarkeit im Folgenden mit n skaliert dargestellt. Der theoretisch vorausgesagte Eigenvektor lässt sich, falls die Modellparameter bekannt sind, wie in [CGL07b, S. 9] errechnen: zunächst wird die Matrix P bestimmt. q q |V1 | W1 · |Vn1 | 0 W · 0 n · d11 d12 · 1 q q P = (4.1) |V2 | d d 21 22 0 W · 0 W · |V2 | 2 n 2 n W1 und W2 sind dabei die Verhältnisse von wu /wu0 für u ∈ Vi , i = 1, 2, also das Verhältnis von 3 Knotengewicht zu erwartetem Grad eines Knotens der Teilmenge P i der Partition . Bei unseren einfachen Modellen ergibt sich mit (3.1) gerade Wi = n/ v∈V dψ(u),ψ(v) , u ∈ Vi , i = 1, 2. Anschließend werden die orthonormalen Eigenvektoren (e1 e2 )T und (f1 f2 )T von P bestimmt. Die erwarteten Eigenvektoren g1 und g2 von M ∗ sind dann g1 = e 1 · χ1 χ2 χ1 χ2 + e2 · und g2 = f1 · + f2 · . kχ1 k kχ2 k kχ1 k kχ2 k In Abb. 4.2 ist rot der erwartete Eigenvektor g1 und schwarz der tatsächliche Eigenvektor s2 3 Punkt 1 in Lemma 1 aus [CGL07b] zeigt, dass dieser Quotient für die Knoten einer Teilmenge gleich ist. Es genügt jeweils einen solchen Quotienten pro Teilmenge zu bestimmen. 22 4.6. Heuristiken für Schritt 6 des Algorithmus dargestellt. Den schwarz dargestellten Vektor s2 liefern die Schritte 1 bis 5 des Algorithmus. Anhand der Werte dieses Eigenvektors soll Schritt 6 eine Partition des Graphen ausgeben. Der Zusammenhang zwischen der Partition des Graphen und den Eigenvektoren seiner Adjazenzmatrix ist in obigen Abbildungen deutlich zu erkennen. 4.6.1 Heuristik 1 - Vorzeichenmethode Betrachtet man den Eigenvektor aus Abb. 4.2, so fällt auf, dass die korrespondierenden Einträge der zur Menge V1 gehörenden Knoten ein anderes Vorzeichen tragen als die korrespondierenden Einträge der zur Menge V2 gehörenden Knoten. Dies wird durch die Vorzeichenmethode genutzt. Es sei angemerkt, dass hierbei keine Aussagen über die Allgemeingültigkeit der Vorzeichenmethode gemacht werden. In [CGL07a] wird lediglich garantiert, dass alle (bis auf O(n/d¯ 0.22 ) viele) Werte eines der Eigenvektoren beliebig nah an einer der Konstanten c1 oder c2 sind und √ dass |c1 − c2 | ≥ 1/(4 · n). Diese erste Heuristik entstand durch Beobachtung der Werte der Vektoren s1 und s2 und sie zeigt, wie in Kapitel 5 angeführt, zufriedenstellende Ergebnisse wenn die Größe der Teilmengen der Partition nahezu gleich sind. Algorithmus Eingabe: Der Eigenvektor s2 der normalisierten Adjazenzmatrix M ∗ 0 0 Ausgabe: Eine Partition V1 , V2 der Knotenmenge V . 0 0 1. Für jedes u ∈ V : Setze u ∈ V1 genau dann, wenn s2 (u) > 0 bzw. u ∈ V2 , genau dann, wenn s2 (u) < 0. Wenn s2 (u) = 0, dann weise u zufällig einer der beiden Mengen zu. 0 0 2. Gibt V1 und V2 zurück. Algorithmus 4.1: Vorzeichenmethode Vorzeichenmethode - Laufzeit In Schritt 1 wird der Eigenvektor s2 genau einmal durchlaufen. Das zuweisen der Knoten zu einer Menge, auch für den Fall s2 (u) = 0 kann als konstant in O(1) angesehen werden, ebenso wie das zurückgeben der Partition. Die Laufzeit beträgt somit O(n). 4.6.2 Heuristik 2 - Histogrammmethode Die Histogrammmethode nutzt den bewiesenen Fakt, dass alle, bis auf O(n/d¯ 0.22 ) viele Einträge eines der Eigenvektoren zu den beiden betragsmäßig größten Eigenwerten nahe an zwei beliebigen Konstanten c1 und c2 liegen. Diese Konstanten können aber – ohne Kenntnis der Modellparameter und diese sind bei realen Problemen unbekannt – nicht bestimmt werden. Es wird ein Verfahren vorgestellt, diese Konstanten näherungsweise mit Hilfe der Histogramme der Eigenvektoren zu bestimmen. Der Wertebereich des Eigenvektors r wird zunächst in l gleich große Intervalle (Klassen) geteilt. Definition 4.2 (Histogramm) Das Histogramm eines Vektors r ist die Häufigkeitsverteilung der Werte ri in den l Klassen seines Wertebereichs. 23 Kapitel 4. Implementierung Abb. 4.3: Vektor s2 mit 24 Intervallen des Wertebereichs Abb. 4.4: Histogramm des Vektors s2 aus Abb. 4.2 mit 24 Intervallen Das Histogramm eines Eigenvektors mit der in [CGL07a] garantierten Eigenschaft muss zwei Maxima haben, da alle bis auf O(n/d¯ 0.22 ) viele Einträge jeweils in der Umgebung des Intervalls liegen, dessen Mittelwert gerade die unbekannte Konstante c1 oder c2 ist. Ein beispielhaftes Histogramm ist in Abb. 4.4 dargestellt. Entscheidend für den Erfolg dieses Vorgehens ist die Anzahl der Intervalle, in die der Wertebereich des Vektors geteilt wird. Dazu ist zunächst zu überlegen, wie bei einem optima” len“ Vektor die Maxima gefunden werden können. Um das Verfahren effizienter zu gestalten, suchen wir statt beider Maxima lediglich das Minimum zwischen den beiden Maxima. Der Mittelwert cm des gefundenen Intervalls mit den wenigsten Einträgen zwischen den beiden Maxima, wird dann als Wert für die Partitionierung der Knotenmenge verwendet. Alle Knoten deren korrespondierende Einträge des Eigenvektors s2 größer als cm sind werden in V10 sortiert, alle die kleiner als cm sind werden in V20 sortiert und bei Gleichheit wird der entsprechende Knoten beliebig auf die Teilmengen V10 und V20 verteilt. Zum korrekten Erkennen des lokalen Minimums müssen zwei Differenzen gebildet werden. An der Stelle xmin liegt genau dann ein Minimum vor, wenn (xmin −1 − xmin ) > 0 und (xmin − xmin +1 ) ≤ 0 oder (xmin −1 − xmin ) ≥ 0 und (xmin − xmin +1 ) < 0. Die zu beantwortende Frage ist, in wie viele Intervalle der Wertebereich der Eigenvektoren geteilt werden muss, damit ein Minimum erkannt wird. Es gelten folgende Fakten: √ 1. Der Eigenvektor s2 ist auf ks2 k = n skaliert. √ 2. Für die Konstanten c1 und c2 gilt (durch die Skalierung des Eigenvektors mit n): |c1 − c2 | ≥ 1/4 3. 1/4 soll auf mindestens 3 Intervalle verteilt sein um 2 Differenzen bilden zu können. Auf Grund dieser Überlegungen wurde in unserer Implementierung ein Histogramm über 24 Intervalle des Wertebereichs des Vektors erstellt. Ein Histogramm mit weniger Intervallen (wir testeten 12 Intervalle) war zu grob um das Minimum zwischen den Maxima zu finden. Bei mehr als 24 Intervallen (wir versuchten ebenfalls ein Histogramm über 48 Intervalle) waren 24 4.7. Gemessene Laufzeit des Algorithmus zur Graphpartitionierung hingegen die Maxima nicht mehr deutlich genug zu erkennen. Ein Maximum zerfiel dann in mehrere Maxima. Die Histogrammmethode ist nachfolgend in der üblichen Darstellungsweise angegeben. Algorithmus Eingabe: Der Eigenvektor s2 der normalisierten Adjazenzmatrix M ∗ 0 0 Ausgabe: Eine Partition V1 , V2 der Knotenmenge V . 1. Erzeuge das Histogramm über 24 Intervalle von s2 . 2. Suche beide Maxima max1 und max2 sowie das lokale Minimum min zwischen den Maxima des Histogramms des Eigenvektors s2 . √ 3. Wenn lokales Minimum gefunden und | max1 − max2 | ≥ 1/(4 · n), dann: 0 0 Für jedes u ∈ V : Setze u ∈ V1 , wenn s2 (u) > min bzw. u ∈ V2 , wenn s2 (u) < min. Wenn s2 (u) = min, dann weise u zufällig einer der beiden Mengen zu. 4. Sonst: 0 0 Setze V1 = ∅ und V2 = ∅. Gib Kein Minimum in Eigenvektor gefunden: Abbruch“ aus. ” 0 0 5. Gib V1 und V2 zurück. Algorithmus 4.2: Histogrammmethode 4.6.3 Histogrammmethode - Laufzeit Um ein Histogramm des Vektors zu erstellen, muss dieser zwei mal durchlaufen werden: zunächst muss das Maximum und Minimum des Vektors ermittels werden, dann der Wertebereich in 24 Intervalle geteilt und abschließend jeder Eintrag genau einem der Intervalle zugeordnet werden. Schritt 1 benötigt insgesamt 2n = O(n) Rechenschritte. Das Suchen des Minimums und der beiden Maxima des Histogramms in Schritt 2 benötigt jeweils maximal O(24) = O(1) viele Operationen. Schritt 3 benötigt O(n) Vergleiche, Schritt 4 ist konstant O(1), ebenso Schritt 5. Insgesamt ist die Laufzeit von Heuristik 2 dann, wenn ein Minimum gefunden wurde und die beiden Maxima einen genügend großen Abstand haben: O(n) + O(n) = O(n). 4.7 Gemessene Laufzeit des Algorithmus zur Graphpartitionierung 4.7.1 Schritte 1 bis 5: Normierung und Berechnung der Eigenvektoren In Abb. 4.5 ist die Laufzeit der Schritte 1 bis 5 in Abhängigkeit zur Anzahl der Knoten bei konstantem Durchschnittsgrad dargestellt. Die Messungen entstammen den Tests zur Problemklasse maximaler Schnitt bei einem Knotengewicht von 60 (vgl. Kapitel 5). Der lineare Verlauf der Kurve dieser Abbildung verwundert nach den Ausführungen zur Berechnung von Eigenvektoren und Eigenwerten in Abschnitt 2.5. Durch die Verwendung von Singulärwerten kann allerdings die Berechnung von n Eigenwerten und Eigenvektoren der n×n großen normalisierten Adjazenzmatrix entfallen und es müssen lediglich zwei Eigenwerte und Eigenvektoren berechnet werden. Die lineare Abhängigkeit zur Anzahl der Knoten ist auf die Verwendung von Matrixmultiplikationen statt Schleifen sowie auf die Berechnung einer konstanten Anzahl von Singulärwerten statt aller Eigenwerte zurückzuführen. 25 Kapitel 4. Implementierung Laufzeit Schritte 1 − 5 Laufzeit Schritte 1 − 5 40 60 55 35 50 30 45 40 Zeit [s] Zeit [s] 25 20 35 30 15 25 10 20 5 15 0 10 0 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 0 Abb. 4.5: Laufzeit der Schritte 1-5 in Abhängigkeit zur Anzahl n der Knoten 20 40 60 80 100 120 Durchschnittsgrad der Knoten 140 160 180 200 Abb. 4.6: Laufzeit der Schritte 1-5 in Abhängigkeit zum Durchschnittsgrad d¯ Abb. 4.6 zeigt die gemessenen Laufzeiten der Schritte eins bis fünf. Die Messungen entstammen der Problemklasse großer Schnitt (vgl. Kapitel 5) mit 10000 Knoten. Pro vorgegebenem Knotengewicht wurden drei Graphen erzeugt und analysiert. Abb. 4.6 zeigt das Mittel der drei Laufzeiten zum Mittel der erzeugten Knotengewichte. Trotz der Schwankungen die die Abbildung zeigt kann eine lineare Laufzeit in Abhängigkeit zum Durchschnittsgrad festgestellt werden. Diese lässt sich durch die Verwendung des Datentyps sparse erklären. Je mehr Kanten der Graph besitzt, desto mehr Speicherplatz und Speicherzugriffe werden benötigt. 4.7.2 Schritt 6: Auswertung der Eigenvektoren Laufzeit Schritt 6 Laufzeit Schritt 6 − konstante Knotenanzahl 0.8 Vorzeichenmethode Histogrammmethode 0.14 0.7 0.12 0.6 0.1 Zeit [s] Zeit [s] 0.5 0.4 0.08 0.06 0.3 0.2 0.04 0.1 0.02 Vorzeichenmethode Histogrammmethode 0 0 0 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 Abb. 4.7: Laufzeit von Schritt 6 in Abhängigkeit zur Anzahl n der Knoten 0 20 40 60 80 100 Durchschnittsgrad der Knoten 120 140 160 Abb. 4.8: Laufzeit von Schritt 6 in Abhängigkeit zum Durchschnittsgrad d¯ Die gemessenen Laufzeiten von Schritt 6 (Vorzeichenmethode und Histogrammmethode) wurden in Abb. 4.7 zur Anzahl der Knoten bei konstantem Durchschnittsgrad abgetragen. Die Messungen entstammen den Tests der Problemklasse maximaler Schnitt. Als Knotengewicht zur Modellerzeugung wurde 60 gewählt. Dadurch wurde ein durchschnittlicher Knotengrad von ≈ 90 erzielt. Die Kurve zeigt nicht die erwartete lineare Laufzeit der Heuristiken 1 und 2. Vielmehr vermutet man eine quadratische Laufzeit der beiden Implementierungen. Die absoluten Rechenzeiten liegen allerdings bei beiden Varianten selbst für 10000 Knoten unter einer Sekunde. Verglichen mit der Laufzeit der Schritte 1-5 ist dies vernachlässigbar klein. Vermutlich haben bei so kurzen Laufzeiten andere Faktoren wie Speicherzugriffe, oder 26 4.7. Gemessene Laufzeit des Algorithmus zur Graphpartitionierung konkurrierende andere Prozesse auf dem betreffenden Rechner einen starken Einfluss auf die Laufzeit. Dies könnte eine Begründung sein, warum sich das erwartete Laufzeitverhalten nicht einstellt. Frühere Messungen, wie sie in Abb. B.1 in Anhang B abgebildet sind, lassen eine lineare Laufzeit vermuten. Dies würde die theoretischen Aussagen unterstreichen. Die Messungen zu den Abb. 4.7 und B.1 wurden auf verschiedenen Rechnern durchgeführt. Ein Vergleich dieser Messungen gestaltet sich daher schwierig. In Abb. 4.8 ist die Laufzeit von Schritt 6 zum Durchschnittsgrad der Knoten bei konstanter Anzahl von Knoten abgebildet. Diese Messungen entstammen dem Test maximaler Schnitt bei 5000 Knoten. Es ist deutlich erkennbar, dass die Laufzeit unabhängig vom Durchschnittsgrad der Knoten ist. Beide Abbildungen zeigen jedoch, dass Heuristik 2 (Histogrammmethode) schneller arbeitet als Heuristik 1 (Vorzeichenmethode). Dies verwundert, da beide Heuristiken in einer forSchleife die Eigenvektoren durchlaufen. Eine Erklärung dafür können nur passende CachingTechniken in Matlab sein. Eventuell werden beim Erstellen des Histogramms des Vektors mittels einer Matlab-eigenen Funktion die Werte geeignet Zwischengespeichert und stehen später schneller zur Verfügung. Genauere Aussagen dazu können allerdings nicht getroffen werden, da die Quellen von Matlab nicht offen liegen. 4.7.3 Gesamter Algorithmus Insgesamt zeigt der Algorithmus bei unserer Implementierung eine lineare Laufzeit bei steigender Knotenzahl. Dies ist Abb. 4.9 zu entnehmen. Die Laufzeiten wurden beim Clusterproblem maximaler Schnitt bei konstantem Durchschnittsgrad gemessen. Die Knotenzahl betrug 500, 1000, 2000, 2500 und 5000 Knoten. Welche der beiden Heuristiken verwendet wird, hat auf die Laufzeit keinen wesentlichen Einfluss. Bei steigendem Durchschnittsgrad ist die Laufzeit ebenfalls linear steigend. Wie bereits weiter oben dargestellt, hat die NorAbb. 4.9: Laufzeit des gesamten Algorithmus in malisierung der Adjazenzmatrix eine lineaAbhängigkeit zur Knotenzahl re, die Auswertung der Eigenvektoren eine konstante Laufzeit bezüglich des Druchschnittsgrads. Die Addition beider Laufzeiten ergibt ein lineares Verhalten. Laufzeit des Algorithmus − konstanter Durchschnittsgrad 12 10 Zeit [s] 8 6 4 2 mit Vorzeichenmethode mit Histogrammmethode 0 500 1000 1500 2000 2500 3000 Anzahl der Knoten 3500 4000 4500 5000 27 5 Clusterproblemklassen und Ergebnisse 5.1 Vorstellung der Clusterprobleme Im Folgenden wird häufig der Begriff Schnitt verwendet werden. Darunter wird in dieser Arbeit folgendes verstanden: Definition 5.1 (Schnitt) Ein Schnitt im Graphen G = (V, E) teilt die Knotenmenge V in zwei nicht leere, disjunkte Teilmengen V1 , V2 . Die Größe des Schnitts ist die Anzahl der Kanten, die zwischen den beiden Teilmengen V1 und V2 verlaufen. Zu den einzelnen Klassen von Clusterproblemen werden zunächst die Auffälligkeiten und deren mögliche Entstehung innerhalb eines Graphen beschrieben. Anschließend werden die zur Erzeugung der Graphen verwendeten Parameter genannt. Zur Illustration werden triviale Beispielgraphen angegeben. Im Besonderen werden die Auffälligkeiten in einem erzeugten Graphen durch die Matrix D, die Größe der Teilmengen der eingepflanzten Partition und dem Gewicht der Knoten erzeugt, wobei d11 d12 D= d12 d22 eine symmetrische Matrix ist, wie in Abschnitt 3.1 eingeführt. Zu einem fixen D und einem fixen Verhältnis |V1 |/|V | und |V2 |/|V | der Teilmengen wurden Tests zu unterschiedlich vielen Knoten durchgeführt. Für jeden erzeugten Graph war dabei das Gewicht der Knoten gleich. Zu jeder Problemklasse wurden Graphen mit unterschiedlichem Knotengewicht erzeugt. Die Partitionen wurden derart eingepflanzt, dass V1 = {1, . . . , |V1 |} und V2 = {|V1 | + 1, . . . , n}. Interessant für die Auswertung ist das Verhältnis der erwarteten Anzahl Kanten innerhalb der Teilmengen der Partition E[Ki ] zur erwarteten Anzahl der Kanten E[K] im Graph sowie das Verhältnis der erwarteten Anzahl Kanten zwischen den Teilmengen E[Kb ] zu E[K]. 1 Wegen wu = w folgt aus Pr[{uv} ∈ E] = W · wu · wv · dψ(u) ψ(v) gerade Pr[{uv} ∈ E] = w n · dψ(u) ψ(v) . Die Wahrscheinlichkeit einer Kante {u, v} hängt bei unseren Gnp -Graphen lediglich vom Faktor dψ(u) ψ(v) ab. In den folgenden Gleichungen ist p = w n gleich für alle Knoten und kürzt sich später bei den Verhältnissen der Kanten weg. Die erwartete Anzahl Kanten innerhalb der Teilmengen der Partition ergibt sich zu: erwartete Kanten in V1 erwartete Kanten in V2 z }| { z }| { 1 1 E[Ki ] = · (|V1 | · (|V1 | − 1)) · d11 · p + · (|V2 | · (|V2 | − 1)) · d22 · p . 2 2 Die erwartete Anzahl Kanten zwischen den Teilmengen der Partition ist dann: E[Kb ] = |V1 | · |V2 | · d12 · p 28 5.1. Vorstellung der Clusterprobleme Mit E[K] = E[Kb ] + E[Ki ] folgt daraus: 1 1 · (|V1 | · (|V1 | − 1)) · d11 · p + · (|V2 | · (|V2 | − 1)) · d22 · p 2 2 1 1 2 2 2 |V1 | · d11 + 2 |V2 | · d22 (5.1) |V1 | · |V2 |d12 + 12 |V1 |2 d11 + 12 |V2 |2 d22 |V1 | · |V2 |d12 . (5.2) |V1 | · |V2 |d12 + 12 |V1 |2 d11 + 12 |V2 |2 d22 E[K] = |V1 | · |V2 | · d12 · p + E[Ki ] E[K] = E[Kb ] E[K] = In den Gleichungen 5.1 und 5.2 gilt das Gleichheitszeichen nur, wenn |V1 |, |V2 | 1. Dies kann für |V | = n 1 wegen |Vi | > δn, δ > 0, i = 1, 2 angenommen werden. 5.1.1 Clusterproblem Großer Schnitt“ ” Abb. 5.1: Großer Schnitt, Teilmengen der Partition verschiedene Größe Abb. 5.2: Großer Schnitt, Teilmengen der Partition gleiche Größe Ein Graph bestehe aus zwei Knotenmengen, die innerhalb wenig, zwischen den Teilmengen aber sehr stark vernetzt sind. Dies kann z. B. dadurch geschehen, dass zwei Graphen zusam” menwachsen“ und dabei mehr Kanten zum jeweils anderen Graph gebildet werden, als Kanten innerhalb der ursprünglichen Graphen vorhanden waren. Die Frage ist, ob es nachträglich möglich ist, diese ehemaligen Graphen zu erkennen. In diesem Test hat ein Knoten u ∈ Vi mehr Nachbarn in Vj als in Vi , i 6= j. Zur Konstruktion eines Graphen mit diesen Eigenschaften nach unserem Modell, muss bei gleichem Knotengewicht wi = w > 0 die Matrix D so gewählt werden, dass d11 < d12 und d22 < d12 . Zwei einfache Beispielgraphen sind in den Abbildungen 5.1 und 5.2 dargestellt. Wenn die Parameter so gewählt sind, dass zwischen den beiden Teilmengen die absolute Mehrheit der Kanten verläuft, spricht man von einem maximalen Schnitt. Für Tests des Algorithmus wurden folgende Parameter gewählt: Maximaler Schnitt: |V1 | 1 = |V | 2 Großer Schnitt: |V2 | 1 |V1 | 1 |V2 | 3 = = , = |V | 2 |V | 4 |V | 4 1 2 1 1.5 D = D = 2 1 1.5 1 Das Verhältnis der Kanten beim maximalen Schnitt folgt aus den Gleichungen 5.1 und 5.2 , E[Kb ] 2 = E[K] 3 , E[Ki ] 1 = E[K] 3 29 Kapitel 5. Clusterproblemklassen und Ergebnisse Anders verhält es sich bei einem großen Schnitt, mit |V1 | = sich ein Verhältnis von: E[Kb ] 5 = E[K] 14 , n 4 und |V2 | = 34 n. Dann ergibt E[Ki ] 9 = E[K] 14 Bei diesem Test liegen absolut mehr Kanten innerhalb der Teilmengen der Partition als zwischen den Teilmengen der Partition. Dieser Vergleich verdeutlicht, dass der Algorithmus nicht nur Maxima oder Minima, sondern Unregelmäßigkeiten innerhalb eines Graphen findet. Die Ergebnisse zu diesen Tests sind den Abschnitten 5.3.1 und 5.3.2 dargestellt. 5.1.2 Clusterproblem Kleiner Schnitt“ ” Abb. 5.3: Kleiner Schnitt, Teilmengen der Partition unterschiedlich groß Abb. 5.4: Kleine Bisektion, Teilmengen der Partition gleich groß Es sei, wie schon im vorangegangenen Test, ein Graph aus zwei Teilgraphen zusammen” gewachsen“, allerdings haben sich weniger Kanten zwischen den Teilmengen ausgebildet als innerhalb der Teilmengen vorhanden sind. Die Aufgabe besteht wiederum darin, die ehemaligen Teilgraphen zu erkennen. Die Bezeichnung kleiner Schnitt“ darf nicht fälschlicher Weise mit dem Problem des mini” ” malen Schnitts“ verwechselt werden. Der minimale Schnitt wäre bei unseren Graphen gerade so, dass der Knoten mit kleinstem Grad in der einen, alle anderen Knoten in der anderen Teilmenge der Partition lägen. Der Algorithmus soll aber eine Partition derart finden, dass Teilgraphen (mit mehr als einem Knoten) gefunden werden, zwischen denen verhältnismäßig wenige Kanten verlaufen. In diesem Test sind Kanten innerhalb der Teilmengen wahrscheinlicher als Kanten zwischen den Teilmengen. Ein Knoten u ∈ Vi hat mehr Nachbarn in Vi als in Vj , i 6= j. Für die Matrix D gilt dann, bei konstantem Gewicht, d12 < d11 und d12 < d22 . Ein Beispiel für diese Problemklasse zeigt Abb. 5.3 Wenn die Teilmengen der Partition zusätzlich noch die gleiche Größe aufweisen, spricht man von einer kleinen Bisektion, dargestellt in Abb. 5.4. Für die erzeugten Graphen wurden folgende fixe Parameter gewählt, während das Knotengewicht w und die Knotenanzahl variiert wurden: Kleiner Schnitt: |V1 | 1 = |V | 4 Kleine Bisektion: |V2 | 3 = |V | 4 1 0.75 D = 0.75 1 30 , |V1 | 1 = |V | 2 |V2 | 1 = |V | 2 1 0.75 D = 0.75 1 , 5.2. Entwicklung der Eigenvektoren Im Fall des kleinen Schnitts ist das Verhältnis der Kanten nach den Gleichungen 5.1 und 5.2 E[Ki ] 2 = E[K] 3 und E[Kb ] 1 = E[K] 3 Bei der kleinen Bisektion ergeben sich die Verhältnisse zu E[Ki ] 3 = E[K] 4 und E[Kb ] 1 = E[K] 4 Die Ergebnisse der Testfälle kleiner Schnitt und kleine Bisektion sind in den Abschnitten 5.3.3 und 5.3.4 dargestellt. 5.1.3 Clusterproblem Unabhängige Menge“ ” Die dritte Klasse von Clusterproblemen könnte dadurch entstehen, dass einzelne Knoten zum Netz hinzukommen. Diese Knoten sind dann gut mit dem bereits vorhandenen Netz verbunden, verbinden sich aber nicht mit anderen neuen Knoten. Ist es möglich die neu hinzugekommenen Knoten zu finAbb. 5.5: Unabhängige Menge den? In der skizzierten Problemklasse existiert eine Teilmenge von Knoten innerhalb des Graphen, die keine Verbindungen zu anderen Knoten aus dieser Teilmenge haben. Diese wird unabhängige Menge genannt. Folgende Parameter wurden bei der Erzeugung der Graphen für diesen Test verwendet: |V1 | 5 = |V | 100 |V2 | 95 = |V | 100 0 1 D = 1 1 , Dies ist der einzige in dieser Arbeit untersuchte Fall, in dem die Wahrscheinlichkeitsfaktoren d11 und d22 unterschiedlich sind. Eine Partition des Graphen wird nicht mehr durch verschieden starke Vernetzung zwischen den Teilmengen charakterisiert, sondern durch eine verschieden starke Vernetzung innerhalb der Teilmengen. Eine Betrachtung des Verhältnisses der Kanten, wie sie in den vorangegangenen Abschnitten jeweils erfolgte, kann deswegen hier entfallen. Die Ergebnisse dieser Tests finden sich in Abschnitt 5.3.5. 5.2 Entwicklung der Eigenvektoren Um die Ergebnisse richtig interpretieren und um die Leistung der beiden Heuristiken bewerten zu können, wird in diesem Abschnitt die Entwicklung der Eigenvektoren beschrieben. Dazu werden zwei Dimensionen betrachtet: das Verhalten der Eigenvektoren bei steigendem Durchschnittsgrad und das Verhalten in Abhängigkeit des Größenverhältnisses der Teilmengen der 31 Kapitel 5. Clusterproblemklassen und Ergebnisse Partition. Die gemachten Beobachtungen sind dabei nicht allgemein gültig, sondern auf die vorgestellten Testfälle mit den dabei fixierten Parametern bezogen. 5.2.1 Eigenvektoren und steigender Durchschnittsgrad Grundlage für das heuristische Verfahren zur Partitionierung von Graphen ist ein minimaler Durchschnittsgrad der Knoten. Dieser Abschnitt soll verdeutlichen, warum bei einem geringeren als diesem (dem Algorithmus und den Anwendern a priori nicht bekannten) Durchschnittsgrad keine Aussagen über eine Partitionierung des Graphen möglich sind. Beispielhaft sind hier jeweils die Eigenvektoren zum zweitgrößten Eigenwert des Clusterproblems unabhängige Menge angeführt. Die erste Teilmenge der Partition umfasst dabei 5% der Knoten, die zweite Teilmenge die restlichen 95%. Bei allen Abbildungen sind jeweils der berechnete Eigenvektor (grau), der theoretisch vorausgesagte Eigenvektor (rot) und die Nulllinie (grau, Strichline), anhand der die Vorzeichenmethode die Partitionierung vornimmt, dargestellt1 . Abb. 5.7: Eigenvektor s2 bei d¯ ≈ 210 Abb. 5.6: Eigenvektor s2 bei d¯ ≈ 70 Abb. 5.6 zeigt den Eigenvektor bei einem Durchschnittsgrad von ≈ 70. Der Vektor streut gleichmäßig um den Wert Null. Es ist nicht möglich Aussagen zur Partitionierung mittels diesem Vektor zu treffen. Die Histogrammmethode findet bei solch einem homogenen Vektor mit hoher Wahrscheinlichkeit kein Minimum. Die Vorzeichenmethode wird ≈ 50% der Knoten richtig einordnen. Da ungefähr 50% der Einträge > 0 sind und ungefähr 50% der Einträge < 0 werden gerade 50% der Knoten in die Menge V10 und 50% in die Menge V20 sortiert. Damit ergibt sich der erwartete Anteil richtig einsortierter Knoten zu pV10 · |V1 |/|V | + pV20 · |V2 |/|V | = 0.5 · 0.05 + 0.5 · 0.95 = 0.5. Der in Abb. 5.7 dargestellte Eigenvektor lässt erahnen, dass es Auffälligkeiten innerhalb des Graphen gibt. Die ersten 250 der 5000 Einträge liegen im Mittel leicht oberhalb Null, die restlichen Einträge streuen, ähnlich wie der Vektor aus Abb. 5.6, nahezu gleichmäßig um Null. Der Graph zu dessen Adjazenzmatrix der in Abb. 5.7 dargestellte Vektor ein Eigenvektor ist, hat einen Durchschnittsgrad von ≈ 210. Die Vorzeichenmethode wird ausgehend von diesem Vektor einen Wert von über 50% der Knoten richtig erraten. Da der Erwartungswert der ersten 250 Einträge > 0 ist, werden von 1 Die Vektoren sind, wie in der gesamten Arbeit, mit 32 √ n, n = |V | skaliert. 5.2. Entwicklung der Eigenvektoren diesem Einträge mehr Knoten in V10 sortiert als in V20 . Die übrigen Einträge werden wieder zu nahezu gleichen Teilen auf die beiden Teilmengen verteilt. Die Histogrammmehtode findet auch bei diesem Vektor keine Partition des Graphen. Denn für die Mittelwerte, um die die jeweiligen Teile des Vektors schwingen – das sind gerade die √ beiden Konstanten c1 und c2 – gilt |c1 − c2 | ≤ 1/(4 · n). Bei diesem Abstand der Mittelwerte der Teilvektoren hat das Histogramm kein Minimum. Abb. 5.8: Eigenvektor s2 bei d¯ ≈ 560 Abb. 5.9: Eigenvektor s2 bei d¯ ≈ 630 Bei einem Durchschnittsgrad von ≈ 560 sind die Teilmengen der Partition gut zu erkennen. Die ersten 250 Einträge haben einen deutlich anderen Mittelwert als die weiteren 4750. Dies ist Abb. 5.8 zu entnehmen. Dieser Durchschnittsgrad liegt bereits in dem Bereich, in dem eine der beiden Heuristiken, hier die Histogrammmethode, sehr gute Ergebnisse liefert. DIe Vorzeichenmethode erkennt bei diesem Vektor fast alle zur ersten Teilmenge der Partition gehörenden Knoten korrekt. Allerdings wird bei den 4750 zur zweiten Teilmenge gehörenden Knoten ca. die Hälfte falsch partitioniert, da der Mittelwert dieser Einträge weiterhin nahe bei Null liegt. Dieses Verhalten der Vektoren wird im folgenden Abschnitt 5.2.2 näher untersucht werden. Da der Anteil der ersten Teilmenge der Partition an der gesamten Knotenmenge gering ist (gerade 5%), partitioniert die Vorzeichenmethode insgesamt etwas weniger als 60% der Knoten korrekt. Anders verhält sich die Histogrammmethode. Die Mittelwerte der beiden Teilvektoren2 √ liegen deutlich genug auseinander. Die Bedingung |c1 − c2 | > 1/(4 · n) ist erfüllt. Die Histogrammmethode findet im Histogramm des Vektors ein Minimum. Anhand dessen können die meisten Knoten (alle außer O(n/d¯ 0.22 ) viele) korrekt partitioniert werden, vgl. Abschnitt 4.6. Die O(n/d¯ 0.22 ) Knoten, die falsch erkannt werden, sind gerade diejenigen Einträge, die zu weit vom Mittelwert ihres“ Teilvektors entfernt und zu nah am Mittelwert des andern“ Teil” ” vektors liegen. Mit steigendem Durchschnittsgrad d¯ nimmt die Zahl der nicht korrekt partitionierten Knoten linear in d¯ ab. Der Grund dafür ist im Vergleich zwischen Abb. 5.8 und Abb. 5.9 zu sehen. Abb. 5.9 zeigt den Vektor s2 des Graphen bei einem Durchschnittsgrad von ≈ 630. Die zwei Teilmengen sind bei einem Durchschnittsgrad von ≈ 560 gut zu erkennen, jedoch nimmt die Streuung der Einträge mit steigendem Durchschnittsgrad weiter ab. Weiterhin ist 2 Teilvektoren seien jeweils die Einträge des Eigenvektors die entweder zu V1 oder V2 gehören. In diesem Beispiel besteht Teilvektor 1 aus den ersten 250 Einträgen des Eigenvektors, Teilvektor 2 aus den übrigen. 33 Kapitel 5. Clusterproblemklassen und Ergebnisse zu beobachten, dass die Differenz der Mittelwerte der beiden Teilvektoren mit steigendem Durchschnittsgrad wächst. Das Verhalten von Vorzeichenmethode und Histogrammmethode bleibt im wesentlichen gleich. Die Vorzeichenmethode erkennt nahezu alle zur ersten Teilmenge der Partition gehörenden Knoten, ist aber bei den übrigen Knoten sehr fehlerhaft, da die korrespondierenden Einträge des Eigenvektors weiterhin um den Wert Null schwanken. DIe Histogrammmethode erkennt ein deutliches Minimum im Histogramm des Vektors. Dieses Minimum wird ca. beim Wert 1, 5 liegen. Alle Werte > 1, 5 werden dann in eine Teilmenge, alle kleineren in die andere Teilmenge der Partition sortiert. 5.2.2 Eigenvektoren und Größenverhältnis der Teilmengen der Partition Dieser Abschnitt untersucht den Zusammenhang zwischen den Mittelwerten der Einträge des Eigenvektors zum zweitgrößten Eigenwert und dem Größenverhältnis der Teilmengen der Partition bei einer fixen Matrix D. Dabei wurde der Durchschnittsgrad so gewählt, dass die √ Bedingung |c1 − c2 | > 1/(4 · n) erfüllt wird. Diese Analyse ist besonders zur Bewertung der Vorzeichenmethode wichtig. Abb. 5.10: Zweitgrößter Eigenvektor eines Tests maximaler Schnitt“. Verhältnis der ” Teilmengen 1:1 Abb. 5.11: Zweitgrößter Eigenvektor eines Testfalls großer Schnitt“. Verhältnis der Teil” mengen 1:3 Beispielhaft sind in den Abb. 5.10 und 5.11 zwei Eigenvektoren dargestellt. Abb. 5.10 entstammt dem Testfall maximaler Schnitt, Abb. 5.11 dem Testfall großer Schnitt. Man erkennt anhand beider Vektoren deutlich die Teilmengen der Knotenmenge. Beim Vektor in Abb. 5.10 gehören gerade 50% der Knoten zur ersten Teilmenge und 50% zur zweiten Teilmenge. Zur weiteren Untersuchung der Vektoren soll der Begriff der Symmetrie von Vektoren eingeführt werden: Definition 5.2 (Symmetrischer Vektor) Bestehe ein Vektor u aus den Teilvektoren u1 , u2 . Sei ferner mi der Mittelwert des Vektors ui , i = 1, 2. Der Vektor u ist genau dann symmetrisch, wenn |m1 | = |m2 |. Aus den Abbildungen geht deutlich hervor, dass die Symmetrie der Vektoren in dem Maße abnimmt, in dem der Größenunterschied der Teilmengen der Partition zunimmt. Der Teilvektor, der zu einer kleinen Teilmenge der Partition gehört hat einen betragsmäßig größeren 34 5.3. Ergebnisse der Tests Mittelwert als der Teilvektor zu einer Großen Teilmenge der Partition. Begründet ist dieses Verhalten in dem Verhältnis der dij . √ √ Der gesamte Vektor hat ks2 k = n. Wegen |c1 − c2 | > 1/(4 · n) folgt für die Mittelwerte √ der Teilvektoren des mit n skalierten Vektors |m1 − m2 | > 1/4. Wenige betragsmäßig große Einträge führen, da sie mit dem Quadrat in die Norm des Vektors eingehen, zu vielen kleinen Einträgen. Beobachtungen während der Tests zeigten dabei folgendes: der Mittelwert des Teilvektors zur größeren Teilmenge der Partition verschiebt sich, je größer die Größenunterschiede sind, weiter zu Null, der Mittelwert des Teilvektors zur kleineren Teilmenge entfernt sich weiter von Null. Die angewendeten Heuristiken arbeiten nach dem Vergleichsprinzip. Die Einträge s2 (u) werden mit einem Wert x verglichen, sind diese größer, gehört Knoten u zur Teilmenge V10 , sind diese kleiner zu V20 , sonst beliebig. Bei der Vorzeichenmethode ist dieser Wert fix mit x = 0 vorgegeben, die Histogrammmethode ermittelt diesen Wert x durch das Finden des Minimums im Histogramm des Vektors. Die Vorzeichenmethode kann deswegen nur bei symmetrischen Vektoren sehr gute Ergebnisse erbringen. Dies zeigen auch die folgenden Darstellungen der Ergebnisse. Das die Eigenvektoren der normalisierten Adjazenzmatrix M ∗ bei ungleich großen Teilmengen der Partition nicht symmetrisch sind, liegt an den gewählten Parametern wu und D, u ∈ V . Gleichung 4.1 besagt, dass die theoretisch vorausgesagten Mittelwerte mi der Teilvektoren |Vi |/|V |, der Matrix D und dem Verhältnis Wi = wu /wu0 mit P von denwVerhältnissen P 0 u ·wv u ·wv wu = v∈Vi dii · w·n + v∈Vj dij · ww·n , u ∈ Vi , i, j = 1, 2, i 6= j abhängen. Es ist ebenso möglich symmetrische Eigenvektoren zu erzeugen, wenn |V1 |/|V | = 6 |V2 |/|V |. Dann müssen die Einträge dij der Matrix D und die Knotengewichte wu entsprechend den Verhältnissen |Vi |/|V |, i = 1, 2 angepasst werden. Ebenso können unsymmetrische Eigenvektoren auftreten, wenn die Teilmengen der Partition gleich viele Knoten enthalten. Die dargelegten Beobachtungen gelten ausschließlich für Graphen die mit unseren Modellparametern erzeugt wurden. 5.3 Ergebnisse der Tests Je Clusterproblemklasse wurden Graphen mit 1000, 5000 und 10000 Knoten erzeugt. Zur besseren Überschaubarkeit der Ergebnisse wurden in den folgenden Grafiken lediglich die Ergebnisse bei 1000 und 10 000 Knoten dargestellt. Die Experimente wurden parallel auf mehreren Rechnern durchgeführt. Ziel der Experimente war es, den Durchschnittsgrad, ab dem das Verfahren gute Ergebnisse liefert, zu finden. Wie die kommenden Abschnitte zeigen werden, hat dieser Durchschnittsgrad d¯min für die jeweiligen Testfälle sehr unterschiedliche Werte. Der Anteil richtig partitionierter Knoten wird mit der a-priori Ratewahrscheinlichkeit p0 verglichen. Seien die Größenverhältnisse der Teilmengen zur Knotenmengen |Vi |/|V |, i = 1, 2 bekannt. Die Wahrscheinlichkeit pVi , das ein Knoten u in die Teilmenge Vi sortiert wird, ergibt sich zu pVi = |Vi |/|V |. Bei der Repartitionierung des Graphen ist es allerdings unerheblich, ob die Knoten aus V1 in V10 oder V20 sortiert wird, solange die Knoten aus V2 in die jeweils andere Teilmenge V20 bzw. V10 sortiert werden. Deswegen muss bei der Ratewahrscheinlichkeit p0 das Maximum aus den Wahrscheinlichkeiten, dass ein Knoten aus V1 in V10 oder dass ein Knoten aus V1 in V20 sortiert wird, gebildet wird. Der Anteil p0 zufällig richtig partitionierter 35 Kapitel 5. Clusterproblemklassen und Ergebnisse Knoten ist dann: p0 |V1 | |V2 | |V2 | |V1 | = max · p V1 + · pV2 , · p V1 + · p V2 |V | |V | |V | |V | ! |V1 | 2 |V2 | 2 |V1 | |V2 | |V2 | |V1 | = max + , · + · |V | |V | |V | |V | |V | |V | ! |V2 | 2 |V1 | 2 + = |V | |V | (5.3) Der Vergleich mit dieser Wahrscheinlichkeit ist wichtig, um die Leistung des Algorithmus bewerten zu können. Wenn die durch das Verfahren gefundene Partition des Graphen weniger Knoten korrekt partitioniert als Raten ohne weitere Kenntnis des Graphen partitioniert hätte, wäre es nicht sinnvoll den Aufwand zu betreiben. 5.3.1 Ergebnisse beim Test Maximaler Schnitt“ ” Maximaler Schnitt − Vorzeichenmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 20 40 60 80 100 120 140 160 Durchschnittsgrad der Knoten Abb. 5.12: Maximaler Schnitt: Ergebnisse der Vorzeichenmethode bei steigendem Durchschnittsgrad Im vorliegenden Fall waren die Verhältnisse |V1 |/|V | = |V2 |/|V | = 0.5. Die Ratewahrscheinlichkeit p0 ergibt sich nach (5.3) zu p0 = 0.52 + 0.52 = 0.5. In Abb. 5.12 ist der Anteil der von der Vorzeichenmethode richtig partitionierten Knoten, in Abb. 5.13 der Anteil der durch die Histogrammmethode richtig partitionierten Knoten zum Durchschnittsgrad der erzeugten Graphen abgetragen. Bei einem kleinen Durchschnittsgrad d¯ < 20 sind die Ergebnisse kaum besser als Raten. Dies ändert sich mit wachsendem Durchschnittsgrad. Bereits ab einem Durchschnittsgrad von ca. 40 erkennen beide Heuristiken bereits mehr als 95% der Knoten korrekt. Die Grafiken zeigen weitere 2 Sachverhalte: 36 5.3. Ergebnisse der Tests Maximaler Schnitt − Histogrammethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 20 40 60 80 100 Durchschnittsgrad der Knoten 120 140 160 Abb. 5.13: Maximaler Schnitt: Ergebnisse der Histogrammmethode bei steigendem Durchschnittsgrad Eigenwerte: Maximaler Schnitt, 1000 und 10000 Knoten 100 1. Eigenwert − 1000 Knoten 2. Eigenwert − 1000 Knoten 3. Eigenwert − 1000 Knoten 4. Eigenwert − 1000 Knoten 1. Eigenwert − 10000 Knoten 2. Eigenwert − 10000 Knoten 3. Eigenwert − 10000 Knoten 4. Eigenwert − 10000 Knoten Eigenwert λi 80 60 40 20 0 0 50 100 Durchschnittsgrad der Knoten 150 200 Abb. 5.14: Maximaler Schnitt: die 4 größten Eigenwerte in Abhängigkeit zum Durchschnittsgrad 37 Kapitel 5. Clusterproblemklassen und Ergebnisse 1. Ab einem Durchschnittsgrad von ca. 40 nimmt der Prozentsatz der falsch partitionierten Knoten mit wachsendem Durchschnittsgrad ab. 2. Der Prozentsatz der richtig partitionierten Knoten hängt lediglich vom Durchschnitts¯ nicht aber von der Anzahl n der Knoten ab, denn die Graphen in den Abb. 5.12 grad d, und 5.13 sind ab einem bestimmten d¯ ≈ 60 nahezu deckungsgleich. Die Grundlage für das Erkennen der Partition anhand der Eigenvektoren ist der Unterschied der Eigenwerte (zu denen diese Eigenvektoren gehören). Es existieren genau zwei Eigenwer√ te von M ∗ deren Wert mit Θ(w) und genau n − 2 Eigenwerte, deren Betrag mit O( w0 ) abgeschätzt wird (vgl. [CGL07b, Lemma 8]). Dabei ist w0 der in Kapitel 3 eingeführte erwartete Durchschnittsgrad der Knoten. Aus Abb. 5.14 kann entnommen werden, wie die beiden größten Eigenwerte mit zunehmendem Durchschnittsgrad der Knoten wachsen, während der dritt- und viertgrößte Eigenwert zwar ebenfalls wachsen, deren Differenz |λ3 − λ4 | aber nicht in dem Maße zunimmt, sondern nahezu konstant bleibt. Dabei liegen die betragsmäßig drittund viertgrößten Eigenwerte so nah bei einander, dass diese kaum zu unterscheiden sind. Bei einem Durchschnittsgrad von 134 ist bspw. der betragsmäßig drittgrößte Eigenwert 21.67, der betragsmäßig viertgrößte 21.48. Bei den nötigen Skalen der Abbildungen sind diese beiden Linien nicht unterscheidbar. Der Vergleich der Daten an Stelle 40 in den Abb. 5.12 und 5.13 mit Stelle 40 in Abb. 5.14 zeigt, dass der Algorithmus genau dann sehr gute Ergebnisse liefert, wenn die Eigenwerte λ2 und λ3 einen genügend großen Abstand aufweisen. Abb. B.2 in Anhang B bestätigt die zweite Aussage, dass der Anteil korrekt partitionierter Knoten ab einem fixen d¯ unabhängig von der Knotenzahl n ist. In genannter Abbildung sind die vier größten Eigenwerte zu einem fixen Durchschnittsgrad abgetragen. Die Eigenwerte und die Differenzen der Eigenwerte sind zu verschiedenen Knotenzahlen nahezu gleich. Weiterhin zeigt diese Grafik auch, wie nah der betragsmäßig dritt- und viertgrößte Eigenwert bei einander liegen. Beide Heuristiken liefern nahezu gleich gute Ergebnisse. 5.3.2 Ergebnisse beim Test Großer Schnitt“ ” Im Unterschied zum maximalen Schnitt, waren in diesem Test die Teilmengen der Partition verschieden groß: |V1 |/|V | = 1/4 und |V2 |/|V | = 3/4. Die Ratewahrscheinlichkeit p0 beträgt in diesem Fall p0 = (0.752 + 0.252 ) = 0.625 (5.3). Die Wahrscheinlichkeit p0 und der Anteil korrekt erkannter Knoten sind in den Abbildungen 5.15 und 5.16 dargestellt. Abb. 5.15 zeigt dabei die Ergebnisse der Vorzeichenmethode, Abb. 5.16 die Ergebnisse der Histogrammmethode. Diese erzielt deutlich bessere Ergebnisse als die Vorzeichenmethode. Das unterschiedliche Verhalten der Heuristiken ist dem Aussehen der Eigenvektoren geschuldet. Die Eigenvektoren der normalisierten Adjazenzmatrix sind wegen der gewählten Parameter nicht symmetrisch. Beide Heuristiken zeigen das erwartete Verhalten, dass mit steigendem Durchschnittsgrad der Anteil nicht korrekt partitionierter Knoten abnimmt. Zur Begründung der Ergebnisse sind in Abb. 5.17 die vier betragsmäßig größten Eigenwerte zum Durchschnittsgrad abgetragen. Es zeigt sich, dass der Prozentsatz der richtig partitionierten Knoten ab einem Durchschnittsgrad von ≈ 60 bei über 90% liegt (Histogrammmethode). Ab diesem Durchschnittsgrad unterscheiden sich betragsmäßig zweit- und drittgrößter Eigenwert ausreichend, vgl. Abb. 5.17. Anders als im Fall des maximalen Schnitts verhalten sich die n − 2 kleinsten Eigenwerte. Sie verlaufen nicht mehr deckungsgleich, vgl. Abb. 5.17. 38 5.3. Ergebnisse der Tests Grosser Schnitt − Vorzeichenmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 20 40 60 80 100 120 140 Durchschnittsgrad der Knoten 160 180 200 220 Abb. 5.15: Großer Schnitt: Ergebnisse der Vorzeichenmethode bei steigendem Durchschnittsgrad Grosser Schnitt − Histogrammmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 20 40 60 80 100 120 140 160 180 200 220 Durchschnittsgrad der Knoten Abb. 5.16: Großer Schnitt: Ergebnisse der Histogrammmethode bei steigendem Durchschnittsgrad 39 Kapitel 5. Clusterproblemklassen und Ergebnisse Eigenwerte: Grosser Schnitt 25−75, 1000 und 10000 Knoten 100 1. Eigenwert − 1000 Knoten 2. Eigenwert − 1000 Knoten 3. Eigenwert − 1000 Knoten 4. Eigenwert − 1000 Knoten 1. Eigenwert − 10000 Knoten 2. Eigenwert − 10000 Knoten 3. Eigenwert − 10000 Knoten 4. Eigenwert − 10000 Knoten Eigenwert λi 80 60 40 20 0 0 50 100 Durchschnittsgrad der Knoten 150 200 Abb. 5.17: Großer Schnitt: die 4 größten Eigenwerte in Abhängigkeit zum Durchschnittsgrad Abb. B.3 in Anhang B zeigt die Unabhängigkeit der Ergebnisse des Algorithmus von der Knotenzahl ab einem ausreichend großen Durchschnittsgrad. Diese Abbildung zeigt die vier betragsmäßig größten Eigenwerte bei konstantem Durchschnittsgrad zu unterschiedlicher Anzahl Knoten. 5.3.3 Ergebnisse beim Test Kleine Bisektion“ ” Beim Spezialfall der kleinen Bisektion waren die Verhältnisse |V1 |/|V | und |V2 |/|V | gleich. Daraus folgt für die Ratewahrscheinlichkeit p0 = 0.5 (vgl. 5.3). Abb. 5.18 zeigt den Anteil der von der Vorzeichenmethode korrekt partitionierten Knoten in Abhängigkeit zum Durchschnittsgrad der Knoten. Die Anzahl der Knoten blieb dabei konstant. Abb. 5.19 zeigt dies äquivalent für die Histogrammmethode. Der Durchschnittsgrad ab dem beide Heuristiken sehr gute Ergebnisse lieferten lag bei ≈ 150. Der Anteil falsch partitionierter Knoten nimmt ab diesem Durchschnittsgrad mit steigendem Durchschnittsgrad weiter ab. Ab dem Druchschnittsgrad d¯ ≈ 150 ist auch der betragsmäßig zweitgrößte Eigenwert deutlich vom betragsmäßig drittgrößten Eigenwert entfernt, wie Abb. 5.20 zeigt. Diese Abbildung zeigt jeweils die vier betragsmäßig größten Eigenwerte bei konstanter Knotenzahl zum Durchschnittsgrad. Daraus ist ersichtlich, dass die beiden betragsmäßig größten Eigenwerte einen p Betrag von Θ((w)) und die n − 2 betragsmäßig kleinsten Eigenwerte einen Betrag von O( ((w))) haben. Dass beide Heuristiken gleich gute Ergebnisse erzielen, ist in der Symmetrie des Eigenvektors zum betragsmäßig zweitgrößten Eigenwert begründet. Abb. B.4 in Anhang B zeigt, dass der Erfolg des Algorithmus ab einem fixen, problemspezifischen Durchschnittsgrad d¯min , unabhängig von der Knotenzahl ist. Die Eigenwerte zu einem fixen Durchschnittsgrad d¯ > d¯min bei unterschiedlicher Anzahl von Knoten, haben nahezu 40 5.3. Ergebnisse der Tests Kleine Bisektion − Vorzeichenmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 50 100 150 200 Durchschnittsgrad der Knoten 250 300 Abb. 5.18: Kleine Bisektion: Ergebnisse der Vorzeichenmethode bei steigendem Durchschnittsgrad Kleine Bisektion − Histogrammmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 50 100 150 200 250 300 Durchschnittsgrad der Knoten Abb. 5.19: Kleine Bisektion: Ergebnisse der Histogrammmethode bei steigendem Durchschnittsgrad 41 Kapitel 5. Clusterproblemklassen und Ergebnisse Eigenwerte: Kleine Bisektion, 1000 und 10000 Knoten 1. Eigenwert − 1000 Knoten 2. Eigenwert − 1000 Knoten 3. Eigenwert − 1000 Knoten 4. Eigenwert − 1000 Knoten 1. Eigenwert − 10000 Knoten 2. Eigenwert − 10000 Knoten 3. Eigenwert − 10000 Knoten 4. Eigenwert − 10000 Knoten 140 120 Eigenwert λi 100 80 60 40 20 0 0 50 100 150 200 Durchschnittsgrad der Knoten 250 300 Abb. 5.20: Kleine Bisektion: die 4 größten Eigenwerte in Abhängigkeit zum Durchschnittsgrad den gleichen Abstand. 5.3.4 Ergebnisse beim Test Kleiner Schnitt“ ” Als Verhältnis der Teilmengen der Partition wurden für diesen Test |V1 |/|V | = 1/4 und |V2 |/|V | = 3/4 gewählt. Die Ratewahrscheinlichkeit p0 ergibt sich somit zu p0 = 0.625. Abb. 5.21 stellt den Anteil korrekt partitionierter Knoten der Vorzeichenmethode bei konstanter Knotenzahl in Abhängigkeit zum Durchschnittsgrad d¯ dar. Dabei kann ein ähnliches Verhalten dieser Heuristik wie im Fall des großen Schnitts beobachtet werden. Überraschender sind die Ergebnisse der Histogrammmethode in Abb. 5.22. Auch diese Abbildung zeigt den Anteil korrekt partitionierter Knoten bei konstanter Knotenzahl und steigendem Durchschnittsgrad. Vor allem das Verhalten bei einem Durchschnittsgrad von 0 bis 240 scheint chaotisch. Anfangs partitioniert die Heuristik einen recht großen Prozentsatz der Knoten korrekt, um dann mit wachsendem Durchschnittsgrad schlechte oder gar keine Ergebnisse zu finden. Erst ab einem Durchschnittsgrad von ≈ 240 stellt sich das erwartete Verhalten ein. Zur Erklärung dieser Anomalie im Verhalten der zweiten Heuristik muss zunächst Abb. 5.23 herangezogen werden, die das Verhalten der vier betragsmäßig größten Eigenwerte bei konstanter Knotenzahl in Abhängigkeit zum Durchschnittsgrad zeigt. Aus dieser ist ersichtlich, dass es einem minimalen Durchschnittsgrad von d¯min ≈ 240 bedarf, damit die Eigenvektoren überhaupt das notwendige Verhalten zeigen. Denn erst ab diesem Durchschnittsgrad entfernt sich der betragsmäßig zweitgrößte Eigenwert genügend von den n − 2 betragsmäßig kleineren Eigenwerten. Zur Klärung der Ergebnisse der Histogrammmethode bei einem kleineren Durchschnittsgrad müssen folglich zwei Fälle unterschieden werden: 1. Die Histogrammmethode bricht ab, weil kein Minimum gefunden wird. In diesem Fall 42 5.3. Ergebnisse der Tests Kleiner Schnitt − Vorzeichenmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 50 100 150 200 250 Durchschnittsgrad der Knoten 300 350 400 Abb. 5.21: Kleiner Schnitt: Ergebnisse der Vorzeichenmethode bei steigendem Durchschnittsgrad Kleiner Schnitt − Histogrammmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 50 100 150 200 250 300 350 400 Durchschnittsgrad der Knoten Abb. 5.22: Kleiner Schnitt: Ergebnisse der Histogrammmethode bei steigendem Durchschnittsgrad 43 Kapitel 5. Clusterproblemklassen und Ergebnisse Eigenwerte: Kleiner Schnitt, 1000 und 10000 Knoten 200 1. Eigenwert − 1000 Knoten 2. Eigenwert − 1000 Knoten 3. Eigenwert − 1000 Knoten 4. Eigenwert − 1000 Knoten 1. Eigenwert − 10000 Knoten 2. Eigenwert − 10000 Knoten 3. Eigenwert − 10000 Knoten 4. Eigenwert − 10000 Knoten Eigenwert λi 150 100 50 0 0 50 100 150 200 250 Durchschnittsgrad der Knoten 300 350 400 Abb. 5.23: Kleiner Schnitt: die 4 größten Eigenwerte in Abhängigkeit zum Durchschnittsgrad sind die Einträge des Eigenvektors so verteilt, dass im Histogramm kein Minimum gefunden werden kann. Dies ist das erwartete Verhalten eines Eigenvektors bei einem Durchschnittsgrad des Graphen unterhalb von d¯min . 2. Die Histogrammmethode findet ein falsches“ Minimum. Dann hat das Histogramm des ” Eigenvektors zufällig ein Minimum. Dies kann dann auftreten, wenn bestimmte Werte im Eigenvektor nicht vorkommen. Abb. 5.22 lässt ebenso die Vermutung zu, dass in diesem Test der Anteil korrekt partitionierter Knoten abhängig von der Knotenzahl ist. Diese Vermutung ist allerdings abzulehnen. Es existiert der minimale Durchschnittsgrad d¯min ≈ 240 ab dem das Verfahren sehr gute Ergebnisse, unabhängig von der Knotenzahl, liefert. Bei Graphen mit wenigen Knoten kann allerdings bereits ein geringerer Durchschnittsgrad genügen. Ein solcher Graph ist dann allerdings relativ dicht vernetzt, sodass es nicht verwundert, dass dann bereits bei einem geringeren Durchschnittsgrad als d¯min eine nahezu korrekte Partition des Graphen gefunden wird. Abb. B.5 zeigt die Eigenwerte bei konstantem Durchschnittsgrad d¯ > d¯min über einer variierenden Anzahl von Knoten. 5.3.5 Ergebnisse beim Test Unabhängige Menge“ ” Wie in Abschnitt 5.1.3 eingeführt, gibt es in Graphen dieser Problemklasse eine Teilmenge der Knoten, die untereinander keinerlei Kanten besitzen. Die Größenverhältnisse waren dabei |V1 |/|V | = 5/100 und |V2 |/|V | = 95/100, wobei V1 gerade die unabhängige Teilmenge sei. Die Ratewahrscheinlichkeit p0 , wieder vorausgesetzt man kenne die Größen der Teilmengen, beträgt hier p0 = 0.052 + 0.952 = 0.905. Abb. 5.24 zeigt den Anteil der durch die Vorzeichenmethode korrekt partitionierten Knoten bei konstanter Knotenzahl und steigendem 44 5.3. Ergebnisse der Tests Unabhaengige Menge − Vorzeichenmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 100 200 300 400 Durchschnittsgrad der Knoten 500 600 700 Abb. 5.24: Unabhängige Menge: Ergebnisse der Vorzeichenmethode bei steigendem Durchschnittsgrad Unabhaengige Menge − Histogrammmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 10000 Knoten Ratewahrscheinlichkeit 0 0 100 200 300 400 500 600 700 Durchschnittsgrad der Knoten Abb. 5.25: Unabhängige Menge: Ergebnisse der Histogrammmethode bei steigendem Durchschnittsgrad 45 Kapitel 5. Clusterproblemklassen und Ergebnisse Eigenwerte: Unabhaengige Menge, 1000 und 10000 Knoten 300 1. Eigenwert − 1000 Knoten 2. Eigenwert − 1000 Knoten 3. Eigenwert − 1000 Knoten 4. Eigenwert − 1000 Knoten 1. Eigenwert − 10000 Knoten 2. Eigenwert − 10000 Knoten 3. Eigenwert − 10000 Knoten 4. Eigenwert − 10000 Knoten 250 Eigenwert λi 200 150 100 50 0 0 100 200 300 400 Durchschnittsgrad der Knoten 500 600 700 Abb. 5.26: Unabhängige Menge: die 4 größten Eigenwerte in Abhängigkeit zum Durchschnittsgrad Durchschnittsgrad. Die Abbildung zeigt, dass der korrekt partitionierte Knotenanteil bei den durchgeführten Tests immer unterhalb der Ratewahrscheinlichkeit p0 lag. Die Ergebnisse der Histogrammmethode sind in Abb. 5.25 dargestellt. Diese Heuristik zeigt ab einem Durchschnittsgrad von ≈ 280 bei 1000 Knoten, bzw. ≈ 560 bei 10000 Knoten sehr gute Ergebnisse, die deutlich oberhalb der Ratewahrscheinlichkeit liegen. Bei kleineren Durchschnittsgraden wird keine Partition des Graphen gefunden. Der Durchschnittsgrad, ab dem der Algorithmus eine nahezu korrekte Partition des Graphen ausgibt, hängt aber auch bei dieser Problemklasse nicht von der Anzahl der Knoten ab. Weitere Untersuchungen, wie in Anhang B.3 dargestellt, zeigten, dass ein Durchschnittsgrad d¯min von ≈ 560 genügt um einen Graphen dieser Problemklasse nahezu korrekt zu partitionieren. Bei Graphen mit weniger Knoten genügt lediglich ein kleinerer Durchschnittsgrad um bereits Ergebnisse zu liefern. Ein solches Verhalten war auch schon beim Test kleiner Schnitt beobachtbar. Betrachtet man die Eigenwerte in den Abb. 5.26 und B.6, werden diese Aussagen bestätigt. Der Abstand zwischen betragsmäßig zweit- und drittgrößtem Eigenwert ist bei einem Durchschnittsgrad < 560 nicht groß genug. Deswegen haben die Eigenvektoren zu diesen Eigenwerten nicht die benötigte Eigenschaft verschiedener Mittelwerte der Teilvektoren und der Algorithmus bleibt erfolglos. Ab einem Durchschnittsgrad von 560 entfernt sich der betragsmäßig zweitgrößte vom betragsmäßig drittgrößten Eigenwert. 5.4 Zusammenfassung der Ergebnisse Durch die Tests auf Gnp Graphen mit eingepflanzter Partition konnten insbesondere folgende Aussagen abgeleitet werden: 1. Die Auswertung der k größten Eigenwerte einer normalisierten Adjazenzmatrix, wie 46 5.4. Zusammenfassung der Ergebnisse es in [CGL07a] bzw. [CGL07b] vorgeschlagen wird ist ein zielführendes und lohnendes Vorgehen. Die Güte der Ergebnisse ist dabei lediglich von der Güte der Auswertung der gewonnenen Eigenvektoren abhängig. 2. Der Algorithmus arbeitet, abhängig von der Klasse des Clusterproblems, schon bei kleinen Durchschnittsgraden sehr gut. Es existiert für die untersuchten Problemklassen ein Durchschnitttsgrad d¯min ab dem das Verfahren unabhängig von der Knotenzahl des Graphen eine eingepflanzte Partition findet. 3. Die vorgestellte Vorzeichenmethode arbeitet nur in Sonderfällen sehr gut, nämlich dann, wenn die Teilmengen der zu erkennenden Partition annähernd gleich groß sind. 4. Die vorgestellte Histogrammmethode arbeitet ab einem Durchschnittsgrad d¯min sehr gut, liefert aber zuvor keine Ergebnisse. Tabelle 5.1 fasst die Ergebnisse zusammen und stellt dabei die Beziehung zwischen den Modellparametern und einem minimalen Durchschnittsgrad d¯min her. Beeinflussende Modellparameter sind dabei das Größenverhältnis der ersten Teilmenge |V1 | zur Anzahl der Knoten |V | (bei lediglich zwei Teilmengen der Partition ergibt sich die größe der Teilmenge V2 automatisch) und die Faktoren d11 , d22 und d12 . Ab einem d¯min lieferte zumindest eine Heuristik für die einzelnen Tests sehr gute Ergebnisse. Clusterproblem Maximaler Schnitt Großer Schnitt Kleine Bisektion Kleiner Schnitt Unabhängige Menge |V1 | |V | 0.5 0.25 0.5 0.25 0.05 d11 1 1 1 1 0 d22 1 1 1 1 1 d12 , d21 2 1.5 0.75 0.75 1 d¯min 40 60 120 240 600 Tabelle 5.1: Übersicht der Parameter und Ergebnisse Ein weiterer Zusammenhang, der allerdings nicht verwundert, ist aus Tabelle 5.1 abzuleiten: der Durchschnittsgrad muss umso höher sein, je größer der Größenunterschied der Teilmengen der Partition und desto geringer der Unterschied der Kantenwahrscheinlichkeiten. Nähere Untersuchungen zu diesem Zusammenhang wurden im Rahmen dieser Studienarbeit nicht vorgenommen. 47 6 Zusammenfassung und Ausblick 6.1 Zusammenfassung der Studienarbeit Das Ziel der Arbeit, den vorgestellten Algorithmus zu implementieren und an einigen Tests zu überprüfen und zu bewerten wurde erreicht. Die entworfenen Heuristiken zeigten für die getesteten Fälle zufriedenstellende Resultate. In Kapitel eins wurde zunächst das Problem motiviert und einige praktische Beispiele aufgeführt, an welchen Stellen die Partitionierung riesiger Graphen eine Anwendung findet bzw. bei weiterer Verbesserung der zur Verfügung stehenden Algorithmen, finden könnte. Kapitel zwei legte die Grundlagen der beschriebenen Verfahren dar und ging detailliert auf die Berechnung von Eigenwerten und Eigenvektoren ein. Weiterhin wurde mittels zweier Gedankenexperimente der Zusammenhang zwischen den Eigenvektoren zu den größten Eigenwerten und der Struktur eines Graphen erläutert. Das Kapitel verweist dabei auf weiterführende Literatur, die zum Studium numerischer Methoden zur effizienten Berechnung von Eigenwerten und Eigenvektoren von Nutzen sein kann. Kapitel drei führte den zu implementierenden Algorithmus ein und erläuterte ein Modell mit dem natürlich gewachsene Graphen simuliert werden können. In einer kurzen Analyse wurde die Wirkungsweise des Algorithmus erklärt. An den entsprechenden Stellen wurden Aussagen zur theoretischen Laufzeit des Algorithmus getroffen. In Kapitel vier wurde die eigentliche Implementierung beschrieben dokumentiert. Dabei wurde der Versuch unternommen eine möglichst effiziente Umsetzung des Algorithmus zu finden. Auf die Vermeidung von Schleifen und den Einsatz von Matrixmultiplikationen wurde verwiesen. Mathematische Zusammenhänge, die eine effiziente Implementierung erst ermöglichten, wie bspw. der Zusammenhang von Eigenwerten und Singulärwerten, wurden gezeigt. Die Ergebnisse des Algorithmus wurden in Kapitel fünf dargestellt. Dabei wurden die Heuristiken zur Auswertung des Eigenvektors zum betragsmäßig zweitgrößten Eigenwert bewertet, ein minimaler Durchschnittsgrad d¯min für die einzelnen Tests bestimmt und Begründungen für eventuelle Fehler der Heuristiken geliefert. Aus den Beobachtungen der Ergebnisse folgten natürlicher Weise Fragen. Die Beantwortung dieser Fragen würde weitere Klarheit über die Verwendbarkeit des Algorithmus für den Einsatz in der Praxis bringen. 6.2 Ausblick für weitere Untersuchungen Die Tests mittels derer eine Bewertung des Algorithmus und der Implementierung erfolgte, spiegeln lediglich akademische Konstrukte von Graphen wider. Dieses Vorgehen war notwendig um Einflussfaktoren zu isolieren und eine differenzierte Betrachtung zu ermöglichen. Für weitergehende Untersuchungen sollten die Parameter der Modellinstanzen so gewählt werden, dass damit natürlich gewachsene Graphen simuliert werden. Neben verschiedenen Gradsequenzen könnte das Modell auch auf mehr als zwei Teilmengen in einer Partition erweitert werden. Damit wären folgende Vorschläge eine interessante Fortführung dieser Arbeit: 48 6.2. Ausblick für weitere Untersuchungen 1. Unterschiedliche Knotengewichte innerhalb eines Graphen zur Erzeugung von PowerLaw-Graphen u. a. 2. Eine Erweiterung des Modells und des Algorithmus, so dass eine fixe Zahl k > 2 von Teilmengen einer Partition erkannt und ausgegeben werden. 3. Eine Erweiterung des Algorithmus, so dass eine beliebige, a-priori nicht bekannte, Anzahl von Teilmengen einer Partition erkannt und ausgegeben werden. 4. Test des Algorithmus mit verschiedenen eingepflanzten Cluster Problemen. Was wird bspw. erkannt, wenn ein Graph eine oder mehere unabhängige Mengen und einen großen Schnitt aufweist? Ein Test des Algorithmus an realen gewachsenen Netzen/Graphen nach der Umsetzung von Vorschlag drei würde genauere Aussagen über die Praxistauglichkeit des Algorithmus bringen. 49 Literaturverzeichnis [AK98] Alon, N. und Kahale, N.: A spectral technique for coloring random 3-colorable graphs. In: SIAM J. Comput., Band 26, Seiten 1733 – 1748, 1998. [Beu06] Beucher, O.: MATLAB und Simulink – Grundlegende Einführung für Studenten und Ingenieure in der Praxis. Pearson Studium, 2006. 3., überarbeitete Auflage. [CGL06] Coja-Oghlan, A., Goerdt, A. und Lanka, A.: Spectral partitioning of Random Graphs with Given Expected Degrees. In: Navarro, G., Bertossi, L. und Kohayakawa, Y. (Herausgeber): 4th IFIP International Conference on Theoretical Computer Science - TCS 2006 (19th World Computer Congress 2006, Santiago de Chile), Seiten 271–282, 2006. [CGL07a] Coja-Oghlan, A., Goerdt, A. und Lanka, A.: Spectral Partitioning of Random Graphs with Given expected Degrees. Vorläufige Version, unveröffentlicht, 2007. [CGL07b] Coja-Oghlan, A., Goerdt, A. und Lanka, A.: Spectral Partitioning of Random Graphs with Given expected Degrees. Zur Veröffentlichung eingereichtes Papier, 2007. [CK00] Condon, A. und Karp, R. M.: Algorithms for Graph Partitioning on the Planted Partition Model. 2000. [CO06] Coja-Oghlan, A.: On the Laplacian Eigenvalues of Gn,p . In: ICALP, 2006. [DHM04] Dasgupta, A., Hopcroft, J.E. und McSherry, F.: Spectral Analysis of Random Graphs with Skewed Degree Distributions. In: 45th FOCS, Seiten 602 – 610, 2004. [GO95] Golub, G.H. und Ortega, J.M.: Wissenschaftlches Rechnen und Differentialgleichungen. In: Gorenflo, R. und Lenz,H. (Herausgeber): Berliner Studienreihe zur Mathematik, Band 6. Heldermann Verlag Berlin, 1995. In deutscher Sprache herausgegeben von Grigorieff, R.D. [Göh99] Göhler, W.: Formelsammlung höhere Mathematik. Verlag Harri Deutsch, 1999. 14. überarbeitete Auflage. [McS01] McSherry, F.: Spectral Partitioning of Random Graphs. 2001. [MD03] Mendes, J. F. F. und Dorogovtsev, S. N.: Evolution of Networks. Oxford University Press, 2003. [Sch97] Schöning, U.: Theoretische Informatik kurzgefaßt. Spektrum Akademischer Verlag, 1997. 3. Auflage. [Str03] Strang, G.: Lineare Algebra. Springer Verlag Berlin Heidelberg, 2003. 50 Anhang A Implementierung Dieser Anhang dokumentiert die erstellten Matlab-Skripte. Zunächst wird der Aufbau und die Zusammenarbeit der einzelnen Funktionen in Abb. A.1 dargestellt. Abb. A.1: Struktur und Zusammenarbeit der erzeugten Matlab-Skripte A.1 Zusammenarbeit der Funktionen Die von der Funktion al2 createGraph() erzeugten Graphen werden im Ordner graphs abgespeichert. Die abgespeicherte Datei enthält die Variable adjacency, die den Graph in seiner Adjazenzmatrixdarstellung beinhaltet. Wenn ein bereits vorhandener Graph durch den Algorithmus analysiert werden soll, muss dessen Adjazenzmatrix in der Variable adjacency in 51 Anhang A. Implementierung einer von Matlab lesbaren Datei vorliegen und der Dateiname an die Funktion al2 step1to5() übergeben werden. Im Ordner vectors findet sich ein Abbild des kompletten Matlab-Workspace nach den Schritten eins bis fünf des Algorithmus. Diese Dateien beinhalten beispielsweise die Variablen s 1 für den Vektor s1 , s 2 für den Vektor s2 oder M star für die normalisierte Adjazenzmatrix M ∗ . Diese Datei wird im letzten Schritt des Algorithmus von der Funktion al2 step6 2H() verwendet. Im Ordner results wird der Workspace der Funktion al2 step6 2H schließlich gespeichert. Dieser enthält beispielsweise die charakteristischen Vektoren der Mengen V10 und V20 . In den Ordnern times und otherResults finden sich statistische Angaben: im Ordner times werden die tatsächlichen Rechenzeiten zur Anzahl der Knoten gespeichert. Jede der drei Matlab-Funktionen schreibt ihre gemessene Zeit in eine Datei, vgl. Abb.A.1. Der Ordner otherResults enthält drei Dateien: in eigenValueToD.txt werden die vier größten Eigenwerte zum Durchschnittsgrad der Knoten, in eigenValueToN.txt die vier größten Eigenwerte zur Anzahl der Knoten und in percentToDegree.txt der Anteil korrekt eingeordneter Knoten zum Durchschnittsgrad abgetragen. Diese Dateien können sehr einfach mit Programmen wie Gnuplot oder ähnlichen visualisiert werden. A.2 Ausführung des gesamten Algorithmus Zur Ausführung des gesamten Algorithmus inklusive der Erzeugung eines zufälligen Graphen wird die Funktion al2() verwendet. Tabelle A.1 erläutert die zu übergebenden Parameter. Parameter numVertices weight Name im Modell n wu sizeP1 d 11 d11 d 12 d12 d 22 d11 fileName [Typ] Beschreibung [Integer] Anzahl der Knoten des Graphs [Integer] Gewicht der Knoten. Hierbei wird jedem Knoten u das identische Gewicht wi zugewiesen. [Float] 0 < sizeP1 < 1. Größe der ersten Teilmenge. Dabei gilt: |V1 | = sizeP1 · |V | und demzufolge |V2 | = (1 − sizeP1) · |V |. [Float] Faktor für die Wahrscheinlichkeit einer Kante innerhalb der ersten Teilmenge V1 . [Float] Faktor für die Wahrscheinlichkeit einer Kante zwischen den beiden Teilmengen V1 und V2 der Knotenmenge V . [Float] Faktor für die Wahrscheinlichkeit einer Kante innerhalb der zweiten Teilmenge V2 . [String] Dateiname unter dem die Ergebnisse des Algorithmus gespeichert werden. Tabelle A.1: Übersicht der Parameter zum kompletten Durchlauf des Algorithmus inklusive der Erzeugung einer Modellinstanz Die Parameter weight, d 11, d 12, d 22, müssen in Abhängigkeit zu numVertices so gewählt werden, dass die Wahrscheinlichkeit jeder Kante p{u,v} ≤ 1 ist. Die Matrix D aus dem Modell ist eine symmetrische Matrix. Deswegen muss d21 nicht explizit übergeben werden, da 52 A.3. Erzeugung eines zufälligen Graphen gilt d12 = d21 . Der Aufruf des kompletten Algorithmus inklusive Erzeugung einer Modellinstanz geschieht mittels folgendem Aufruf % Algorithmus inklusive Erzeugung einer Modellinstanz al2(numVertices,weight,sizeP1,d_11,d_12,d_22,fileName); A.3 Erzeugung eines zufälligen Graphen Die Erzeugung einer Modellinstanz leistet die Funktion al2 createGraph(), die in der zugehörigen Datei al2 createGraph.m kodiert ist. Als Eingaben zum Erzeugen einer Modellinstanz werden modellbedingt vier Parameter benötigt, die in nachfolgender Tabelle A.2 aufgelistet und beschrieben sind. Parameter numVertices vecWeights Name im Modell n wu vecPartitions ψ(u) matD D [Typ] Beschreibung [Integer] Anzahl der Knoten des Graphs [Vektor] der Länge n, enthält an der Stelle u das Gewicht wu das Knotens u. u = 1, . . . , n. [Vektor] der Länge n, enthält an der Stelle u eine 1, wenn Knoten u zu Partition V1 gehört und an Stelle u eine 2, wenn Knoten u zu Partition V2 gehört. u = 1, . . . , n. [Matrix] der Größe k×k, wobei k die Anzahl der Partitionen ist. D enthält die Faktoren für die Wahrscheinlichkeit einer Kante eines Knotens aus Partition Vi zu einem Knoten aus Partition Vj . i, j = 1, 2. Tabelle A.2: Übersicht Parameter zur Erzeugung einer Modellinstanz Zusätzlich zu den durch das Modell vorgegebenen Parametern erwartet die Funktion noch den String fileName unter dessen Namen nach Erzeugung des Graphen die Adjazenzmatrix im Ordner graphs/ abgespeichert wird. Der Aufruf der Funktion erfolgt dann mittels % Instanz eines zufälligen Graphen erzeugen al2_createGraph(numVertices,vecWeights,vecPartitions,matD,fileName); A.3.1 Implementierung In die erzeugten Graphen wurde jeweils eine Partition derart eingepflanzt, dass die ersten sizeP1 · |V | Knoten in der ersten Teilmenge der Partition liegen, die restlichen in der zweiten Teilmenge. Die Zuordnung übernimmt dabei die Funktion al2(), die den Vektor vecVertices erzeugt, an dessen u-ter Stelle die Nummer der Teilmenge des Knotens u steht, vgl. Tabelle A.2. Nur anhand des Wissens über die Größe der eingepflanzten Partition und der Zuordnung der Knoten zu den Teilmengen ist es später möglich den Prozentsatz der korrekt partitionierten Knoten zu bestimmen. 53 Anhang A. Implementierung A.3.2 Laufzeit Zu Anfang der Berechnung wird die Summe W der Gewichte der Knoten bestimmt. Dies geschieht in einer Laufzeit von O(n). Beim Einfügen der Kanten wurde die Eigenschaft der Symmetrie der Adjazenzmatrix von ungerichteten Graphen ausgenutzt. In der Berechnung werden zudem nur unterschiedliche Knoten u, v ∈ V : u 6= v betrachtet, da die Hauptdiagonale aus nur Null-Einträgen besteht (Kanten von einem Knoten zu sich selbst sind nach unserem Modell ausgeschlossen. Es müssen nur die Einträge für die untere Dreiecksmatrix berechnet werden. Das sind n · (n − 1)/2 viele Einträge. Setzt man den Zugriff auf zwei Speicherplätze als konstant an, ist die Laufzeit O((n2 − n)/2) = O(n2 ). Laufzeiten der Grapherzeugung 140000 120000 100000 Zeit [s] 80000 60000 40000 20000 gemessene Werte ax2 + bx + c 0 0 10000 20000 30000 40000 50000 60000 Anzahl der Knoten im Graph 70000 80000 90000 100000 Abb. A.2: Laufzeitverhalten der Grapherzeugung Die gemessenen und protokollierten Laufzeiten der Grapherzeugung sind in Abbildung A.2 abgetragen. Dabei wurden die Messergebnisse einem Polynom 2. Grades angenähert um noch einmal den quadratischen Aufwand herauszustellen. Während der gesamten Experimente nahm die Erzeugung von Testfällen die meiste Rechenzeit in Anspruch, da es hier nach unserem Kenntnisstand keine Möglichkeit gab eine geeignete Matlab-interne Funktion oder Matrixmultiplikationen zu verwenden, wie dies bei der Implementierung des eigentlichen Algorithmus später geschah. Vielmehr ist es von Nöten gewesen innerhalb von zwei for-Schleifen die Kanten in die Adjazenzmatrix einzufügen. A.4 Schritte 1 - 5 des Algorithmus Ziel der Schritte eins bis fünf des Algorithmus ist aus einer gegebenen Adjazenzmatrix eine in gewissem Sinne normalisierte Adjazenzmatrix zu erzeugen und deren zwei betragsmäßig größten Eigenwerte mit den zugehörigen Eigenvektoren zu errechnen. A.4.1 Aufruf und Parameter Die beschriebenen Schritte sind recht einfach in Matlab-Code umzusetzen. Aus diesem Grund wurden sie zu der Funktion al2 step1to5() zusammengefasst. Die Funktion erwartet lediglich einen Parameter, den Name der Datei in der die Adjazenzmatrix des Graphen abgespeichert wurde. Der Aufruf ist dann folgender: % Schritte 1 bis 5 ausführen al2_step1to5(fileName); 54 A.4. Schritte 1 - 5 des Algorithmus Die Leistung bei der Implementierung bestand darin, die möglichst effizienteste Umsetzung in Matlab zu finden. Dazu muss, wenn möglich, an Stelle von for-Schleifen auf Vektor- und Matrixoperationen bzw. Matlab-eigene Funktionen zurück gegriffen werden. Beispielhaft seien dazu zwei Implementierungsmöglichkeiten für Schritt 1, dem Berechnen des Durchschnitts¯ d m ist dm . grades gezeigt. Die Variable d bar repräsentiert dabei d, Variante 1: d_bar = 0; for i = 1:numVertices, d(i) = 0 for j=1:numVertices d(i) = d(i)+(adjacency(i,j); end d_bar = d_bar + d(i)/numVertices; end d_m = d_bar^0.9 Variante 2: deg = sum(adjacency); d_bar = sum(deg)/numVertices; d_m = d_bar^0.9; Variante 2 ist nicht nur kürzer, sondern auch wesentlich schneller, was allerdings nicht nur daran liegt, dass bei Variante 1 in jedem Schleifendurchlauf eine Division durchgeführt werden muss, sondern dass, so zumindest unsere Vermutung an dieser Stelle, der Speicherzugriff innerhalb der for-Schleife von Variante 1 ein Vielfaches der Laufzeit der Matlab-eigenen sum-Funktion benötigt. Diese Funktion liefert angewandt auf eine Matrix einen Vektor der Zeilensummen und angewandt auf einen Vektor die Summe dessen Einträge. In Abb. A.3 sind die Laufzeiten der beiden Varianten verglichen und in Abb. A.4 noch einmal die Laufzeit der Variante 2 abgetragen um zu zeigen, das auch diese in Abhängigkeit zu n steigt. Abb. A.3: Laufzeiten der Varianten 1 und 2 im Vergleich Abb. A.4: Laufzeit von Variante 2 Die Berechnung des Durchschnittsgrades in Schritt 1 wurde, wie oben beispielhaft angegeben, durch die zweimalige Verwendung der sum-Funktion implementiert. Die Verwendung von Matrixmultiplikationen in Schritt 2 und 4 wurde bereits in den Abschnitten 4.4.1 und 4.4.2 angegeben. Ebenso beschreibt Kapitel 4 ausführlich, warum Singulärwerte statt Eigenwerten berechnet werden. 55 Anhang A. Implementierung A.5 Schritt 6 des Algorithmus Die zwei in Abschnitt 4.6 beschriebenen Heuristiken die mittels einem Eigenvektor eine Partition des Graphen ausgeben sollen, sind in der Funktion al2 step6 2H() zusammengefasst und in der Datei al2 step6 2H.m kodiert. Die Funktion erwartet als Argument den Namen der Datei in der die Eigenvektoren s1 und s2 der normalisierten Adjazenzmatrix gespeichert sind. Der Aufruf der Funktion ist dann: % Schritt 6 ausführen al2_step5_2H(fileName); Aussagen zur Laufzeit der Heuristiken sind Abschnitt 4.6 zu entnehmen. 56 Anhang B Zusätzliche Grafiken Dieser Anhang enthält zusätzliche Grafiken, die im Hauptteil der Arbeit weggelassen wurden um einen besseren Lesefluss zu gewährleisten. B.1 Laufzeit Schritt 6 Dieser Abschnitt beinhaltet eine Laufzeitmessung des sechsten Schrittes des Algorithmus. In Abschnitt 4.7.2 wurde in Abb. 4.7 eine ähnliche Messung durchgeführt. Da die Laufzeiten auf verschiedenen Rechnern gemessen wurden, können die Ergebnisse nur schwer verglichen werden. Während Abb. 4.7 ein quadratisches Verhalten der Laufzeit gegenüber der Knoten darstellt, scheint der Zusammenhang in Abb. B.1 linear. Dieser Zusammenhang könnte in weiteren Arbeiten zu dem hier verwendeten Verfahren, vor allem bei Graphen mit deutlich mehr als 10000 Knoten, nochmals gründlicher Untersucht werden. Bei Graphen mit weniger als 10000 Knoten ist die absolute Zeit, die Schritt sechs benötigt, zu gering um gute Messwerte erhalten zu können. Laufzeit Schritt 6 − konstanter Durchschnittsgrad 0.25 0.2 Zeit [s] 0.15 0.1 0.05 Heuristik 1 Heuristik 2 0 0 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 Abb. B.1 zeigt eine Messung der Laufzeiten von Heuristik 1 und Heuristik 2 aus Schritt sechs des Algorithmus bei 500, 1000, 5000 und 10000 Knoten. Die Laufzeit hat grob einen linearen Verlauf. Dieser Zusammenhang würde sicherlich noch deutlicher, wenn weitere Laufzeiten bei Graphen mit mehr als 10000 Knoten gemessen worden wären. Abb. B.1: Laufzeit von Schritt 6 in Abhängigkeit zur Anzahl n der Knoten B.2 Eigenwerte zu konstantem Durchschnittsgrad Der folgende Abschnitt zeigt das Verhalten der Eigenwerte bei konstantem Durchschnittsgrad. Die Abbildungen entstammen jeweils den zu Tests herangezogenen Problemklassen. Dabei wurden Graphen mit 1000, 5000 und 10000 Knoten zur Untersuchung verwendet. 57 Anhang B. Zusätzliche Grafiken B.2.1 Eigenwerte beim Test Maximaler Schnitt“ ” Eigenwerte: Maximaler Schnitt, Durchschnittsgrad 50 120 Eigenwert λi 100 80 1. Eigenwert 2. Eigenwert 3. Eigenwert 4. Eigenwert 60 40 20 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 Abb. B.2: Maximaler Schnitt: die 4 größten Eigenwerte in Abhängigkeit zur Knotenzahl Abb. B.2 zeigt die vier betragsmäßig größten Eigenwerte der Matrix M ∗ beim Test maximaler Schnitt“ in ” Abhängigkeit zur Knotenzahl. Der Durchschnittsgrad lag konstant bei d¯ = 50 > d¯min . Bei steigender Knotenzahl ist der betragsmäßig drittgrößte Eigenwert deutlicher von betragsmäßig viertgrößten Eigenwert zu unterscheiden. B.2.2 Eigenwerte beim Test Großer Schnitt“ ” Eigenwerte: Grosser Schnitt 25−75, Durchschnittsgrad 150 220 Abb. B.3 zeigt die vier betragsmäßig größten Eigenwerte der Matrix M ∗ beim Test großer Schnitt“ in ” Abhängigkeit zur Knotenzahl. Der gewählte Durchschnittsgrad lag bei d¯ = 150 > d¯min . Auch bei steigender Knotenzahl sind betragsmäßig drittund viertgrößter Eigenwert kaum zu unterscheiden. Der Abstand Abb. B.3: Großer Schnitt: die 4 größten Eigenwerte in zwischen betragsmäßig zweit- und Abhängigkeit zur Knotenzahl drittgrößtem Eigenwert ist ausreichend für gute Ergebnisse des Verfahrens. 200 180 Eigenwert λi 160 140 120 1. Eigenwert 2. Eigenwert 3. Eigenwert 4. Eigenwert 100 80 60 40 20 1000 58 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 B.2. Eigenwerte zu konstantem Durchschnittsgrad B.2.3 Eigenwerte beim Test Kleine Bisektion“ ” Eigenwerte: Kleine Bisektion, Durchschnittsgrad 210 220 200 180 Abb. B.4 zeigt die vier betragsmäßig größten Eigenwerte der Matrix M ∗ beim Test kleine Bisektion“ in ” Abhängigkeit zur Knotenzahl. Der gewählte Durchschnittsgrad war d¯ = 210 > d¯min . Betragsmäßig dritt- und viertgrößter Eigenwert sind kaum zu unterscheiden, zweit- und drittAbb. B.4: Kleine Bisektion: die 4 größten Eigenwerte in größter jedoch sehr gut. Eigenwert λi 160 140 1. Eigenwert 2. Eigenwert 3. Eigenwert 4. Eigenwert 120 100 80 60 40 20 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 Abhängigkeit zur Knotenzahl B.2.4 Eigenwerte beim Test Kleiner Schnitt“ ” Eigenwerte: Kleiner Schnitt, Durchschnittsgrad 300 Abb. B.4 zeigt die vier betragsmäßig größten Eigenwerte der Matrix M ∗ beim Test kleiner Schnitt“ in ” Abhängigkeit zur Knotenzahl. Der Durchschnittsgrad lag konstant bei d¯ = 300 > d¯min . Auch bei steigender Knotenzahl sind betragsmäßig drittund viertgrößter Eigenwert kaum zu unterscheiden. Der Abstand zwischen betragsmäßig zweit- und Abb. B.5: Kleiner Schnitt: die 4 größten Eigenwerte in drittgrößtem Vektor ist geringer als Abhängigkeit zur Knotenzahl in den Fällen zuvor aber dennoch ausreichend um gute Ergebnisse zu erzielen. 300 250 1. Eigenwert 2. Eigenwert 3. Eigenwert 4. Eigenwert Eigenwert λi 200 150 100 50 0 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 59 Anhang B. Zusätzliche Grafiken B.2.5 Eigenwerte beim Test Unabhängige Menge“ ” Eigenwerte: Unabhaengige Menge, Durchschnittsgrad 630 Abb. B.4 zeigt die vier betragsmäßig größten Eigenwerte der Matrix M ∗ beim Test unabhängige Menge“ in ” Abhängigkeit zur Knotenzahl. Der Durchschnittsgrad lag konstant bei d¯ = 630 > d¯min . Ab 5000 Knoten ist der Abstand zwischen betragsmäßig zweit- und drittgrößtem Eigenwert konstant. Dieser Abstand ist kleiner als in den zuvor betrachAbb. B.6: Unabhängige Menge: die 4 größten Eigenwer- teten Tests. Allerdings genügt dieser te in Abhängigkeit zur Knotenzahl Abstand, damit das Verfahren gute Ergebnisse liefert. Die betragsmäßig dritt- und viertgrößten Eigenwerte unterscheiden sich kaum. 700 600 Eigenwert λi 500 400 300 1. Eigenwert 2. Eigenwert 3. Eigenwert 4. Eigenwert 200 100 0 1000 2000 3000 4000 5000 6000 Anzahl der Knoten 7000 8000 9000 10000 B.3 Konvergenz zu einem minimalen Durchschnittsgrad beim Clusterproblem Unabhängige Menge“ ” Im Test der unabhängigen Menge“ hätte der Eindruck entstehen können, dass der minimale ” Durchschnittsgrad, ab dem das Verfahren gute Ergebnisse liefert, von der Anzahl der Knoten im Graph abhängig sei. Abb. B.7 zeigt den Anteil der durch Heuristik 2 korrekt partitionierten Knoten bei steigendem Durchschnittsgrad. Es wurden Graphen mit 1000, 2000, 3500, 5000 und 10000 Knoten generiert und ausgewertet. Deutlich wird in dieser Abbildung, dass die minimalen Durchschnittsgrade d¯min (n), wobei n die Anzahl der Knoten im Graph sei, für steigendes n gegen einen globalen minimalen Durchschnittsgrad d¯min konvergieren. Dieser globale minimale Durchschnittsgrad d¯min liegt bei den gewählten Parametern für die Problemklasse Unabhängige Menge“ bei ≈ 600. Dies bestätigten auch weitere Tests bei Graphen mit ” 20000 und 30000 Knoten. Es wurden Stichprobenartig zwei Instanzen dieser großen Graphen mit einem Durchschnittsgrad von ≈ 700 erzeugt. Bei diesen Stichproben wurden ebenfalls 99.91% bzw. 99.87% der Knoten korrekt partitioniert. Diese Aussagen beziehen sich allerdings ausschließlich auf die Ergebnisse von der Vorzeichenmethode. 60 B.3. Konvergenz zu einem minimalen Durchschnittsgrad beim Clusterproblem Unabhängige Menge“ ” Unabhaengige Menge − Histogrammmethode 100 richtig zugeordnete Knoten [%] 80 60 40 20 1000 Knoten 2000 Knoten 3500 Knoten 5000 Knoten 10000 Knoten 0 0 100 200 300 400 Durchschnittsgrad der Knoten 500 600 700 Abb. B.7: Unabhängige Menge: Ergebnisse der Histogrammmethode bei steigendem Durchschnittsgrad, 1000, 2000, 3500, 5000 und 10 000 Knoten 61 Selbstständigkeitserklärung Hiermit erkläre ich, dass ich die vorliegende Arbeit selbstständig angefertigt, nicht anderweitig zu Prüfungszwecken vorgelegt und keine anderen als die angegebenen Hilfsmittel verwendet habe. Sämtliche wissentlich verwendete Textausschnitte, Zitate oder Inhalte anderer Verfasser wurden ausdrücklich als solche gekennzeichnet. Chemnitz, den 1. Mai 2007 Steffen Riediger