17.09.2013 Aufrufe

5 Entwurfsmethoden für Algorithmen

5 Entwurfsmethoden für Algorithmen

5 Entwurfsmethoden für Algorithmen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5.2.2 Branch & Bound<br />

Im wesentlichen beruhen die Backtracking-<strong>Algorithmen</strong> auf einem Preorder-Durchlauf des dynamisch<br />

erzeugten (Teils des) Aufzählungsbaums. Die Generierung der Söhne eines Knotens<br />

x = 〈x1,...,xi−1〉 erfolgt nach einem strengen Schema. Z.B. generiert (und expandiert) der <strong>für</strong><br />

das Rucksackproblem vorgestellte Backtracking Algorithmus stets zuerst den Knoten 〈x,0〉,<br />

dann den Sohn 〈x,1〉, vorausgesetzt, dass Gewicht(x,1) ≤ K. Die Grundidee von Branch &<br />

Bound Techniken besteht in der Verwendung von Heuristiken, die ein zielgerichtetes Suchen<br />

im Aufzählungsbaums ermöglichen. 38<br />

• Branch: expandiere zuerst “vielversprechende” Knoten<br />

• Bound: ignoriere Teilbäume, in denen nachweislich keine (optimale) Lösung gefunden<br />

werden kann.<br />

Branch & Bound-Techniken werden häufig <strong>für</strong> Optimierungsprobleme verwendet, die sich nicht<br />

optimal mit der Greedy-Methode (siehe den folgenden Abschnitt 5.4 auf Seite 211 ff) lösen lassen.<br />

Es gibt sehr viele Varianten von Branch & Bound <strong>Algorithmen</strong>, die sich in der Art und<br />

Weise, wie die Schranken eingesetzt werden, unterscheiden. Wir erläutern mögliche Vorgehensweisen<br />

<strong>für</strong> Maximierungsprobleme. Wie <strong>für</strong> die Backtracking <strong>Algorithmen</strong> identifizieren<br />

wir die Knoten im Aufzählungsbaum mit Tupeln x = 〈x1,...xi−1〉. Sei opt eine Variable, die<br />

jeweils den Wert der besten bisher gefundenen Lösung speichert. opt(x) bezeichne den Wert<br />

einer besten Lösung im Teilbaum mit Wurzel x. Untere und obere Schranken ub(x), lb(x) <strong>für</strong><br />

opt(x) können <strong>für</strong> die Beschränkungstechnik wie folgt eingesetzt werden.<br />

• Obere Schranken (“upper bounds”): Ist die obere Schranke ub(x) höchstens so gut wie<br />

der Wert der besten bisher gefundenen Lösung (also ub(x) ≤ opt), dann wird der Knoten<br />

x samt seiner Nachfolger ignoriert.<br />

• Untere Schranken (“lower bounds”): Stimmt die untere Schranke lb(x) mit der oberen<br />

Schranke ub(x) überein, dann gilt lb(x) = opt(x) = ub(x). D.h. in diesem Fall kann<br />

man ohne explizite Analyse des Teilbaums mit Wurzel x auf den Wert einer optimalen<br />

Lösung im Teilbaum mit Wurzel x schließen.<br />

Wir setzen obere und untere Schranke <strong>für</strong> die Beschränkungsstrategie ein. In solchen Fällen, in<br />

denen “hilfreiche” untere Schranken nicht effizient berechnet werden können (bzw. keine effizienten<br />

Verfahren bekannt sind), kann man <strong>für</strong> Maximierungsprobleme auf die unteren Schranken<br />

verzichten. Dies entspricht der Verwendung der trivialen unteren Schranken lb(x) = −∞. Liegt<br />

ein Minimierungsproblem vor, dann sind die Rollen der unteren und oberen Schranken zu vertauschen.<br />

Bemerkung 5.2.8 (Wert einer optimalen Lösung versus eine/alle Lösungen). Die genannte Vorgehensweise<br />

ist zunächst nur dann gerechtfertigt, wenn man nur an dem Wert einer optimalen<br />

Lösung interessiert ist, nicht aber an der Lösung selbst. Will man eine optimale Lösung (und<br />

38 Der Begriff “Branch & Bound-Algorithmus” wird in der Literatur mit unterschiedlicher Bedeutung verwendet.<br />

Tatsächlich kann man mehrere Entwurfsstrategien durch Branch & Bound Techniken erweitern. Die hier vorgestellte<br />

Methode ist eine Erweiterung des Backtracking und wird von manchen Autoren als “Backtracking mit<br />

Branch & Bound” bezeichnet.<br />

187

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!