Optimierung

Bei der Optimierung geht es darum aus mehreren Lösungen die (in einem gewissen Sinn) "optimale" zu finden, z.B. minimale Spannbäume, das Handlungsreisendenproblem, das Rucksackproblem, etc.

Exakte Algorithmen für schwierige Optimierunsprobleme

Enumerationsverfahren

Bei den Enumerationsverfahren werden alle Lösungen aufgezählt und aus diesen dann die optimale ausgewählt. Allerdings kann das Bestimmen aller Lösungen sehr lange dauern.

Man kann dieses Verfahren zum Beispiel auf das Rucksackproblem anwenden: Man hat eine Menge von N Gegenständen i mit Gewicht w_i und Wert c_i sowie einen Rucksack mit Fassungsvermögen K gegeben. Nun geht es darum, die Gegenstände mit möglichst hohem Gesamtwert einzupacken, ohne die Kapazität des Rucksacks zu überschreiten.

Auch das Acht-Damen-Problem kann mittels Enumeration gelöst werden. Es geht dabei darum, acht Damen - oder allgemeiner: n Damen - so auf einem n×n-Schachbrett zu platzieren, dass sie einander nicht bedrohen. Bei der Enumeration sollte man allerdings beachten, dass in jeder Zeile und jeder Spalte genau eine Dame stehen muss, damit die Aufgabe überhaupt erfüllt werden kann. Beachtet man das nicht, so erreicht der Aufwand Theta(n^(2n+2)).

Dynamische Programmierung

Bei der dynamischen Programmierung zerlegt man das Problem in Teilprobleme, die jedoch voneinander abhängig sind.

Mit ihrer Hilfe kann die Lösung des Rucksackproblems deutlich vereinfacht werden: Man betrachtet zuerst nur die ersten l Gegenstände und merkt sich für alle möglichen Werte c diejenigen Lösungen, die das kleinste Gewicht ergeben. In der Praxis macht man das durch einen Entscheidungsbaum: Die Verzweigungen vor der i-ten Ebene entscheiden darüber, ob das i-te Element aufgenommen wird oder nicht. In den Knoten wird das jeweilige (c,w)-Paar gespeichert. Treten in einer Ebene Paare mit gleichem c-Wert auf, so wird nur jene Lösung mit kleinerem Gewicht weiterverfolgt, die andere wird verworfen. Gleiches geschieht mit Paaren (c,w) mit w>K. In der letzten Ebene sucht man dann unter jenen Paaren (c,w) mit w <= K dasjenige heraus, das den größten Wert besitzt, und hat somit die Lösung gefunden.

Branch-and-Bound

Bei Branch-and-Bound geht man von einem Problem aus, von dem eine minimale Lösung gesucht werden soll (Maximierungsaufgaben können durch Vorzeichenumkehr auch so behandelt werden).

Zunächst sucht man (z.B. mit Hilfe einer Heuristik - siehe Abschnitt 2.2) eine zulässige, nicht notwendigerweise optimale Lösung mit Wert U und berechnet eine untere Schranke L für alle möglichen Lösungswerte. Ist U=L, so ist man fertig.

Andernfalls wird die Lösungsmenge partitioniert (Branching) und die Heuristiken werden auf die Teilmengen angewandt (Bounding). Man berechnet sich wieder eine untere Schranke L für alle möglichen Lösungswerte (der jeweiligen Teilmenge). Ist L >= U, so muss man keine weiteren Lösungen aus dieser Teilmenge suchen und erspart sich somit weitere Enumeration.

Die Schwierigkeit bei dieser Art der Optimierung liegt meist in einer "guten" Aufteilung der Lösungsmenge. Darüber hinaus sollten die berechneten unteren Schranken L möglichst gut sein, um möglichst viele Teilprobleme ausschließen zu können.

Approximative Algorithmen und Gütegarantie

Eine Heuristik ist ein Verfahren zur Bestimmung einer (nicht notwendigerweise optimalen) Lösung eines Minimierungs- bzw. Maximierungsproblems.

