Lösung

Werbung
Übungsblatt 1, Aufgabe 3: Heuristik für das
”Prize Collecting Steiner Tree Problem”
Marco Happenhofer
Peter Robinson
Leonhard Josef Zehentner
October 26, 2004
1
Definitionen
V : Menge der Knoten
E: Menge der Kanten
Vr : Menge der Knoten des reduzierten Graphens
Er : Menge der Kanten des reduzierten Graphens
d(v): Knotenprofit des Knotens v
dc(c): Clusterprofit des Clusters c
f (e): Kantenkosten der Kante e
f c(i, j): Verbindungskosten zwischen Cluster i und Cluster j
2
Heuristik
2.1
1
2
3
4
5
Clusterbildung
Beginne bei beliebigen Knoten P1 mit
Für 2 Knoten P1 und Pi, die über
Falls min( d(P1), d(Pi) ) >
Füge Pi zur Clustermenge
Sonst beende Tiefensuche auf
Tiefensuche:
Kante Ki verbunden sind:
f(Ki):
von P1 hinzu
diesem Pfad
Die zu Cluster zusammengefaßten Knoten kann man selbst als Graphen realisieren. Die Aufnahmebedienung zu einen Cluster ( in Zeile 3) ist symmetrisch. Unabhängig von welchen Knoten ausgegangen wird, es wird immer
die gleiche Entscheidung getroffen. Als Ergebnis erhält man eine Menge von
Clustern.
1
Aufwandsabschätzung: Für einen stark zusammenhängenden Graphen
erhält man O(|V |2 ).
Begründung: Jede Kante muß geprüft werden, ob der dahinterliegende
Knoten schon in einem Cluster ist. Wenn ja, mache gar nichts. Wenn es
sich lohnt ihn im eigenen Cluster aufzunehmen, dann markiere den Knoten.
2.2
Fortsetzungsvarianten
Im folgenden sind mehrere mögliche Fortsetzungen der Heuristik beschrieben.
2.2.1
MST-Steiner Tree Heuristik auf reduzierten Graphen anwenden
Voraussetzung: Es existiert die oben erzeugte Menge von Clustern. Einzelknoten bilden keine Cluster.
1. Erzeuge neuen Graphen, indem die Cluster auf jeweils einen Knoten
reduziert werden:
(a) Die Kanten dieses Knotens bestehen aus der Vereinigung aller
ursprünglichen externen Kanten.
(b) Ist eine Kante zu einem externen Knoten zweimal vorhanden,
dann nimm die Günstigere.
(c) Clusterinterne Kanten werden gelöscht.
Aufwandsabschätzung: Für einen stark zusammenhängenden Graphen
erhält man O(|V |2 ). Begründung: Während der Phase der Clusterbildung entsteht ein neuer Graph mit maximal O(|V |) Knoten. Für jeden
dieser Knoten müssen dessen Kanten (max. O(|V |) mit den Kanten
(max. O(|V |)) der bisher in das Cluster aufgenommenen Knoten verglichen und die Vereinigungsmenge gebildet werden. Also max. O(|V |)
Kanten mit max. O(|V |) Kanten vergleichen.
2. Anwenden der MST Steiner Tree Heuristik auf den neuen (reduzierten)
Graphen:
(a) Alle Nicht-Cluster Knoten bilden die Steiner Knoten
(b) Alle Cluster Repräsentanten die Terminal Knoten.
Aufwandsabschätzung: siehe Vorlesung
2
3. Der entstehende Baum wird noch um jene Blätter (rekursiv) bereinigt,
die keinen positiven Beitrag zum Gesamtergebnis leisten. Dazu wird
der Algorithmus aus Aufgabe 6 des 1. Übungsblattes verwendet und
nacheinander auf den Baum angewandt, wobei jeder Knoten einmal die
(fixe) Wurzel des Baumes ist.
Aufwandsabschätzung: O(|V |2 )
Gesamtaufwandsabschätzung: Die MST Steiner Heuristik fällt hier am
Meisten ins Gewicht:
O(|V |(|V |log|V | + |E|))
2.2.2
MST auf reduzierten Graphen
Voraussetzung: Es existiert die oben erzeugte Menge von Clustern. Einzelknoten bilden keine Cluster.
1. Erzeuge reduzierten Graphen wie in Punkt 1.3.1.1
2. Erzeuge den MST zu diesem Graphen
3. Bereinige den Baum wie in 1.3.1.3
Aufwandsabschätzung: Cluster erzeugen: O(|V |2 )
Cluster zusammenziehen: O(|V ||E|)
Erzeugen des MST: O(|Er |log|Er |), |Er | ≤ |E| (reduzierter Graph wird
wahrscheinlich dünn sein)
Bereinigen: O(|Vr |2 )
Gesamtabschätzung: O(|V ||E|)
2.2.3
MST auf Originalgraph abwandern
Voraussetzung: Es existiert die oben erzeugte Menge von Clustern. Einzelknoten bilden keine Cluster. Die Cluster werden nicht zu Einzelknoten
zusammengefügt.
1. Bilde MST auf dem nicht reduzierten ursprünglichen Graphen
2. Entlang des MST den Graphen abwandern (wie in der Vorlesung beschrieben):
(a) Zwischen dem Verlassen eines Clusters und dem Wiedereintritt in
einen neuen wird die Distanz berechnet und gemerkt.
3
3. Nach dem ”Abwandern” des gesamten MST (bidirectional double tracing) werden diese Distanzen ausgewertet.
4. Mehrfache Verbindungen zwischen Clustern werden gelöscht - aufgenommen wird nur die Billigste Verbindung pro Clusterpaar.
5. Diese Verbindungen werden nun aufsteigend sortiert.
Aufwand: O(|V |log(|V |))
6. Beginnend mit den kleinsten Verbindungskosten werden die adjazenten
Cluster miteinander verbunden, falls die Kosten der Verbindung den
Profit des billigeren Clusters nicht überschreiten:
min(dc(ci ), dc(cj )) > f c(i, j)
(a) Profit des neuen Clusters z: dc(z) = dc(i) + dc(j) − f c(i, j)
7. Am Ende entstehen im allgemeinen mehrere Super Cluster. Der Profitabelste wird als Lösung genommen.
Aufwandsabschätzung:
Cluster erzeugen: O(|V |2 )
Bilden des MST: O(|V |2 )
Traversieren des MST: O(2|V | − 2)
Mehrfachverbindungen zwischen Clustern löschen: O(|V |)
Clusterverbindungen sortieren: O(|V |2 log|V |)
Cluster verbinden: O(|V |)
Gesamtaufwand: O(|V |2 log|V |)
3
Zusammenfassung und Ausblick
Die Clusterbildung könnte noch dahingehend erweiter werden, daß nach dem
Feststellen der beteiligten Knoten diese einfach mittels MST verbunden werden. Da jeder beteiligte Knoten einen positiven Beitrag leistet, müssen auf
jeden Fall alle Knoten enthalten sein und daraus folgt, daß der MST optimal
für diesen Teilgraph ist.
Mit welchem Clustervereinigungsalgorithmus fortgesetzt wird, hängt davon
ab, wie stark der ursprüngliche Graph bereits durch die Clusterbildung reduziert werden konnte. Ist er stark reduziert, wird die MST-Steiner-Tree
Heuristik performant sein. Ist er kaum reduziert, dann besteht mit dieser
Heuristik die Gefahr, daß zwar alle Cluster verbunden werden, diese aber
der Bereinigungsaktion zum Opfer fallen. Bei der dritten Möglichkeit werden diese ”nicht lukrativen” Cluster gar nicht aufgenommen.
4
Ein Test mit Praxisdaten könnte Aufschluß darüber geben, bei welcher
Art von Graphen welche Heuristik gut arbeitet.
5
Herunterladen