|
HUMBOLDT-UNIVERSITÄT ZU BERLIN
MATHEMATISCH-NATURWISSENSCHAFTLICHE FAKULTÄT II INSTITUT FÜR MATHEMATIK PROF. PHD. ANDREAS GRIEWANK JAN RIEHME |
| [width=3cm]huk |
Finde Häufigkeiten
der Gegenstände
, die den Wert
der in den Rucksack gepackten
Gegenstände maximiert, ohne dabei das Volumen des Rucksacks zu überschreiten
(
) und ohne die Vorratsbedingungen
zu verletzen.
Ganzzahliges Lineares Optimierungsproblem
Bemerkung: Das ist ein Rucksackproblem mit oberen Schranken
für die Häufigkeiten
der Gegenstände
und nur eine mögliche
Form eines Rucksackproblems. Andere wichtige Arten von Rucksackproblemen sind:
Im Folgenden wird ein einfacher spezieller Algorithmus1 zur Lösung des
Rucksackproblems mit oberen Schranken für die Variablen
angegeben.
Dabei setzen wir insbesondere eine Sortierung der Gegenstände
nach
abnehmenden Quotienten
voraus, es soll also gelten:
Falls die Daten nicht dieser Sortierungsbedingung genügen, dann muss vor dem Anwerfen des Algorithmus entsprechend sortiert werden. Im Folgenden gehen wir davon aus, dass die Sortierung nach fallendem Wert pro Volumeneinheit vorliegt.
Der Name ,,gefräßig`` beschreibt das Vorgehen dieses einfachen
Näherungsalgorithmus2 sehr gut: Von dem am meisten
Wert pro Volumeneinheit versprechenden Gegenstand werden soviele Exemplare wie
möglich eingepackt und dann das verbleibende Volumen mit dem nächstbesten
Gegenstand gefüllt. Die Anzahl, wie oft ein Gegenstand
eingepackt
werden kann ist dabei begrenzt durch das verfügbare (Rest)volumen
und
die maximale Anzahl
:
Der Wert der Greedy-Lösung berechnet sich als
.
Beachtenswert ist noch, dass die Werte
der Gegenstände erst bei der
Berechnung des Wertes gebraucht werden nicht aber zur Bestimmung der
Greedy-Lösung
(das liegt an der speziellen Sortierung und den
darauf abgestimmten Algorithmus, der den Wert nicht mit berechnet).
Schranken (engl. bounds) werden im Branch & Bound - Verfahren
benutzt, um Teilprobleme zu bewerten, die durch die Verzweigung (engl.
branch) entstanden sind: Bei einem
- Problem wie dem
Rucksackproblem will man durch die Schranke erfahren, ob die Abarbeitung eines
Teilproblems keine bessere Lösung als die bisher beste gefundene Lösung
liefern kann. Wenn das so ist, dann muss dieses Teilproblem nicht weiter
untersucht werden (Schritt 6 im Algorithmus aus der Vorlesung).
Im vorliegenden Fall von nach fallendem Wert pro Volumeneinheit sortierten Gegenständen erhält man sehr einfach zu berechnende obere Schranken3:
Die beiden Schranken
und
sind verbesserte obere
Schranken, d.h. es gilt
Ob der höhere Aufwand bei der Schrankenberechnung gerechtfertigt ist oder nicht kann nicht im Voraus gesagt werden. Der Erfolg der Schranken hängt unter anderem von der Größe des Problems (Anzahl der Gegenstände), aber auch von den Daten (z.Bsp. Volumen des Rucksacks) und der sich daraus ergebenden Verzweigungsstruktur ab.
Bei der Berechnung der verbesserten Schranken ist zu beachten, dass
nur für
und
nur für
definiert sind.
Bei der Implementation kann man entsprechende Falluntescheidungen aber
vermeiden, wenn man Hilfsgegenstände
und
einführt mit
Ein einfaches Branch & Bound - Verfahren ist in Algorithmus 2 angegeben. Die benutzte rekursive Schreibweise erlaubt eine einfache Notation.
Der Aufruf dieser rekursiven Routine hat dabei folgendermaßen zu geschehen:
| Benutztes | Anzahl | Anzahl | Anzahl | |||||
| Volumen | Schranken- | Schleifenkörper- | rekursiver | |||||
| berechnung | durchläufe | Aufrufe | ||||||
| Greedy | 40 | 4 | 2 | 0 | 22 | |||
| Voll.Enum. | 44 | 4 | 0 | 2 | 26 | 0 | 68 | 25 |
| B&B, |
44 | 4 | 0 | 2 | 26 | 17 | 25 | 9 |
| B&B, |
44 | 4 | 0 | 2 | 26 | 14 | 19 | 6 |
| B&B, |
44 | 4 | 0 | 2 | 26 | 13 | 17 | 5 |
| Benutztes | Anzahl | Anzahl | Anzahl | |||||
| Volumen | Schranke | Schleifenkörper- | rekursiver | |||||
| wirksam | durchläufe | Aufrufe | ||||||
| Greedy | 438 | 14 | 33 | 0 | 270 | |||
| Voll.Enum. | 444 | 14 | 30 | 12 | 276 | 0 | 13150 | 526 |
| B&B, |
444 | 14 | 30 | 12 | 276 | 507 | 526 | 20 |
| B&B, |
444 | 14 | 30 | 12 | 276 | 134 | 141 | 8 |
| B&B, |
444 | 14 | 30 | 12 | 276 | 114 | 119 | 6 |