Ziel dabei ist es natürlich, möglichst nahe ans Optimum heranzukommen. Ist P eine Instanz des zu lösenden Problems, c_{OPT}(P) der Optimalwert für P und c_A(P) der Wert der Lösung, die mit Hilfe der Heuristik A gefunden wurde, so nennt man A einen eps-approximativen Algorithmus, wenn für alle Probleminstanzen P gilt:

c_A(P)/c_{OPT}(P) <= eps bzw. c_A(P)/c_{OPT}(P) >= eps
(für Minimierungsaufgaben)   (für Maximierungsaufgaben)

eps heißt dann Gütegarantie des Algorithmus A.

Ein Beispiele für einen eps-approximativen Algorithmus ist die First-Fit-Heuristik für das Bin-Packing-Problem (eps~ \frac{17}{10}).

Die Spanning-Tree-Heuristik (eps=2) wird zur Lösung des euklidische Travelling Salesman Problem (TSP) benutzt: Zuerst bestimme man einen minimalen Spannbaum und verdopple anschließend dessen Kanten. Im entstanden Graphen suche man nun eine Eulertour (d.h. eine Tour, die jede Kante des Graphen genau einmal enthält) und gebe dieser eine Orientierung. Dann starte man bei einem beliebigem Knoten p, markiere diesen und setze T = Ø. Dann folge man der Eulertour, bis man auf einen nichtmarkierten Knoten q trifft, markiere diesen, setze T = T \cup {(p,q)} sowie p=q und fahre solange fort, bis alle Knoten markiert sind. Fügt man nun zu T noch jene Kante hinzu, die den letzten mit dem ersten besuchten Knoten verbindet, hat man eine Lösung des TSP gefunden.

Die Christophides-Heuristik, die ebenfalls für das euklidische TSP verwendet wird, erreicht durch ein geschickteres Vorgehen sogar eps=\frac32.

Verbesserungsheuristiken

Verbesserungsheuristiken werden, wie der Name schon vermuten lässt, zur Verbesserung einer gegeben Lösung eines Optimierungsproblems verwendet.

Bei Austauschverfahren werden aus einer gegeben Lösung L einige Elemente entfernt, um eine Teillösung T zu erhalten. Anschließend versucht man, alle Lösungen zu bestimmen, die T enthalten, und wählt aus all diesen die beste. Dabei kann es allerdings vorkommen, das es nicht mehr möglich ist, sogenannten "lokalen Optima" zu entkommen.

Dieses Manko beseitigt Simulated Annealing zumindest zum Teil: Hierbei wird (ausgehend von einer gegebenen Lösung L) in jedem Schritt eine "Nachbarlösung" L' bestimmt, die immer dann übernommen wird, wenn ihre Bewertung besser ist als jene der ursprünglichen Lösung. Schlechtere Lösungen werden allerdings auch mit einer gewissen Wahrscheinlichkeit akzeptiert (eben um lokalen Optima zu entkommen), wobei üblicherweise nur geringfügig schlechtere Lösungen eher übernommen werden als deutlich schlechtere. Außerdem nimmt diese Wahrscheinlichkeit mit fortschreitender Zeit noch zusätzlich ab.

Evolutionäre Algorithmen wiederum versuchen die Prinzipien der Evolution - Selektion, Rekombination und Mutation - zu simulieren. Ausgehend von einer Vielzahl von Lösungen (und nicht einer einzigen!) werden in jedem Schritt die besseren Lösungen zwar mit einer höheren Wahrscheinlichkeit selektiert als die schlechteren, aber auch letztere haben sozusagen "eine Chance". Dann wird aus zwei "Elternlösungen" (unter Umständen) eine neue Lösung kombiniert, bevor es schließlich (eventuell) durch zufällige kleine Änderungen zu einer Mutation einer oder mehrerer Lösungen kommt.


 Diese Seite erfüllt die HTML-4.01-Spezifikationen!
Übersicht
Zurück Home Weiter
Index