Das Rucksackproblem |
![]() |
![]() |
Letztmalig dran rumgefummelt: 01.06.17 13:38:08 |
![]() |
... gestoßen auf das Rucksackproblem ohne es bereits so zu nennen, sind die Alliierten bei den Vorbereitungen zur Landung in der Normandie. Rucksackproblem ist die klassische Kompromisslösung schlechthin - denn alles geht nicht! | ||||||
![]() |
1. Problembeschreibung 2. Hintergründe und Zusammenhänge - Einordnung in Klassen 3. Lösungsalgorithmen 4. Programmvorschläge 5. Zusammenfassung 6. Weiterführende Literatur 7. Linkliste zum Thema 8. Verwandte Themen |
||||||
![]() |
|
||||||
![]() |
Quellen:
|
1. Problembeschreibung |
![]() |
![]() |
![]() |
![]() |
Wie alle unsere | ||||||||||||||||||||||||||||||||||||
![]() |
In zwei Monaten startet die nächste Rakete zur Raumstation. Die
Weltraumagentur ist etwas knapp bei Kasse und bietet deshalb kommerziellen
Forschungsinstituten an, wissenschaftliche Experimente an der Raumstation
durchzuführen zu lassen. Die Rakete kann neben den obligatorischen
Verpflegungsrationen noch maximal 645 kg zusätzliche Last mitnehmen, die für
die Experimente benutzt werden soll. Die Weltraumagentur erhält von den
Forschungsinstituten verschiedene Angebote, in denen steht, wie viel Geld
sie für den Transport und die Durchführung des Experiments zu zahlen bereit
sind und wie schwer die Geräte für ihr Experiment sind. Welche Experimente
soll die Weltraumagentur auswählen, wenn sie den Profit maximieren will? Hinter diesem Szenario verbirgt sich ein klassisches Problem der Optimierung, das so genannte Rucksackproblem: Wir stellen uns vor, dass wir einen Rucksack haben, der höchstens ein bestimmtes vorgegebenes Gewicht T trägt. T wird als Gewichtsschranke bezeichnet. Neben dem Rucksack gibt es eine Menge von n Objekten (Gegenständen), die jeweils ein Gewicht und einen Profit haben. Wir suchen eine Teilmenge der Objekte, die wir in den Rucksack packen können, ohne die Gewichtsschranke T zu verletzen, so dass der Gesamtprofit möglichst groß ist, also die Summe der Profite der eingepackten Objekte maximiert wird. Im obigen Beispiel steht der Rucksack symbolisch für die Rakete und hat eine Gewichtsschranke von T = 645. Die Objekte repräsentieren die Experimente. Wir konkretisieren dieses Beispiel und stellen uns vor, dass n = 8 Objekte (Experimente) mit den folgenden Gewichten und Profiten vorliegen.
Intuitiv erscheint es sinnvoll, diejenigen Objekte zuerst auszuwählen,
die den größten Profit pro Gewichtseinheit erzielen. Dieses Verhältnis
zwischen Profit und Gewicht eines Objektes bezeichnet man auch als
Profitdichte. Wir haben in der Tabelle die Profitdichten berechnet und
die Objekte bereits so in der Tabelle angeordnet, dass die Profitdichte von
links nach rechts immer kleiner wird. |
||||||||||||||||||||||||||||||||||||
![]() |
Jeder Punkt repräsentiert eine Möglichkeit den Rucksack zu packen.
Allerdings sind diejenigen mit Gewicht größer als 645 zu schwer für den
Rucksack. Das sind gerade die Punkte, die rechts von der roten Linie sind.
Punkte, die links oder auf der schwarzen Linie liegen, sind zulässig. Von
all den zulässigen Punkten möchten wir denjenigen mit dem größten Profit
auswählen. Dieser Punkt entspricht der Teilmenge mit den Objekten 1, 2, 3
und 5, die zusammen Gewicht 637 und Profit 647 haben. Diese ist die so
genannte optimale Lösung. Man kann die optimale Lösung offensichtlich finden, indem man alle Teilmengen ausprobiert. Dieser Algorithmus hat allerdings einen großen Nachteil. Steigt die Anzahl der Objekte nur leicht an, so "explodiert" die Anzahl der Teilmengen. Erhält die Weltraumagentur in unserem Beispiel 60 Angebote für Experimente, so gibt es bereits 260 =
1.152.921.504.606.846.976 also mehr als eine Trillion) verschiedene Möglichkeiten, eine Auswahl zu treffen. Wenn man optimistisch annimmt, dass ein Computer eine Milliarde Teilmengen pro Sekunde testen kann, so benötigt er trotzdem noch über 36 Jahre, um alle Teilmengen durchzuprobieren. So lange wollen wir den Start der Rakete aber nicht verzögern. Pareto-optimale PunkteWie kann man die optimale Lösung schneller finden? Die Grundidee für einen effizienteren Algorithmus basiert auf folgender Beobachtung: Eine Teilmenge von Objekten kann nicht optimal sein, wenn es eine andere Teilmenge gibt, die leichter (oder gleich schwer) ist und gleichzeitig einen größeren Profit hat. Eine solche Lösung wäre unabhängig von der Gewichtsschranke des Rucksacks immer besser. Schauen wir noch mal auf unser Beispiel: |
||||||||||||||||||||||||||||||||||||
![]() |
Die blauen Punkte können nicht optimal sein, da wir für jeden blauen
Punkt einen noch besseren Punkt finden können, nämlich einen solchen, der
weiter oben und weiter links im Diagramm ist. Zu den roten Punkten gibt es
hingegen keine anderen Punkte, die links oberhalb dieser Punkte liegen.
Derartige Punkte heißen Pareto-optimal. Eine Teilmenge heißt somit
Pareto-optimal, wenn es keine andere Teilmenge gibt, die leichter (oder
gleich schwer) ist und gleichzeitig einen größeren Profit hat. Nur die 17
roten Punkte entsprechen Pareto-optimalen Teilmengen.
Bei der Suche nach der besten Lösung können wir uns also auf die
Pareto-optimalen Teilmengen beschränken. Aber wie kann man eine Liste aller
Pareto-optimalen Teilmengen berechnen, ohne explizit alle möglichen
Teilmengen auszuprobieren? |
||||||||||||||||||||||||||||||||||||
![]() |
2. Hintergründe, Zusammenhänge - Einordnung in Klassen |
![]() |
![]() |
![]() |
![]() |
Unter Annahme der Tatsache, dass wir nicht die Kaprekartiefe, sondern die Regelmäßigkeit der Wiederkehr der einzelnen Werte selbiger suchen, fällt die Aufgabe heute typischerweise in den Bereich der nicht entscheidbaren Probleme. Und diese Beschreibung selbst zu finden, dürfte dann schon in die Klasse der komplexen Probleme fallen. |
![]() |
|
![]() |
3. Lösungsalgorithmen |
![]() |
![]() |
![]() |
![]() |
Für kleine und überschaubare Mengen an Einzelkomponenten ist die Lösung einfach - bei nur einem Teile steht lediglich die Frage, kann ich es überhaupt mitnehmen oder nicht. Bewertungen stehen im Falle dessen, dass es mitgenommen werden kann, nicht an. Mit zwei Komponenten, bei denen wir mindestens davon ausgehen, dass beide einzeln mitgenommen werden können, gibt es Möglichkeiten. | ||||||||||||
![]() |
... die Sache mit der Schatztruhe |
||||||||||||
![]() |
... die Sache mit dem Rucksack Einpacken |
4. Programmvorschläge |
![]() |
![]() |
![]() |
![]() |
Hannes Uhlig hat unser Vorschläge konsequent aufgegriffen und einschließlich der Problematik Oma und Katze ein Programm des Kaprekar-Algorithmus notiert, in welchem schon einige Kerngedanken eines sauberen - eben noch nicht objektorientierten Programmieirstils zusammenlaufen. |
![]() |
|
![]() |
5. Zusammenfassung |
![]() |
![]() |
![]() |
![]() |
|
![]() |
6. Weiterführende Literatur |
![]() |
![]() |
![]() |
![]() |
|
![]() |
7. Links zum Thema |
![]() |
![]() |
![]() |
![]() |
|
![]() |
http://www.mathematische-basteleien.de/kaprekarzahl.htm |
![]() |
8. Verwandte Themen |
![]() |
![]() |
![]() |
![]() |
Das Vorangestellte hilft wirtschaften, löst jedoch kein einziges Problem (allerdings ohne Beachtung der Worst-Case-Strategien wird man auch nicht erfolgreich Software entwickeln und/oder informatische Projekte realisieren können). Deshalb nunmehr das, was wirklich Arbeiten hilft. | |||||||||||||||||||||
![]() |
|
|||||||||||||||||||||
![]() |
|
|||||||||||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im Mai 2005 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |
Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-) |