• Keine Ergebnisse gefunden

Ein neues Lösungsarchiv für das Generalized Minimum Spanning Tree-Problem

N/A
N/A
Protected

Academic year: 2022

Aktie "Ein neues Lösungsarchiv für das Generalized Minimum Spanning Tree-Problem"

Copied!
54
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ein neues Lösungsarchiv für das Generalized Minimum Spanning

Tree-Problem

DIPLOMARBEIT

zur Erlangung des akademischen Grades

Diplom-Ingenieur

im Rahmen des Studiums

Software Engineering/Internet Computing

eingereicht von

Mika Sonnleitner

Matrikelnummer 0225096

an der

Fakultät für Informatik der Technischen Universität Wien

Betreuung

Betreuer: Univ.-Prof. Dr. Günther Raidl Mitwirkung: Univ.-Ass. Dr. Bin Hu

Wien, TT.MM.JJJJ

(Unterschrift Verfasser) (Unterschrift Betreuer)

Technische Universität Wien

(2)

Mika Sonnleitner

Hütteldorfer Straÿe 150-158/21/5

1140 Wien

Hiermit erkläreih,dassih diese Arbeitselbständig verfassthabe,dass ih diever-

wendetenQuellenundHilfsmittelvollständigangegebenhabeunddassihdieStellender

Arbeit einshlieÿlih Tabellen, Karten und Abbildungen , die anderen Werken oder

dem Internet im Wortlaut oder dem Sinn nah entnommen sind, auf jeden Fall unter

Angabe derQuelleals Entlehnung kenntlih gemaht habe.

Wien, ?.9.2010

(3)

DieseArbeitbehandeltdasGeneralized MinimumSpanning Tree-Problem(GMST),ein

kombinatorishes Optimierungsproblem, das auf dem Mininum Spanning Tree (MST)-

Problembasiert.

Das GMST ist eine Verallgemeinerung des klassishen MST-Problems, das darin

besteht, für einen gegebenen Graphen einen minimalen Spannbaum zu nden. Die Ver-

allgemeinerung besteht darin, dass die Knoten in Cluster partitioniert sind. Für eine

konkreteLösungwirdeinSpannbaumgebildet,derausjedemClustergenaueinenKnoten

verwendet. Während das MST in polynomieller Zeit optimal lösbar ist, ist das GMST

NP-shwierig.

In dieser Arbeit wird ein evolutionärer Algorithmus (EA) verwendet, der ein trie-

basiertesLösungsarhiv,basierendaufzweivershiedenenBetrahtungsweisendesGMST,

verwendet. Die erste Sihtweise besteht darin, die Knoten in den jeweiligen Clustern

festzulegen.DadasverbleibendeProblemdemMSTentsprihtundsomitinpolynomieller

Zeitgelöstwerdenkann,kanneineLösungdurhdieAngabederKnotenspeziziertwer-

den.Die zweite Vorgehensweise ist dann,dieglobalenVerbindungen zwishen den Clus-

tern festzulegen. Auh hier kann dasverbleibende Problem inpolynomieller Zeit gelöst

werden, und zwar mittelsdynamisherProgrammierung.

In einem Lösungsarhiv können Lösungen gespeihert werden, um einerseits Dup-

likatezuerkennen,umsieniht einweiteres Malbearbeitenzumüssen,undandererseits

eine neue, noh niht durhsuhte Lösung zu bekommen. Daein Lösungsarhiv für die

erste Sihtweise bereitsimplementiertwurde,wurde in dieserArbeiteines fürdiezweite

entworfen. Dieses Lösungsarhiv basiert auf der Sihtweise, die globalen Verbindungen

festzulegen. Es werden zwei vershiedene Darstellungsarten von Spannbäumen verwen-

det, die diese globalen Kanten repräsentieren, nämlih die Darstellung der Predeessor

sowie Prüfernummern. Auÿerdem wurden die beiden Arhive kombiniert, um bessere

Ergebnisse alsmit einem alleine zuerhalten.

Wie die Tests gezeigt haben, konnten mit dem neuen Arhiv bessere Lösungen im

VergleihzumEAgefundenwerden.MitderVerwendungbeiderArhivenohbessereLö-

sungengefundenwerden,wobeidieseVersioneinengröÿerenSpeiherverbrauhaufweist.

(4)

This thesis deals with the Generalized Minimum Spanning Tree Problem (GMST), a

ombinatorial optimizationproblembasedontheMinimumSpanningTree(MST)Prob-

lem.

The GMST isa generalization of thelassi MSTProblemwhih onsistsinnding

a minimum spanning tree for a given graph. The generalization onsists inpartionizing

thenodes inlusters. In order to obtain a onrete solution, a spanning tree is formed,

whihspansexatlyonenodefromeahluster.WhiletheMSTissolvableinpolynomial

time,the GMSTis NP-hard.

In this thesis, an evolutionary algorithm (EA) is used whih is omplemented by

a trie-based solution arhive using two dierent views of the GMST. The rst view is

onerned with seleting the node for eah luster. As the remaining problem equals

to the MST, the solution an be enoded by speifying the nodes. The seond view is

onerned withspeifyingtheglobaledges between thelusters.Theremainingproblem

an be solved usingdynami programming.

Using a solution arhive, it is possible to store solutions generated by the EA in

ordertodetet dupliates andfurthermoreto onvertsuhdupliates intonewsolutions

whih have not yet been examined. As a solution arhive for the rst view mentioned

hasalreadybeen implemented,this thesisisonernedwithdesigningan arhive forthe

seondview.Thissolution arhiveis basedonthe view to speifytheglobal edges. Two

dierentenodingsofspanningtreesareusedwhihrepresenttheseglobaledges,namely

thePredeessor-enodingandthePrüfer-enoding.Furthermorebotharhiveshavebeen

ombined to improve the obtainedsolutions.

Astestshaveshown,usingthearhiveimprovesthequalityofthesolutionsompared

to the pure EA. Using both arhives ombined, even better results an be obtained at

theexpense ofa highermemory usage.

(5)

Erklärung . . . i

Kurzfassung . . . ii

Abstrat . . . iii

Inhaltsverzeihnis iv 1 Einführung 1 1.1 Das MinimumSpanningTree-Problem . . . 1

1.2 Das GeneralizedMinimumSpanning Tree-Problem . . . 1

1.3 Bisherige Arbeit . . . 2

1.4 Heuristishe Optimierungsverfahren . . . 3

1.5 Evolutionäre Algorithmen . . . 3

1.6 Lösungsarhiv . . . 4

1.7 Tries . . . 4

2 Ablauf des Algorithmus 6 2.1 Zwei Lösungskodierungen fürdasGMST-Problem . . . 6

2.2 Aufbau desEAs. . . 7

2.3 Repräsentierung von Lösungen . . . 8

2.4 Die OperationendesEvolutionären Algorithmus. . . 9

2.5 Die Pop-Optimierung. . . 11

2.6 LokaleVerbesserung . . . 11

2.7 Der Trieals Datenstruktur für dasLösungsarhiv . . . 12

2.8 Kodierung desGhosh-Tries . . . 13

2.9 Kodierung desPop-Tries . . . 13

2.10 Die OperationendesTries . . . 16

2.11 Die Operationenfür diePrüfer-Darstellung . . . 24

2.12 Kombinierung derbeiden Sihtweisen . . . 26

2.13 Implementierung . . . 28

3 Tests und Ergebnisse 29 3.1 Methodik . . . 29

3.2 Konvertierung von untenund randomisierte Konvertierung . . . 30

3.3 Zusammenspiel von Pop- undGhosh-Trie . . . 31

(6)

3.5 Andere Optionen . . . 31

3.6 Die verwendeten Kongurationen . . . 35

3.7 Ergebnisse für die vershiedenen Varianten mit xer Anzahlvon Genera- tionen . . . 35

3.8 Ergebnisse für dievershiedenen Variantenmit xer Laufzeit . . . 38

3.9 Gelöshte Knoten im Trie . . . 39

3.10 Anzahl derKonvertierungen imPredeessor-Trie . . . 39

3.11 Anzahl derKonvertierungen fürden Prüfer-Trie . . . 41

3.12 Test mit längererLaufzeit . . . 42

4 Zusammenfassung 46

Literaturverzeihnis 47

(7)

1

Einführung

1.1 Das Minimum Spanning Tree-Problem

DasMinimumSpanningTree-Problem(MST)isteinbekanntesProbleminderGraphen-

