5 Entwurfsmethoden für Algorithmen
5 Entwurfsmethoden für Algorithmen
5 Entwurfsmethoden für Algorithmen
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