theorie.Esistwiefolgtdeniert[Lei06 ℄:Gegebenseieingewihteter,vollständigerGraph

G = (V, E, c)

mitKnotenmenge

V

,Kantenmenge

E

andderKostenfunktion

c : E → R +

.

Dann ist ein Minimum Spanning Tree ein Subgraph von

G

, also ein Baum, der alle

Knoten des Graphen beinhaltet und dessen Kosten minimal sind:

S = (V, T ), C(T ) = P

c(u,v)∈T c(u, v)

Dabei sind die Kosten als Summe der Gewihte der Kanten deniert.

DasMSTistinpolynomiellerZeitlösbar,zumBeispielmitdemAlgorithmusvonKruskal

[OW02 ℄.

1.2 Das Generalized Minimum Spanning Tree-Problem

AlsVerallgemeinerungdesMSTwurdedasGeneralizedMinimumSpanningTree-Problem

(GMST) deniert. Dabei werden die Knoten V aus dem MST in Cluster partitioniert.

Für eine Lösung des GMST wird aus jedem Cluster ein konkreter Knoten zu einem

Spannbaumverbunden.SomitkanndasGMSTwiefolgtdeniertwerden[Lei06 ℄:Gegeben

seieingewihteter,vollständigerGraph

G = (V, E, c)

.DieserGraphistdanninnCluster

unterteilt, die jeweilsdisjunkte Teilmengen der Knoten desGraphenssind:

V 0 , V 1 , ..., V n

mit

V i ⊂ V

, sodass

V i ∩ V j = ∅ ∀i, j, i 6= j

. Eine gültige Lösung ist dann ein Subgraph

von

G

,

S = (P, T )

, mit

P = {p 1 , p 2 , ..., p n } ⊂ V p i ∈ V i ∀i = 1, ..., r

, sodass aus je-

demCluster

V

genaueinKnotenverbundenwird.DerSpannbaumbestehtdannausder

Kantenmenge

T ⊆ P × P ⊂ E

Die Bewertung bzw. die Kosten ergibt sih dann aus

der Summe der Werte derKanten, also

C(T ) = P

c(u,v)∈T c(u, v)

Die optimale Lösung

für dieses Problem ist dann ein solher Spannbaum

S = (P, T )

, dessen Kosten

C(T )

minimalsind. EineIllustration desMSTund desGMST istinAbbildung 1.1zu nden.

(8)

1.3 Bisherige Arbeit

Das GMST-Problem wurde 1995 von Myung, Lee, and Tha [MLT95℄ deniert. Dabei

haben sie auh gezeigt, dass es NP-shwierig ist und eine mathematishe Denition

angegeben. Pop [Pop05℄hat einerseits Spezialfälle angegeben,unter denen dasProblem

polynomielllösbarist,undandererseitseinigeBeispieleangeführt,fürdiedasProblemin

derPraxisverwendetwerdenkann.AlsBeispielführterdieVerbindungvonlokalenNetz-

werkenan,beidenen eineStation alsHubverwendet wird.Auÿerdemhat erdesGMST

inzweiTeilproblemeaufgeteilt.ErhatdenAnsatzgewählt, dieglobalenKantenfestzule-

gen.AuÿerdemhaterseinenAnsatzdannineinemAlgorithmusmitSimulatedAnnealing

verwendet.Ghosh [Gho03℄ hatdasVerfahrenentwikelt,für jedenCluster einenKnoten

festzulegen,derdanndieKnotenmengefürdenSpannbaumbildet.NahdieserBelegung

kann für beide Verfahren die optimale Lösung für das verbleibende Problem eindeutig

bestimmt werden. Daherkönnen Lösungen fürdasProblemmitderAngabe derKnoten

bzw.derglobalenKantenkodiert werden.DadieseArbeitaufdiesen Verfahren aufbaut,

werden sie im Abshnitt 2.1 genauer dargestellt. Hu, Leitner und Raidl [HLR08 ℄haben

denAnsatzderVariableNeighborhoodSearhmitNahbarshaften,dieaufdiesenbeiden

Darstellungen aufbauen,verwendet undsind zugutenResultaten gekommen.

Wolf[Wol09 ℄ hatinseinerArbeiteinenEAzurLösungdesGMST verwendet,dener

umeinLösungsarhiverweiterthat.DafürhaterdenTriealsgeeigneteDatenstrukturfür

dasSpeihernundGenerierenvonneuenLösungeneingesetzt.NahdemdieLösungenin

derKodierung nah denKnotengespeihertwerden, wurdeauhder Triemit diesenLö-

sungenbefüllt.Grundsätzlih ist ersoauhzu gutenErgebnissen gekommen, allerdings

wurde in demAlgorithmus auh ein Verfahren zurOptimierung nah dem Pop-Shema

inkludiert. Gemäÿseinen Tests ergänzen sih derTrie unddiese Optimierung niht gut,

sondern der Trie erzielt mit dieser Optimierung teilweise sogar shlehtere Lösungen.

Daher shlug er als möglihe weiterführende Arbeit vor, auh ein Arhiv auh für Lö-

sungen, dienah den globalen Kantenkodiert sind, zu entwikeln, und diese dann nah

Möglihkeit zukombinieren, wasdasThemadervorliegenden Arbeit ist.

(9)

Daes für viele shwierigeProbleme derInformatik niht möglih ist, einen exakten Al-

gorithmus zunden,derdasProblemfürgröÿereInstanzeninakzeptablerZeitlöst,sind

vershiedenste heuristishe Verfahren vorgeshlagen worden, um Lösungen von akzept-

ablerGütezunden.Ein grundlegendesVerfahrenistdasderlokalenSuhe,d.h.eswird

versuht, für ein Problem bzw. eine Lösung eine Nahbarshaft zu denieren, diese zu

durhsuhen und die Lösung mit dem besten Wert zu übernehmen. Eine solhe Nah-

barshaftbestehtausausLösungen,diemiteinerdenierten(geringfügigen)Änderungan

derUrsprungslösungzuerreihensind.DiesemüssenandasjeweiligeOptimierungsprob-

lem angepasst werden. Da dieses Verfahren zu einem lokalen Optimum führt, aber in

der Regel niht zu einem globalen, sind diverse Metaheuristiken erdaht wurden, mit

denen diese überwunden werden sollen. Eine Metaheuristik ist ein allgemeines, vom

konkreten Optimierungsproblem unabhängiges Verfahren, das deniert, welhe Vorge-

hensweise grundsätzlih verwendet wird. Es werden abstrakte Operatoren deniert, die

dannandaskonkreteProblemangepasstwerdenmüssen.BeispieledafürsindSimulated

Annealing, dieTabusuhe odereben derindervorliegenden Arbeit verwendeten Evolu-

tionäreAlgorithmus.Oftmalsistesnihtmöglih,Gütegarantienabzugeben,wiegutdie

Lösungapproximiertwerdenkann.DennohwurdeninderPraxisguteResultateerzielt.

1.5 Evolutionäre Algorithmen

Grundsätzlih wird versuht, die natürlihe Evolution bzw. die Erkenntnisse der Evo-

lutionstheorie mit ihren Mehanismen zu modellieren. Es werden jedoh meist nur die

grundlegenden Konzepte wie das Vorhandensein einer Population von Lösungen sowie

Selektion,Mutation und Rekombination verwendet.

IneinemEvolutionärenAlgorithmus(EA)bzw.einemGenetishenAlgorithmus[SP94 ℄

gibtes,wiebeieinigenanderenheuristishenOptimierungsverfahren,einePopulationvon

Lösungen für das Problem. Die kodierte Lösung wird als Genotyp bezeihnet, einzelne

Teile als Gene. Eine solhe Lösung kann etwa als Bitstring kodiert werden. Da die Be-

wertung des Genotyps oft niht direkt aus der Darstellung berehnet werden kann, ist

eine Dekodierung erforderlih. Diese dekodierte Lösung wird dann als Phänotyp beze-

ihnet. Dann wird eine Fitnessfunktion deniert, die den Lösungen einen Wert zuord-

net. Bei einem Minimierungsproblem wie dem GMST-Problem haben somit Individuen

mit einem kleineren Funktionswert einehöhere Fitness. Mittels der Mutation wirdana-

log zum biologishen Vorbild neues genetishes Material erzeugt. Dieses soll der Über-

windung von lokalen Optima dienen. Bei der Mutation wird also eine Lösung zufällig

verändert.Die MutationwirdinderRegel nur miteiner gewissen(kleinen)Wahrshein-

lihkeit aufgerufen, da derAlgorithmus andernfalls zu einer Zufallssuhe werdenwürde.

Die Rekombination dient dazu, aus zwei Elternlösungen Kindslösungen zu generieren,

diemöglihstvielgenetishesMaterial übernehmen sollen. Es wirdsomit versuht, zwei

Lösungen zueiner neuen zu vershmelzen. DieSelektion dient dazu,ausderPopulation

Lösungen auszuwählen, die überleben, indem sie in die nähste Generation des Algo-

(10)

Lösungen mit einem besseren Wert haben eine höhere Chane, selektiert zu werden.

Da die prinzipielle Funktionsweise des evolutionären Algorithmus sehr allgemein sind,

müssen die Operatoren an das spezishe Problem angepasst werden, um gute Ergeb-

nissezuliefern.Dabeiistesoftshwierig,geeigneteRekombinationsoperatoren zunden,

dieeinerseits beideElternlösungenberüksihtigen undandererseitsdieQualität derLö-

sungenbewahrenkönnen.IneingeshränktemSinngiltdasauhfürMutationoperatoren.

Ineinem sogenanntenSteady-State-EA,wie erindieserArbeitverwendetwird,wird

proGenerationnureineLösungdurheineneueersetzt.Dagegenwirdineinemsogenan-

nten generationellen EA in jeder Generation die Ausgangspopulation ersetzt, was eher

dembiologishem Vorbild entspriht.

1.6 Lösungsarhiv

EinLösungsarhivwirddazuverwendet,Lösungen,dievoneinemheuristishenAlgorith-

musgeneriertwerden,zuspeihern,umderenBewertungnihtmehralseinmalberehnen

zumüssen.DadessenBerehnung ausdemGenotypen oftrehtaufwendigist,kannsih

derzusätzliheAufwandfür dasSpeihernund Suhen derLösungenrentieren. Einwei-

teres Ziel,das auh im Rahmen dieser Arbeit verfolgt wirdist, die Lösungen niht nur

zu speihern, sondern auh durh dasModiziereneines Duplikatseine neue Lösung zu

bekommen,dienohnihtuntersuhtwurde.DiesesVerfahrenwurdebereitsvonZaubzer

[Zau08 ℄, ’ramko [Sra09 ℄ und Wolf [Wol09℄für vershiedene Optimierungsprobleme ver-

wendet. Grundsätzlih sind dafür vershiedene Datenstrukturen, wie eine Hashtabelle,

Bäume oder Tries denkbar. Zaubzer [Zau08 ℄ und ’ramko haben diese Datenstrukturen

analysiert und haben den Trie für die am besten geeignete befunden. Eine Hashtabelle

kann zwar Lösungen speihern und es kann in

O(l)

,(wobei

l

die Länge des Stringsist)

festgestellt werden, ob eine Lösung bereits enthalten ist, jedoh ist es niht möglih,

shnell eine Ersatzlösung zu nden, da dies im shlehtesten Fall

2 l

Shritte brauhen

kann.Ein binärer Baum könnte dierelevantenOperationenzwarin

O(l ∗ log(n))

(wobei

n

die Anzahl der Knoten im Baum ist) durhführen, jedoh muss jede Lösung extrain einem eigenen Knoten gespeihert werden, was einen hohen Speiherverbrauh verur-

saht. Daher ist es eine bessere Lösung, einen Trie zu verwenden, der die Operationen

in

O(l)

durhführen kann. Da diese Analyse für binäre Tries durhgeführt wurde, und wie inder Arbeitvon Wolf[Wol09 ℄ indervorliegenden Arbeitein anders strukturierter

Trie verwendet wird, dessen Speiherverbrauh deutlih höher ist, muss dies gesondert

betrahtet werden. Inwieweit dies ein Problem darstellt, wird in der Beshreibung des

Tries und den Tests analysiert.

1.7 Tries

Ein Trie ist eine Datenstruktur,in derWörter gespeihert und gesuht werden können.

SomitstellensieeineLösungfürdasWörterbuhproblemdar.FürdasvorliegendeProb-

lem ist es jedoh niht erforderlih, Wörter wieder zu entfernen, da das Lösungsarhiv

(11)

diese Funktionalität niht benötigt. Im Vergleih etwa zu einem binären Baum werden

die Lösungen im Trie niht in den Knoten gespeihert, sondern in den Kanten. Dabei

wirdjederKanteeinBuhstabezugeordnet,währenddieKnotengrundsätzlihkeineLö-

sungenspeihern.DieLösungwirdKonkatenationderjeweiligenBuhstabenderKanten

auf dem Weg von der Wurzel zur Lösung berehnet. Es ist allerdings erforderlih, das

Ende derZeihenfolgen inden Knoten zumarkieren.

Im Indexed Trie können grundsätzlih beliebig lange Wörter übereinem gegebenen

Alphabet

A

deniert werden. Für jeden Knoten in dem Trie gilt, dass sie denselben

Präx teilen. Ein Knoten enthält die Information, ob bzw. welhe Wörter mit welhem

Buhstaben an diesem Knoten enden, d.h.

|A|

Boolshe Variablen. Dieser ist in Abbil-

dung 1.2 als end bezeihnet, konkrete Wörter sind mit E markiert. Auÿerdem gibt es

die Referenzen auf potenziell

|A|

weitere Knoten, wobei der Knoten dem Präx einen

weiterenBuhstaben hinzufügt.InderAbbildung wirddiesesalsnext bezeihnet,wobei

Buhstaben,diezu weiterenKnoten führenmit X markiertsind.

(12)

2

Ablauf des Algorithmus

2.1 Zwei Lösungskodierungen für das GMST-Problem

Im Zusammenhang mit demGMST-Problem und dervorliegenden Arbeit sinddie zwei

Vorgehensweisen von grundlegender Bedeutung.Sie gehenauf dieAutoren Pop [Pop02℄

undGhosh [Gho03 ℄ zurük, diediese verwendethaben.

Die Lösungskodierung nah Ghosh

Ghosh hat die Vorgangsweise deniert, die Knoten in den Cluster festzulegen. Für die

Lösung

S

,denSubgraphenvon

G

,

S = (P, T )

werdenalsodieKnoten

P = {p 1 , p 2 , ..., p n }

festgelegt. Nah diesem Shritt ist die Lösung für das Problem, aus diesen Knoten die

optimaleLösungzunden,alsodieKantenmenge

T

zubestimmen,gleihdemklassishen

MST,dasleihtgelöstwerdenkann.ImKontextdesEAwirdsomitderGenotypdeniert,

d.h. dieLösungen werden auf diese Weise odiert.Dieskann dann etwa ineinem Array

erfolgen,dasfür jeden Cluster denauswählten Knoten speihert. Nahdemdieoptimale

Lösung für diese Knotenbelegung einfah berehnet werden kann, reiht dies für die

eindeutigeBeshreibungderLösungaus.DieserAnsatzwirdinAbbildung2.1illustriert.

Abbildung 2.1: DerAnsatz nah Pop. Mittels dergegebenen Knoten kann die optimale

AuswahlderKantenberehnet werden.

(13)

optimale AuswahlderKnoten berehnetwerden.

Die Lösungskodierung nah Pop

ImGegensatzdazuhatPopdieumgekehrteVorgehensweisedeniert,nämlihdieKanten

zwishen denClustern festzulegen,undnahdieserFestlegung dieoptimaleKnotenbele-

gung innerhalb der Cluster zu berehnen. Genauer ausgedrükt, wird ein sogenannter

globaler Graph deniert [Lei06 ℄, dessen Knoten die Cluster des ursprünglihen Prob-

lems sind:

G g = (V g , E g )

und

V g = {V 1 , V 2 , ..., V n }

. Die Kantenmenge entspriht den VerbindungenzwishendenKnoten:

E g = V g ×V g

DieseKantenwerdenauhalsglobale

Kantenbezeihnet.Der Graphist vollständig, d.h.esgibt zwishen jeweilszweiKnoten

immer eine Kante. Auf diesem globalen Graphen wird dann der globale Spannbaum

deniert:

S g = (V g , T g )

mit

T g ⊆ E g

.DieserSpannbaumrepräsentiertalleLösungenfür dasursprünglihe GMST-Problem,fürdiegilt,dasssiefürjedeKante

(V a , V b ) ∈ T g

eine

Kante

(u, v) ∈ E

und

u ∈ V a ∧ v ∈ V b ∧ a 6= b

.Wenn die globalenKanten festgelegt ist,

istdieoptimaleKnotenbelegung desursprünglihenGraphen

P

für dieseneindeutigund

kannmittelsdynamisherProgrammierungezient berehnetwerden.InderTerminolo-

gie des EA wird somit der Phänotyp berehnet. Analog zur ersten Darstellung können

LösungenmittelsdiesesglobalenSpannbaums

T g

kodiertwerden,dadieoptimaleLösung

bereits eindeutigberehenbar ist.Diese Kodierung wirdinAbbildung 2.2 illustriert.

Zur einfaheren Benennung wirddas Verfahren,die Knoten in den Cluster festzule-

gen bzw. die dazugehörige Codierung in weiterer Folge Ghosh-Verfahren bzw. Ghosh-

Kodierung oder Ghosh-Darstellung genannt, das Verfahren, die Kanten zwishen den

Clusternfestzulegen,hingegenPop-Verfahrenbzw.Pop-KodierungoderPop-Darstellung.

DasLösungsarhiv wirddannebenfallsGhosh-Arhiv bzw. Pop-Arhiv genannt.

2.2 Aufbau des EAs

Es wird ein steady-state-EA verwendet, der um die Funktionalität des Lösungsarhivs

ergänztwird.DessengrundsätzliherAblaufistinAlgorithmus1zunden.DieAufgabe

dervorliegendenArbeitistes,einLösungsarhivaufBasisderPop-Darstellungzuimple-

mentieren. Darüberhinaus wurde dasaufderGhosh-Darstellungbasierende Arhiv von

Wolf[Wol09 ℄übernommen, sodassderAlgorithmus sowohlnurmitdemPop-Arhiv,als

auh mit beiden laufen kann.Er hat auh eine Variantemit mehreren Tries implemen-

tiert. IndieserArbeit wirdaberausshlieÿlih dieVariante miteinem Trieverwendet.

(14)

1: Generierezufällige Population

pop

und füge sieinArhiv ein

2: whileSolangeAbbruhbedingung niht erfüllt do

3:

elternteil1

<- selektion(

pop

)

4:

elternteil2

<- selektion(

pop

)

5:

sol neu

<-rekombination(

elternteil1

,

elternteil2

)

6: mutation(

sol neu

)

7: lokaleVerbesserung(

sol neu

)

8:

9: if

sol neu

inArhiv enthalten then

10: wandle

sol neu

zu neuerLösungum

11: end if

12: Füge

sol neu

inArhiv ein

13: Ersetzeeine Lösungin

pop

durh

sol neu

14: endwhile

2.3 Repräsentierung von Lösungen

GrundsätzliharbeitetderAlgorithmus aufBasis der Ghosh-Kodierung,d.h. dieLösun-

genwerdenindieserKodierunggespeihert.DieLösungwird,wiebeshrieben,durhdie

Knotenmenge

P = {p 1 , p 2 , ..., p n }

deniert. Daes keineungültigen Lösungen gibt, kann

dieseMengeeinfahmiteinemArraybzw.Vektorkodiertwerden.DieOperatorenaufBa-

sisderGhosh-DarstellungbasierensomitaufdieserKodierung.DerzweiteAnsatzbasiert

aufderPop-Darstellung:Eswerdensomitdieglobalen Kanten

T g

zwishendenClustern

kodiert. Hierfür wird die sogenannte Predeessor-Darstellung verwendet. Konkret wird

dafürzunähsteinWurzellusterfestgelegt.DaessihumeinenSpannbaumhandelt,gibt

esfür jeden Cluster genau einenWeg zumWurzelknoten. Der Vorgänger eines Clusters

istdann jener,mit demeraufdiesemWegdirektverbundenist.DieseLösungsrepräsen-

tierungkannmittelseinesVektorserfolgen,derVorgängerdes

n

-tenClusterswirdindem

Vektor auf Position

n

gespeihert. Dies wird in Abbildung 2.3 illustriert. Ein Nahteil dieser Kodierung ist, dass niht jeder möglihe Kodierung einen gültigen Spannbaum

beshreibt.Daher istesbeiden Funktionen, dieeineLösungauf BasisdieserCodierung

veränderen, notwendig zu beahten, dass sie nur Spannbäume generieren. Da der EA

interndieGhosh-Darstellungverwendet, istesnotwendig, vor derVerwendung derPop-

Operatorenbzw. des entsprehenden Arhivsdie Lösungindie Predeessor-Darstellung

zutransformieren.DanahmussdieLösungwiederzurüktransformiertwerden. Eswird

auÿerdem die sogenannte Prüfer-Codierung verwendet, die aberniht für den EA oder

die Optimierung selber verwendet wird, sondern ausshlieÿlih für die Speiherung der

LösungenimTrie.AuhhiermüssendieLösungenvonderPredeessor-Darstellungindie

Prüfer-Darstellung transformiert werden. Diese Algorithmen werden im Abshnitt 2.10

dargestellt.

(15)

Abbildung 2.3: Die Predeessor-Kodierung.

V 1

ist derWurzelluster

2.4 Die Operationen des Evolutionären Algorithmus

Damit beide Darstellungen in allen Bereihen des Algorithmus verwendet werden, wer-

den für beide Darstellungen - die Repräsentation der Knoten der Cluster als auh über

globale Kanten - eigene Rekombinations- und Mutationsoperatoren verwendet. Grund-

sätzlih wird bei jedem Aufruf zufällig eine der beiden Varianten ausgewählt. Es kann

aber über einen Parameter gesteuert werden, ob welhe Operatoren verwendet werden

sollen - entweder nur die Ghosh-Operatoren, nur die Pop-Operatoren oder bei jedem

Aufrufzufälligeine derVarianten.

Für dieSelektion wirdTournament Seletionverwendet, d.h. eswerdenzufällig eine

bestimmteAnzahlvonLösungenausgewählt,unddiebesteausdiesenwirddanntatsäh-

lih ausgewählt. In dieser Arbeit wird die Standardeinstellung von EALIB (siehe 2.13)

verwendet: Es werdenzweiLösungen ausgewählt, unddie besseredavon selektiert.

Die Operationen für die Ghosh-Darstellung

DaesbeidieserDarstellung keineAbhängigkeiten gibt, können einfaheOperatoren für

Arrays verwendetwerden.

DieRekombinationerfolgtsomitmitUniformCrossover, d.h.dassfür jedesFelddesAr-

rayszufällig derWerteiner derbeiden Elternlösungenübernommenwird.Gegeben sind

also zwei Lösungen in der Ghosh-Darstellung:

P = {p 1 , p 2 , ..., p n } Q = {q 1 , q 2 , ..., q n }

.

Dann wird die neue Lösung

R

wie folgt generiert:

∀i : r i

wird zufällig, also mit jeweils

Wahrsheinlihkeit

p = 0, 5

ausderMenge

{p i , q i }

ausgewählt. Die Rekombination wird in2.4illustriert.

Bei der Mutation wird hingegen ein zufällig gewähltes Feld des Arrays verändert.

In der Lösung

P = {p 1 , p 2 , ..., p n }

wird somit ein Element zufällig, also jeweils mit

(16)

Wahrsheinlihkeit

p = n 1 p i

ausgewählt.DieserKnotenistElementeinesClusters

p i ∈ V i

.

Dieser Knoten wird dann zufällig (

p = |V 1

i |

) durh ein anderes Element des Clusters

ersetzt, d.h. ausderMenge

V i = V i \{p i }

.

Die Operationen für die Predeessor-Darstellung

DadieseCodierungdieLösungenalsSpannbäumedarstellt,unddieseinderPredeessor-

Darstellung vorliegen, muss darauf geahtet werden, dass keine ungültigen Lösungen

erzeugt werden. Die Operatoren wurden aus der Arbeit von Raidl und Drexel [RD00℄

übernommen, indersiedieOperatorenfüreinähnlihesProblem,dasCapaitatedMin-

imumSpanningTreeProblem,denieren.DieseOperatorenkönnenanalogfürdasGMST

verwendet werden, es muss nur die zusätzlihe Überprüfung, ob die Kapazitäten niht

übershrittenwerden, entfernt werden.

Die Rekombination wird wie folgt durhgeführt: Ausgehend von den beiden Eltern-

lösungen,werdendieKanten,diebeibeidenidentishist,alsobeidenen derPredeessor

für den jeweiligen Cluster derselbe ist, auf jeden Fall indie Kindslösung übernommen.

Sindsienihtidentish,sowirdzufälligderWerteinerder Elternlösungenübernommen,

wenn sih dabei kein Zyklus ergibt. Die Einhaltung dieser Bedingung wird mit einer

Union-Find-Datenstruktur überprüft. Würde ein Zyklus entstehen, so wird die andere

(17)

Lösungverwendet. Istauhdiesnihtmöglih,sowirdderCluster ineineListevonnoh

niht bearbeiteten Clustern gespeihert. Die Cluster, die übrig geblieben sind, werden

dann einezufällige Stelleim Baumgehängt.

Die Mutation wird hingegen wie folgt ausgeführt: Es wird zufällig ein Cluster im

Spannbaum ausgewählt, dessen Vorgänger verändert werden soll. Kandidaten für den

neuen Vorgängersinddann alle Cluster,dessen direkteroderindirekterVorgänger niht

derClusterist,dessenVorgängerverändertwerdensoll,dadadurheinZyklusentstehen

würde.Die Mutation wirdinAbbildung 2.5illustriert.

2.5 Die Pop-Optimierung

Die Pop-Optimierung [Wol09 ℄ besteht darin, für eine gegebene Lösung in der Ghosh-

DarstellungdieKantenzwishen denClustern zuverwenden undfür diese Kantendann

mittelsdynamisher Programmierung dieoptimalen Knoten zuberehnen. Bei derVer-

wendung eines Pop-Tries wird diese auh implizit verwendet, da die Lösungen ohnehin

zwishen der Ghosh-Darstellung und der Predeessor-Kodierung umgewandelt werden

müssen. Es ist also niht erforderlih, diese dann explizit aufzurufen. Die Optimierung

ist alsonur danneine sinnvolle Option, wenn keinPop-Arhiv verwendet wird.

2.6 Lokale Verbesserung

AuhbeiderlokalenVerbesserungwerdenwiedervershiedeneNahbarshaftsstrukturen

benutzt,dieaufdenbeidenDarstellungsartenbasieren.DieDenitionwurdeausderAr-

beit von Leitner übernommen [Lei06 ℄. Eine Nahbarshaftsstruktur ist eine Funktion,

diejederLösungeineMengevonLösungenzuweist,diedieNahbarshaftbilden.Formal

also eine Funktion

N : X → 2 X

, der jeder Lösung

x ∈ X

eine Menge von Nahbarn

N (X) ⊆ X

zuweist.AnalogzurGhosh-Darstellungwird eineGhosh-Nahbarshaft bzw.

Node Exhange Neighborhood (NEN) [Gho03 ℄ verwendet, die darin besteht, in einem

Cluster einen Knoten verändern. Für eine Lösung

P = {p 1 , p 2 , ..., p n }

, wobei

p i

der

Knoten ist,derausCluster

V i

verbundenwirddieNahbarshaft wie folgtdeniert: Sie besteht aus allen Vektoren, die dadurh erreiht werden können, dass in einem Cluster

V i

genau ein Knoten

p i

durh einen Knoten ausdemselben Cluster ersetzt wird. Auÿer-

demwirdnoheinezweite,gröÿereGhosh-Nahbarshaft,diedarinbesteht,jeweilseinen

(18)

durhsuht, d.h. eswirdein Zeitlimit verwendet, und diebisdahin beste Lösung, diein

dieserNahbarshaftgefundenwerdenkonnte,übernommen.AnalogzurPop-Darstellung

wird eine ursprünglih von Pop denierte Nahbarshaft [Pop02℄ verwendet, die darin

besteht, den globalen Graphen

T g

zu verändern. Zu dieser Nahbarshaft gehören alle gültigenSpannbäume, diesih ingenau einer Kante von der ursprünglihen Lösungun-

tersheiden. Umden AufwandineinemvertretbarenAusmaÿ zuhalten,wirddieBewer-

tung für diese Lösungen inkrementell [Lei06 ℄ berehnet. Die beiden Optimierungsarten

werden grundsätzlihnaheinander aufgerufen, bis keineVerbesserungmehr erzielt wer-

denkann.AlternativdazukannauhnurentwederdieVerbesserungbasierendaufGhosh

bzw. Pop verwendetwerden, wasübereinen Parameter eingestellt werden kann.

2.7 Der Trie als Datenstruktur für das Lösungsarhiv

Indervorliegenden ArbeitwerdenimmerInteger-VektorenimTriegespeihert.Dadiese

immer dieselbe Länge haben, können Lösungen grundsätzlih nur in den Blättern des

Tries markiert werden. Wenn eine Lösungkodierung aus

n

Integern besteht, so haben

dieTrieknotenindenersten

n

-1Ebenen lediglihReferenzen aufweitereTrieknoten,die

Lösungenwerdendanninder

n

-tenEbene durhmitderMarkierungVollständig gespei- hert.Daheristesnihtnötig,ineinemKnotenfüreinengegebenBuhstabensowohleine

LösungalsoauheineReferenzaufweitereKnotenzuspeihern.AufgrundderFunktion,

vollständig besuhte Knoten zu löshen und sie durh die Markierung Vollständig zu

ersetzen, können dieWörter aberinAusnahmefällen dennohuntershiedlih langsein.

Dies ist aber kein Problem, da in diesem Fall keine Referenz auf einen Unterknoten

erforderlihsind,daalleLösungen,diedurhsoeinenKnotenbeshriebenwerden,bereits

besuht wurden und dies mit der Markierung Vollständig kodiert wird. Die Funktion

zum Löshen von vollständigen Knoten wird inder Darstellung der Einfügen-Funktion

beshrieben. Ein solher Trie wirdinAbbildung 2.6illustriert.

Möglihe Zustände der Referenzen

Eine Referenz, also der Nahfolger dieser Knoten, kann grundsätzlih drei Zustände

haben. Der Zustand Null bedeutet, dass noh keine Lösung mit dem entsprehenden

Vorgänger aufgenommen wurde. Der Zustand Vollständig bedeutet dagegen, dass alle

Lösungen, dievondieserReferenz ausgehenkönnen,bereitsvorgekommen sind.Der Zu-

stand Unvollständig bedeutet, dass mindestens eine Lösung aufgenommen wurde, aber

es auh noh mindestens eine noh niht besuhte Lösung gibt. Für die Predeessor-

Darstellung gibtesdarüberhinaus noh den ZustandVerboten,derungültige Lösungen

markiert. In den Illustrationen wird ein Null als leeres Feld dargestellt, Vollständig als

C,Verboten als FundUnvollständig alsX.

(19)

2.8 Kodierung des Ghosh-Tries

FürdieKodierungnahdenKnotenwirdeineinfaherInteger-Vektorverwendet,beidem

das

n

-teElementden

n

-tenCluster repräsentiert.ImTrieentspriht die

n

-teEbenedem

n

-tenCluster. Die Gröÿe der Trieknoten bzw. die Anzahl dernötigen Referenzen hängt

von der Anzahl derKnoten im entsprehenden Cluster ab. Der Trie wird inAbbildung

2.7 illustriert. Die Operationen des Tries sind im Wesentlihen analog zu demdes Pop-

Tries. Die Anzahl der Trie-Ebenen und die Anzahl der Knoten in den Trieknoten sind

zwar untershiedlih, und es sind keine Überprüfungen notwendig, ob die konvertierten

Lösungen gültig sind, dennoh sind die grundlegenden Operationen wie Einfügen und

Konvertieren analog zu denen des Pop-Tries, die im nähsten Abshnitt beshrieben

werden.

2.9 Kodierung des Pop-Tries

Die Darstellung nah globalen Kanten entspriht einem Spannbaum. Daher stellt sih

die Frage, wie der Baum im Trie kodiert werden soll. Es gibt hierfür eine Vielzahl von

Darstellungsmöglihkeiten [PK94,RJ03℄.DerEA verwendetfür dieFunktionen, dieauf

derPop-Darstellung basieren, diePredeessor-Darstellung, daherbietetessih an,diese

auh im Trie zu verwenden. Ein Problem dieserDarstellung ist jedoh,dass niht jeder

Graph,derhiermitdargestellt werdenkann,auhwirklih einBaumist.AlsAlternative

dazu wird diePrüferkodierung verwendet. Diese hat derVorteil, dass jeder darstellbare

Code ein gültiger Baum ist und somit klassishe Rekombination- und Mutationsopera-

toren auf Arrays ausgeführt werden können. Als Nahteil wird jedoh angeführt, dass

derenLokalität geringist [PK94 ℄, d.h. einegeringe Änderung, wie z.B.die Veränderung

nur einer Stelle der Lösung kann sie stark verändern. Dasih diese Untersuhungen je-

doh auf klassishe EA-Operatoren wie Mutation und Rekombination beziehen, niht

(20)

Pfeilen markiert.

jedoh auf denAnwendungsfall eines Lösungsarhives, sollhier auhuntersuht werden,

inwieweit diese Kodierung geeignetist.

Der Prüfer-Code wird wie folgt berehnet: Es wird im Baum jenes Blatt gesuht,

dessenNummerdiekleinsteist.DieNummerdesKnotens,mitdemdasBlattverbunden

ist, wird dem Code hinzugefügt. Das Blatt wird gelösht und dieser Vorgang so lange

wiederholt, bis nur mehr zwei Knoten übrig sind. Der in Abbildung 2.3 dargestellte

SpannbaumhatdanndenPrüferode5331 .DerAlgorithmuszudessenGenerierungbzw.

zuderRükkonvertierungwirdweiteruntenbeshrieben.DaderEAfürdieOperationen

auf Basis der Pop-Darstellung die Predeessor-Kodierung verwendet, muss die Lösung

zuerst in die Prüfer-Kodierung umgewandelt werden, wenn der Prüfer-Trie verwendet

wird. Daallediese Codierungen wie dieGhosh-Darstellung aufInteger-Arraysbasieren,

wird immer auh ein ähnliher Trie verwendet. Sie untersheiden sih nur in der Tiefe

bzw. derGröÿe dereinzelnen Trie-Knoten.Bei Verwendung derPredeessor-Darstellung

ist der Trie bei

n

Clustern

n − 1

Ebenen tief, da der Wurzelknoten keinen Vorgänger besitzt. Ein Knoten des Tries hat dann höhstens

n − 1

Referenzen auf Nahfolger, da

derKnoten niht Vorgänger seinerselbst seinkann.

InAbbildung2.8isteinBeispielmitsehsClusternzusehen.DerTriehatfünfEbenen

und jeder Knoten hat fünf Referenzen. Die Blätter enthalten Lösungen, die anderen

Knoten Referenzen zuden Ebenen tieferimTrie.

Der Prüfer-Trie ist bei

n

Clustern

n − 2

Ebenen tief,da auh derPrüfer-Code

n − 2

Stellenhat.Ein Knoten hat dann

n

Referenzen. InAbbildung 2.9istdieselbeLösungin derPrüfer-Darstellung zu sehen. DieInstanz hat sehs Cluster, derTrie vierEbenen zu

jeweils sehs Knoten.

Der Triehat somit

O(n)

Ebenen mitKnoten, diebiszu jeweils

O(n)

Referenzen auf

weitere Knoten haben. Die

n

-te Ebene könnte dann theoretish aus

O(n n )

Referenzen

bestehen,wasaberfürdiePraxiskeineBedeutunghat,dadieAnzahlderLösungendurh

(21)

Abbildung 2.9: EineLösung inPrüfer-Darstellung unddessen Darstellung imTrie

die Laufzeit des EA begrenzt ist. Der zusätzlihe Speiherverbrauh für das Einfügen

einer einzelnen neuen Lösung kann im shlehtesten Fall

n 2

sein, da es

O(n)

Ebenen

und

O(n)

Referenzenpro Ebenegibt. BeidieserDatenstruktur entstehen somitinjedem neuen Knoten

O(n)

Null-Zeiger.Bei derEinfügungder ersten Elementeentstehen somit

O(n 2 )

Null-Zeiger, waseinem reht hohenSpeiherverbrauhentspriht.Dadannjedoh neue Lösungen, die sih in nur in den unteren Stellen von einer bereits vorhandenen

Lösung untersheiden, mit wenig Speiherverbrauh (im besten Fall muss nur ein Null-

ZeigeraufVollständig geändertwerden, umeineneueLösungzumarkieren)hinzugefügt

werdenkönnen,istzuerwarten, dassderSpeiherverbrauhnihtexplodierenwird.Wolf

[Wol09 ℄hat inseinerArbeitfestgestellt,dassdertheoretishe Speiherverbrauhfür den

Ghosh-Trie für gröÿere Instanzen zwar Hunderte von Terabyte betragen könnte, dies

jedoh durh die Laufzeit des Algorithmus begrenzt wird. In der Praxis erreihte er

Werte von einigen Dutzend MB. Da sein Trie jedoh

O(n)

Ebenen und eine Ebene nur

(22)

O(n/m)

(wobei

m

diedurhshnittliheZahlderKnotenproClusterist)Knotenhat,die

Knoten des Trie inder Spannbaum-Darstellung jedoh

O(n)

Referenzen haben, ist ein

Speiherverbrauh vonmehrerenHundertMBdurhausmöglih.DerSpeiherverbrauh

wirddann imZuge derTests beobahtet.

2.10 Die Operationen des Tries

EsgibtgrundsätzlihnurzweiOperationen,EinfügenundKonvertieren.DieFunktionder

Einfügen-Operationbestehtdarin,dieneueLösungeinzufügen,wenndiesenohnihtim

Trieexistiert.DieKonvertierungs-Funktionerstelltausgehendvoneinerbereitsbesuhten

Lösung eine neue, garantiert unbekannte. Eine eigene Funktion für das Suhen einer

Lösungbzw.Prüfung,obeineLösungimTrie bereitsvorhandenist,istnihtnotwendig,

da diesimplizit überdieFunktionzumEinfügengeshieht. Beiden Trie-Funktionen für

diePredeessor-Darstellungmussberüksihtigtwerden,dassesimTrienihterforderlih

ist,füreinenKnoten,derdiemöglihenVorgängerspeihert,eineReferenzaufsihselbst

zu enthalten. Dieser Umstand maht den Programmode zwar etwas unübersihtliher,

ist aberfür diegrundsätzlihe Idee niht wesentlih.

Die Einfügen-Funktion für die Predeessor-Codierung

Das Einfügeneiner Lösung inden Trie mit Predeessor-Kodierung wirdinAlgorithmus

2dargestellt.Zunähstwirdüberprüft,obdieLösungbereitsimTrieenthalten ist.Dazu

wirdinjedemTrieknotendemZeigergefolgt,derderkodiertenLösungimTrieentspriht.

StöÿtdieSuhedabeiaufeinenNullzeiger,istdieLösungnihtenthaltenundsiewirdneu

eingefügt,wobeigegebenenfallsfehlendeTrieknotenebenfallseingefügtwerden.Stöÿtdie

Suhe dagegenaufeinen Vollständig-Pointer, soist dieLösungbereitsvorhanden.

In derPredeessor-Kodierung wirdfür jeden Cluster sein Vorgänger gespeihert. Da

der Graph, der die Verbindungen zwishen den einzelnen Clustern darstellt, ein Baum

ist und somit keine Zyklen enthalten darf, ist dies zu berüksihtigen. Es ist mit dieser

Darstellung somitmöglih, Lösungenzu kodieren,diekeine Bäume sindund dieZyklen

enthalten.DieseungültigenLösungen müssenjedohalssolhe erkannt werden bzw.gar

nihterstgeneriertwerden.EsgibtsomitprinzipiellmehrereStellen,andenen dieserfol-

genkann.EinerseitskönntenbeimEinfügeneinerneuenLösungalleungültigenLösungen

in den Knoten der Tries markiert werden, oder aber es könnte in der Konvertierungs-

Methode darauf geahtet werden, keine ungültigen Lösungen zu generieren. Da es aber

nihtmöglihist,alleungültigenLösungengleihinderEinfügen-Methodezumarkieren,

muss auh beiderKonvertierungs-Methode darauf geahtet werden, dass keine ungülti-

gen Lösungen entstehen. Nah dem Einfügen der neuen Lösung wird noh überprüft,

ob dadurh Trieknoten vollständig geworden sind, d.h. ob sie nur Knoten mit dem Zu-

standVollständig bzw.Verboten aufweisen.IstdiesderFall,sokannderKnotengelösht

werden und die auf diesen Knoten verweisende Referenz im Knoten darüber als Voll-

ständig markiertwerden. DadadurhauhderdarüberliegendeKnotenvollständigwer-

den kann,muss diese Funktionrekursiv aufgerufen werden. Der Trie kannsomit grund-

(23)

sätzlih wieder Speiherplatz freigeben, wenn zusätzlihe Lösungen eingefügt werden.

Angesihts desgroÿen Lösungsraumes ist diese Funktion jedoh wohl nur bedingt dazu

geeignet,inderPraxisSpeiherplatzeinzusparen.DerVorgangdesZusammenfasseneine

vollständigen TrieknotenswirdinAbbildung 2.10 illustriert.

Berehnung der Verboten-Felder

Die Berehnung der Verboten-Felder erfolgt rekursiv. Der Pseudoode ist in Algorith-

mus 2.10angegeben.Damit indemGraph keinZyklus entsteht,darf ein Cluster keinen

Vorgängerhaben,derwiederumdiesenalsVorgängerhat.WenndieVerboten-Feldereines

Clusters berehnet werdensollen, sind alle Cluster, die einen kleinerenIndex haben als

der gegenwärtige, Kandidaten für verbotene Cluster. Dannwird überprüft,ob esunter

dieseneinenbereitshinzugefügtenClustergibt,dessenNahfolgerdergegenwärtigeClus-

ter ist. Ist dies der Fall, so würde eine Lösung mit einem Zyklus entstehen und dieser

wird als Verboten markiert. Wird ein Verboten-Feld markiert, so wird weiter rekursiv

untersuht,obesbereitshinzugefügteCluster gibt,dessenNahfolger dernunverbotene

Cluster ist. Solhe wären ebenfallsungültige Lösungen, diemarkiert werden müssen.In

Abbildung 2.11 wird gezeigt, dass es von der Reihenfolge der Cluster abhängt, ob und

wieviele Felder als Verboten markiert werden können. Damit ein Feld in einem Cluster

als Verboten markiert werden kann, müssen dessen Vorgänger bereits vorher im Trie

gespeihert worden sein.Im linken Beispiel können keine Cluster als Verboten markiert

werden,weildieCluster,dieBlättersind,einenhöherenIndexalsihreVorgänger haben,

im rehten ist es dagegen umgekehrt. Weiterhin kann man an diesem Beispiel sehen,

dass wenn man an der linken Lösung im Trieknoten für den Cluster 2 die Lösung von

1 auf3 verändert, sih einZyklus ergeben würde, dervon dieser Funktionniht verhin-

dertwerden kann.Daher istesnötig,dassdie Prüfung beider Konvertierungs-Funktion

(24)

Eingabe:Lösung

sol : S g =< V G , T G >

Ausgabe:boolean:Einfügen erfolgreih?

1: for

(i = 1; i < sol.size(); i + +)

do

2:

numberOf P redecessors[sol[i]]

++ // Anzahl der Vorgänger für jeden Cluster,

wirdfür dieBerehnung derVerboten-Felder gebrauht

3: endfor

4: if

root

=null then

5: generiere neuen

root

undfüge diesen ein

6: endif

7: urr=root

8: for

(i = 1; i < sol.size() − 1; i + +)

do

9:

pos = sol[i]

;

10: if

curr.next[pos]

== omplete then

11: return

f alse

12: elseif

curr.next[pos]

==null then

13: if

i

==

anzahlDerT rieEbenen

then

14: // wenn dieletzteEbene erreiht wird

15:

curr.next[pos] = complete

16: else

17:

curr.next[pos]

=neuerTrieknoten

18: for

(j = 0; j < sol.size(); j + +)

do

19: hekPredeessors(

sol

,

numberOf P redecessors

,

curr.next[pos]

,

j

)

20: //fürden Trieknoten Verboten-Felder berehnen

21: end for

22: endif

23: end if

24:

curr = curr.next[pos]

25: endfor

26: überprüfe,ob einTrie-Knoten vollständiggewordenist

27: return

true

erfolgt.

Die Konvertierungs-Funktion

Die Konvertierungs-Funktion dient dazu, eine Lösung zur verändern und somit zu ein-

er neuen Lösung zu kommen. Es werden zwei vershiedene Konvertierungsfunktionen

verwendet, dierandomisierte Konvertierung unddie Konvertierung von unten.

(25)

Algorithmus3 hekPredeessors(Lösung

sol

,int[℄

numberOf P redecessors

,Trienode

n

,int

node

): Berehnung von ungültigenLösungen

1: if

numberof predecessors[node]

==0 then

2: return;

3: endif

4: if if(

sol[pred] == node ∧ pred

bereits obenim Trie hinzugefügt)then 5:

n.next[pred]

=verboten

6: for(inti= 0;i<sol.size();i++) do

7: hekPredeessors(

sol, n, numberOf P redecessors, i

);

8: end for

9: endif

Die randomisierte Konvertierung

Der Trie wirdsomit entlang der Lösungdurhsuht, währendan einer geeigneten Stelle

eine Änderung vorgenommen wird. Der Pseudoode zu dieserFunktionist inAlgorith-

mus 4 angegeben. Wie aber aufgrund der anderen Speiherstruktur der Predeessor-

Darstellung shon beim Einfügen Abhängigkeiten auftraten, die es zu behandeln galt,

soist dies auh inderKonvertierungs-Funktion erforderlih.Es ist daherniht möglih,

einfah eineLösung beliebig zu verändern, ohne zu überprüfen, ob dasErgebnis wieder

eine gültige Lösung ist. Bei der Erkennung eines Zyklus wird der Vorgänger des Clus-

ters, dessen neuer Nahfolger in den Zyklus führen würde, auf den alten Nahfolger zu

verweisen. Der Pseudoode für diese Funktion ist in Algorithmus 5 zu nden. Aller-

dingswirdsodieLösunganmehrerenStellenverändert,wassomitzuFolgehaben kann,

dass die neue Lösung wieder ein bereits im Arhiv enthaltendes Duplikat sein könnte.

Daher kann niht garantiert werden, dass es sih tatsählih um eine unbesuhte Lö-

sung handelt. Für den Fall, dass die Korrektur-Funktion ein Duplikat erstellt, wird die

Konvertierungs-Funktionerneutaufgerufen,ummitdiesemDuplikat alsAusgangspunkt

eine neue Lösung zu generieren. Gegebenfalls kann dies auh mehrmals hintereinander

(26)

Veränderung einerbereits enthaltenen

Eingabe:Lösung

sol : S g =< V G , T G >

Ausgabe:veränderte Lösung

sol

1: berehne alle Startpunkte, d.h. Trieknoten entlang der Lösung, wenn diese niht

Vollständig sind

2: trienode

curr

=einzufälliger Startpunkt;

3: while

curr

!=nulldo

4: suhe indiesemKnoten einen Null-Zeiger

5: if Null-Zeigergefundenthen

6: Lösunggefunden, Funktionkannabgebrohen werden

7: überprüfe,ob keinZyklus entstanden ist

8: else

9: if dieReferenz entlang derLösung

sol

niht vollständig istthen 10: folge derLösung

11: else

12: suhe einen beliebigen noh niht vollständigenZeiger

13: überprüfe,ob keinZyklusentstanden ist

14: endif

15: end if

16: endwhile

auftreten; dann wirddieKonvertierungs-Funktion solange aufgerufen, biseine neue Lö-

sung gefunden wird. Allerdings kann die Lösung dann dementsprehend stark im Ver-

gleihzurUrsprungslösungverändertwerden.InAbbildung2.13wirddieKorrektureines

Zyklus illustriert. Indiesem Fall,wo derCluster 4der Vorgänger des Clusters3 werden

soll, würde ein solher unzulässiger Zyklus entstehen. Um dies zu verhindern, wird der

Vorgänger von 3, der sih im Zyklus bendet, also der Cluster 5, an den Nahfolger 4

angebunden. Somit entsteht wieder eine gültige Lösung. Allerdings wurde die Lösung

somitan zwei Stellenverändert.

GrundsätzlihwerdendieKnotenentlangderLösunganalogzuWolfsLösung[Wol09 ℄

gespeihert,undeinedavonalsStartpunktzufälligausgewählt.Diesgeshiehtdarum,um

densogenanntenBiaszuverringern,alsoumdieWahrsheinlihkeit zuerhöhen,dassdie

Lösung an einem zufälligen Knoten verändert wird. Ausgehend von diesen Punkt wird

einNull-Zeigergesuht.Kanneinsolhernihtgefundenwerden, wirddieLösungweiter

nah unten verfolgt, eswird also der nähste Cluster der Lösung verwendet, wo wieder

einNull-Zeiger gesuht wird. Istesniht mehrmöglih,diese Lösungweiterzuverfolgen,

weil sie bereits vollständig ist, sowird einzufälliger Cluster, der noh niht vollständig

ist,ausgewählt. Immer,wenn dieLösungverändert wird,mussüberprüftwerden, obein

Zyklus entstanden ist, also wenn ein anderer, noh niht vollständiger Knoten verfolgt

wird, oder aber ein Null-Zeiger gefunden wurde, der die neue Lösung darstellt. Diese

Konvertierungsart wirdrandomisierte Konvertierung genannt.

(27)

rigiert ihngegebenenfalls

Eingabe:Lösung

sol : S g =< V G , T G >

,int

veraenderterCluster

,int

alterV orgaenger

Ausgabe:ggf. veränderteLösung

sol : S g =< V G , T G >

1: int

pred

;

2: while

pred

!=

wurzelcluster ∧ pred

!=

veraenderterCluster

do

3:

pred

=

sol

[

veraenderterCluster

4: endwhile

5: if

pred

==

wurzelcluster

then

6: // wenn derWurzelknoten erreiht wurde:

7: // keinZyklus,die Lösungwirdniht verändert

8: return

sol

9: else

10: // Zykluswurde entdekt

11: bestimmeCluster

c

,derimZyklus derVorgänger von

veraenderterCluster

ist

12: Vorgänger von

c

=

alterV orgaenger

13: endif

Die Konvertierung von unten

Eine Variante zu dieser Konvertierungs-Funktion besteht darin, den Startpunkt niht

zufällig, sondern so weit unten wie möglih zu wählen. Diese wird dann Konvertierung

von unten genannt. Dadurh ist es möglih, Speiherplatz zu sparen, da die Lösungen

im Durhshnitt dann längere gemeinsame Präxe aufweisen. Als Nebeneekt können

vollständigdurhsuhteTrieknoten früherentferntwerden, wasauheinwenigSpeiher-

platz einsparen kann. Allerdings werden denn bestimmte Cluster - die weiter unten im

Trie - öfterverändert als dieandere- die weiteroben.Obsihdadurh dieQualität der

gefundenenLösungen vershlehtert,wirdinden Tests untersuht werden.

Der Aufwand der beiden Konvertierungsvarianten

Der Aufwand für die randomisierte Konvertierungs-Funktion ist für den Prüfer-Trie im

shlehtesten Fallin

O(n 2 )

,wobei

n

derAnzahl derCluster entspriht. Ausgehend vom

Wurzelknotenmusshöhstens

n

-malbisindieletzteTrieebenehinuntergegangenwerden, während die Suhe nah Null-Zeigern bzw. Zeigern, die Unvollständig sind, in einem

Vektoreinen Aufwand von

O(n)

verursaht. Das entspriht einem Gesamtaufwand von

O(n 2 )

.

Bei der Konvertierung von unten könnte, wenn der Trie relativ voll ist, im shleh-

testen Fall ebenfallsein quadratisherAufwand entstehen. Allerdingskommt dasinder

Praxis kaum vor. Nahdem die Lösung möglihst weit unten verändert wird, und die

SuhesolangeentlangderLösungverfolgtwird,bisaufeinenVollständig-Zeigergestoÿen

wird, muss imeinfahen Fall der Trie

n

mal hinunterverfolgt werden, während dasFin- den des Null-Zeigers ebenfalls einen Aufwand von

O(n)

verursaht. Wenn vollständige

(28)

erfordern,eine neue Lösungzu nden.

Abbildung 2.13: DieKonvertierungs-Funktion verhindertdasAuftretenvonZyklen

Knoten aber zusammengefasst werden, so ist es auh möglih, dass Vollständig-Zeiger

niht nur in der letzten Trieebene auftreten. Wenn nun in so einem Trieknoten ein un-

vollständigerZeigergesuht werdenmuss, soverursahtdieseinenzusätzlihenAufwand

inderOrdnung

O(n)

.DieseSituationwirdinAbbildung2.12illustriert.IneinemPrüfer- Trie soll die Lösung 3166 konvertiert werden. Es sind jedoh bereits alle Lösungen mit

demPräx316 eingefügt wurden,waszurFolgehat,dassderTrieknoten aufdervierten

Ebene durh einen Vollständig-Zeiger in der dritten Ebene ersetzt wurde. Daher stöÿt

die Konvertierungs-Funktion bereits in der dritten Ebene auf einen Vollständig-Zeiger.

NahdemauhkeinNull-ZeigerindemTrieknotenvorhandenist,musseinzufälligerUn-

vollständig-Zeiger weiterverfolgtwerden. Wenn dieKonvertierungs-Funktion theoretish

bereitsindererstenEbeneaufeinenVollständig-Zeigerstoÿenwürde,undsieimZugeder

Suhe in jederEbene auf einem Vollständig-Zeiger stoÿen würde, so wäre derAufwand

für diese Funktionquadratish.

Zur Terminierung der Konvertierungs-Funktion im Predeessor-Trie

AufgrundderAuftretensvon Zyklenkannfür denPredeessor-Trieniht garantiertwer-

den kann, dass die Konvertierungs-Funktion beim ersten Aufruf eine neue, noh niht

(29)

besuhte Lösung erstellt. Die Lösung für diesen Fall besteht darin, die Funktion erneut

aufzurufen.BeidenTests(sieheAbshnitt3.10)hatdieFunktionzwar immerspätestens

nahfünf Reparatureneine unbesuhte Lösunggefunden. Dennoh stellt sih dieFrage,

ob es Fälle gibt, in keine neue Lösung gefunden werden kann, wenn die Funktion zu

einer Lösung springt, die bereits im Zuge der Konvertierungs-Funktion vorkommen ist.

Damit die Funktion zur selben Lösung springt, muss die Konvertierungs-Funktion in

einenZyklus geraten.

InAbbildung 2.14wirddieserFall illustriert.Der Vorgänger eines Clusterswirdhier

wiefolgtbeshrieben:

P red(c 1 ) = c 2

,derVorgängervon

c 1

ist

c 2

.VorderKonvertierung gilt

P red(z 1 ) = c 1

(Abb. 2.14a). Die Konvertierungs-Funktion verändert die Lösung nun so, dass gilt:

P red(z 1 ) = z 2

(Abb. 2.14b). Dannwird der alte Vorgänger wie folgt

referenziert:

P red old (z 1 ) = c 1

. Es ergibt sih ein Zyklus

z 1 , z 2 , ..., z n

. Die Reparatur-

Funktionverändert dieLösung so,dass gilt:

P red(z n ) = P red old (z 1 ) = c 1

(Abb. 2.14).

Die Funktion könnte nur dann zu der alten Lösung kommen, wenn die Konvertierungs-

Funktiondanahnaheinander

n−1

Malwiefolgtaufgerufenwird,dassbeierstenAufruf

dieLösung verändert wird, dassgilt:

P red(z n ) = z 1

;ab demzweiten AufrufdieLösung

beim

i

-ten Aufruf verändert wird, dass gilt:

P red(z n−i+1 ) = z n−1

. Es wird also immer

der Vorgänger von

c 1

verändert. Dadurh entsteht immer wieder ein Zyklus, was zur

Folge hat,dassdieReparatur-Funktion dieLösung

n − 1

Malverändert, wobei siebeim

i

-tenAufrufdieLösungrepariert,dassgilt:

P red(z n−i ) = c 1

(Abb.2.14d-f).Somitwürde

dieFunktionnahinsgesamt

n

Konvertierungen zuderursprünglihen Lösungkommen.

Jedohwirddiese Folgean ReparaturenbeidemCluster mitdem höhstenLabel-Index

im Zyklus,also

z h : Label(z h ) = max(Label(z 1 , ..., z n ))

unterbrohen. Es gilt für diesen Cluster

z h

, dass

Label(z h ) > Label(z i )∀z i

; es kann ein Zyklus nur für solhe Cluster

entstehen,derenLabel-Indexgeringeristalsdervon

z h

.DadieFunktionzurMarkierung

(30)

höhsten Wert

von Verboten-Feldern beim Einfügendieser Lösung inden Trie indiesem Fall alle diese

Cluster als Verboten markieren kann,kann dieKonvertierungs-Funktion niht indiesen

Zyklus gelangen. Dieser Fall wird inAbbildung 2.15 illustriert. Im ersten Fall kann für

den Cluster

7

nur einVerboten-Feldmarkiert werden, nämlihfür den Cluster

5

,fürdie

restlihenjedohniht,daderCluster

10

erstweiteruntenimTrievorkommt.Imzweiten

Fall können für denCluster mitdem höhsten Wert

10

alle Cluster,deren direkter oder

indirekterVorgänger

10

ist,alsVerboten markiertwerden,daalleeinenniedrigeren Wert habenund somitbereitsweiter oben imTrievorgekommen sind.

Obwohl für die Praxis niht relevant, ist es möglih, einen Worst-Case-Fall zu kon-

struieren, bei dem

O(n 2 )

Konvertierungen nötig sind. Dieser tritt auf, wenn der Baum nur aus einem Weg besteht, derausgehend von derWurzel aufsteigend sortierte Label-

Indizesaufweist.DieserFallwirdinAbbildung2.16illustriert.AusgehendvonAbb.2.16a

wird der Vorgänger von

2

auf

n

geändert, danah der Vorgänger von

3

auf

2

usw. Der

Baumnah

n − 2

Konvertierungen,wenndieFunktionandemClustermitdemhöhsten Label-Index abbriht, ist in Abb. 2.16b zu sehen. Nun ist es aber wieder möglih, den

Vorgänger von

2

auf

n − 1

zu setzen, was im shlehtesten Fall

n − 3

Konvertierungen erforderlih maht. Der Baum nah diesen Konvertierungen ist in Abb. 2.16 zu sehen.

Dieser Vorgang kann insgesamt

n − 2

Mal auftreten, die Anzahl der Konvertierungen verringert sih jeweils immer um eins, also

P n−2

i=1 i

, was einem quadratishen Aufwand entspriht.

2.11 Die Operationen für die Prüfer-Darstellung

Da die Prüfer-Zahlen, wie auh die Predeessor-Darstellung, aus einem Integer-Array

bestehen, ist das Einfügen und das Konvertieren der Lösungen bis auf die geringfügig

untershiedliheTiefedesTries unddieLängedesArraysgleih.Auÿerdemistesbeider

Prüfer-Darstellung niht erforderlih, ungültige Lösungen zu markieren bzw. nah der

Konvertierungeiner Lösungzu überprüfen,obeinZyklus entstanden ist. Davonabgese-

hen ist die prinzipielle Funktionsweise abergleih. Dader EA jedoh grundsätzlih mit

der Predeessor-Darstellung arbeitet, ist eine Konvertierung erforderlih. Diese Opera-

(31)

tionen werdennunim Folgenden dargestellt.

Konvertierung der Predeessor-Darstellung in die Prüfer-Kodierung

Eswirdgrundsätzlih derklassishe Algorithmus [PK94 ℄verwendet. DerPseudoode ist

in Algorithmus 6 angegeben. Zunähst werden die Kanten in Form einer Adjazenzliste

aus der Predeessor-Darstellung berehnet, und der Grad der Clusters bestimmt und

diese in einen Vektor gespeihert. Danah wird laufend der Cluster mit der kleinsten

Nummerierung gesuht, dessen Grad 1 beträgt. Der Cluster, mit dem das Blatt noh

verbundenist,wirdinden Prüferode übernommen. Umdiesezient zugestalten,wird

derVektornur einmaldurhlaufen, dadernähsteCluster mitGrad1grundsätzlihnur

auf einem Feld mit einem höheren Index sein kann. Da die Kanten allerdings entfernt

werden, wenneinCluster indiePrüferlisteaufgenommen wird,istesauh möglih,dass

dadurh einneuerCluster Grad1 erhält. Fallsalso einCluster, dessen Indexkleiner als

derzuletztverwendeteClusterist,indieAuswahlkommt,wirdderIndexdirektaufdiese

Stellegesetzt,waseinerneutesIterierenüberüssigmaht.DerAufwandist

O(d max ∗ n)

,

wobei

d max

demCluster mit demmaximalen Grad entspriht.

Konvertierung der Prüfer-Kodierung in die Predeessor-Darstellung

Dieumgekehrte Rihtung, alsodieUmrehnung indiePredeessor-Darstellung, kannim

Wesentlihen analog berehnet werden. Algorithmus 7 generiert zuerst eine Liste von

KanteninStruktureiner Adjazenzliste,ausdenen dann inweitererFolge dieeigentlihe

Predeessor-Darstellung gebildet wird. Auh der Index wirdanalog zu demvorigen Al-

gorithmus immer nur erhöht, um die Berehnung zu beshleunigen. Zuerst wird der

Kandidaten-Vektor berehnet, derangibt,wie oft ein Cluster im Prüferode vorkommt.

Kandidaten sind zu Beginn solhe Cluster, die gar niht im Code vorkommen. Eine

KantezwishendemKandidatenunddemClusterausdemPrüferode(imerstenShritt

wirddererste Cluster derPrüferodes verwendet, im

n

-ten Shritt der

n

-te)kann dann

(32)

Eingabe:Lösung

sol pred : S g =< V G , T G >

inPredeessor-Darstellung Ausgabe:Lösung

sol pruef er : S g =< V G , T G >

inPrüfer-Darstellung

1: int[℄[℄

adjazenzliste

:berehne diese ListeausderLösung

sol

2: int[℄

grad

:speihert denGrad derCluster

3: int

j

=0;int

realindex

=0;int

saveindex

=-1

4: for(

int i = 0; i < sol pred .size() − 2; i + +

)do

5: while

j < sol pred .size()

do

6: if

saveindex

==-1then

7:

realindex

=

j

8: else

9:

realindex

=

saveindex

10: endif

11: if

degree

[

realindex

℄==1 then

12: Blatt mit kleinstem Label (

adjazenzliste[realindex][0]

) gefunden,

füge sie in

sol pruef er

ein

13: Kante aus

adjazenzliste

entfernenund

grad

aktualisieren 14: if

grad[pos] == 1 ∧ pos < j

then

15:

saveindex

=

pos

;

16: else

17:

saveindex

=-1;

18: end if

19: else

20:

j

++

21: endif

22: end while

23: endfor

hinzugefügt werden. Der Prüferode wirddann Shritt für Shritt abgearbeitet, imVer-

laufderBerehnungwerdendannauhsolheClusterzudenKandidatenhinzugefügt,die

nihtmehr indemCodevorkommen.Wenn dieAdjazenzlisteerst malvorliegt, kanndie

Berehnung der Predeessor-Darstellung ezient mittels der Tiefensuhe durhgeführt

werden. Insgesamt beträgt derAufwand für dieseFunktion

O(n)

.

2.12 Kombinierung der beiden Sihtweisen

Da Ghosh- und die Pop-Kodierung komplementär sind, werden diese gemeinsam ein-

gesetzt, mit der Absiht, deren Optimierungsmöglihkeiten zu kombinieren und somit

die Lösungen weiter verbessern zu können. Dies haben Hu, Leitner und Raidl [HLR08℄

in ihrem VNS-Ansatz mit Nahbarshaftsstrukturen, die auf den beiden Sihtweisen

basieren, getan und gute Resultate erhalten. Daraus ergibt sih die Motivation, dies

analogfür dieLösungsarhive zu tun.

Referenzen

ÄHNLICHE DOKUMENTE

Ruthmair, M., Raidl, G.R.: A Kruskal-Based Heuristic for the Rooted Delay- Constrained Minimum Spanning Tree Problem. Salama, H.F., Reeves, D.S., Viniotis, Y.: The

In comparison to existing heuristics the main intention is not to create a minimum cost spanning tree, but a solution with a high potential for further improvement..

The cluster-based construction heuristic can be divided into three steps: Cre- ating a hierarchical clustering (dendrogram) based on the Euclidean distances, deriving a

In this paper, we proposed a powerful VNS approach for solving the Generalized Minimum Spanning Tree problem by combining two complementary types of large neighborhoods.. They can

An evolutionary algorithm with solution archive for the generalized minimum spanning tree problem. Quesada-Arencibia, editors, Proceedings of the 13th International Conference

Searching, inserting and converting solutions requires O(r) time, thus the com- plexity only depends on the length of the solution vector, but not on the number of already

A Predecessor Coding in an Evolutionary Algorithm for the Capacitated Minimum Spanning Tree Problem.. G¨

We introduced a Kruskal-based construction heuristic for the rooted delay- constrained minimum spanning tree problem which produces faster and bet- ter results especially for