Rucksackproblem

Das Rucksackproblem: Welche der Gewichte können in den Rucksack mit Maximallast von 15 kg gepackt werden, so dass der Geldwert maximal wird? (Lösung in diesem Fall: Alle Gewichte außer dem schwersten einpacken.)

Das Rucksackproblem (auch englisch knapsack problem) ist ein Optimierungsproblem der Kombinatorik. Aus einer Menge von Objekten, die jeweils ein Gewicht und einen Nutzwert haben, soll eine Teilmenge ausgewählt werden, deren Gesamtgewicht eine vorgegebene Gewichtsschranke nicht überschreitet. Unter dieser Bedingung soll der Nutzwert der ausgewählten Objekte maximiert werden.

Die Entscheidungsvariante des Rucksackproblems fragt, ob ein zusätzlich vorgegebener Nutzwert erreicht werden kann. Sie gehört zur Liste der 21 klassischen NP-vollständigen Probleme, von denen Richard Karp 1972 die Zugehörigkeit zu dieser Klasse zeigen konnte.[1]

In der Kryptographie wird häufig eine andere Entscheidungsvariante betrachtet. Dabei werden nur die Gewichte betrachtet und es wird gefragt, ob es eine Teilmenge der Objekte gibt, die einen vorgegebenen Gewichtswert genau erreicht. Diese Problemvariante wird auch als SUBSET-SUM bezeichnet. Basierend auf dieser Variante wurde das Public-Key-Kryptoverfahren Merkle-Hellman-Kryptosystem entwickelt, das sich allerdings als nicht besonders sicher herausstellte.

Anschauung

Das Rucksackproblem hat seinen Namen aus folgender Anschauung heraus erhalten: Es sind verschiedene Gegenstände mit einem bestimmten Gewicht und einem Nutzwert gegeben. Aus diesen Gegenständen soll nun eine Auswahl getroffen werden, die in einen Rucksack mit einer vorgegebenen Gewichtsschranke mitgenommen werden können. In der Literatur wird zur Veranschaulichung auch gerne der Dieb herangezogen, der nur einen kleinen Teil der Beute im Rucksack abtransportieren kann und nun versucht, das Maximum an Nutzwert herauszuschlagen.

Mathematische Formulierung

Gegeben ist eine endliche Menge von Objekten . Durch eine Gewichtsfunktion und die Nutzenfunktion wird den Objekten ein Gewicht und ein festgelegter Nutzwert zugeordnet:

Des Weiteren gibt es eine vorgegebene Gewichtsschranke .

Gesucht ist eine Teilmenge , die die Bedingung

einhält und die Zielfunktion maximiert.

Der Spezialfall führt auf das Teilsummenproblem.

Lösung durch dynamische Programmierung

Sind die Gewichte ganzzahlig, so lässt sich der optimale Wert des Rucksackproblems auch mittels dynamischer Programmierung lösen. Seien dazu die Elemente von .

Eingabe: U, B, w, v wie oben beschrieben
  R := [1…(n+1), 0…B]-Matrix, mit Einträgen 0
  FOR i = n … 1
    FOR j = 1 … B
      IF w(i) <= j
        R[i,j] := max( v(i) + R[i+1, j-w(i)], R[i+1,j] )
      ELSE
        R[i,j] := R[i+1,j]
Ausgabe: R[1,B]

In jeder Speicherzelle ist der maximale Nutzwert bei maximal möglichem Gesamtgewicht von bei Berücksichtigung einer Teilmenge von Gegenständen aus der Teilsequenz der Gesamtsequenz aller Gegenstände . Also ist der maximale Nutzwert bei Berücksichtigung einer Teilmenge aller Gegenstände in der Zelle nach Beendigung des Algorithmus gespeichert.

In jeder Zeile der Matrix wird über die beiden Fälle optimiert, ob der Nutzwert maximal vergrößert werden kann, wenn der Gegenstand mit dem Gewicht dem Rucksack hinzugefügt oder er nicht aufgenommen wird. Im ersten Fall erhöht sich der Nutzwert um .

Um den Inhalt des Rucksacks mit dem maximalen Nutzwert zu bestimmen, kann er rekonstruiert werden, indem die Berechnung des Optimums in mittels Backtracking zurückverfolgt wird.

Die Korrektheit folgt aus der folgenden Beobachtung:

Sei eine optimale Lösung. Dann ist eine optimale Lösung für die Instanz mit Maximalgewicht . Der Algorithmus benötigt aufgrund der verschachtelten for-Schleifen, die über n und B iterieren, eine Laufzeit von . Hierbei ist zu beachten, dass B eine zu seiner Eingabelänge exponentiell wachsende Größe und somit die Laufzeit pseudopolynomiell ist.

Das folgende Beispiel zeigt eine Implementierung des Algorithmus in der Programmiersprache C++.[2]

#include <iostream>
using namespace std;

// Diese Funktion prüft, ob es eine Aufteilung der Menge mit gleichen Summen gibt und gibt dann true zurück, sonst false
bool findPartition(int numbers[], int n)
{
    int sum = 0;
    for (int i = 0; i < n; i++) // for-Schleife, die die Summe der Zahlen berechnet
    {
        sum += numbers[i];
    }
    if (sum % 2 != 0) // Wenn die Summe ungerade ist, wird false zurückgegeben
    {
        return false;
    }
    bool* part = new bool[sum / 2 + 1]; // Deklariert ein Array, in dem gespeichert wird, ob die Zahlen 0, 1, 2, ... als Summe einer Teilmenge der gegebenen Zahlen dargestellt werden können
    for (int i = 0; i <= sum / 2; i++) // for-Schleife, die das Array initialisiert
    {
        part[i] = false;
    }
    for (int i = 0; i < n; i++) // for-Schleife, die die Indexe der Zahlen durchläuft
    {
        for (int j = sum / 2; j >= numbers[i]; j--) // In dieser for-Schleife wird geprüft, ob Halbe Gesamtsumme - Zahl mit Index i als Summe einer Teilmenge von Zahlen mit Index kleiner als i dargestellt werden kann
        {
            if (part[j - numbers[i]] || j == numbers[i]) // Wenn die Summe j - Zahl mit Index i dargestellt werden kann oder die Zahl mit Index i gleich j ist, wird das Element für die Summe j auf true gesetzt
            {
                part[j] = true;
            }
        }
    }
    return part[sum / 2]; // Gibt das Element für die halbe Gesamtsumme der Zahlen zurück. Dieses Element vom Typ bool gibt an, ob diese Summe dargestellt werden kann.
}

// Hauptfunktion die das Programm ausführt
int main()
{
    int numbers[] = { 1, 3, 3, 2, 3, 2 };
    int n = sizeof(numbers) / sizeof(numbers[0]); // Variable für die Anzahl der Zahlen
    if (findPartition(numbers, n)) // Wenn eine Aufteilung mit gleichen Summen gefunden wurde
    {
        cout << "Es gibt eine Aufteilung mit gleichen Summen." << endl; // Ausgabe auf der Konsole
    }
    else
    {
        cout << "Es gibt keine Aufteilung mit gleichen Summen." << endl; // Ausgabe auf der Konsole
    }
}

Lösung mittels Profitabilitätsindex

In der Praxis wird ein Ranking der Objekte nach Profitabilitätsindex vorgenommen:

  • PI = Profitabilitätsindex
  • W = Generierter Wert (hier: Nutzwert)
  • R = Verbrauchte Ressourcen (hier: Gewicht)

Dann werden möglichst viele Objekte gewählt, beginnend mit dem Objekt mit höchstem Profitabilitätsindex. Dies führt bei ganzzahligen Problemen nicht immer zur optimalen Lösung, ist aber sehr praktikabel. Bei dieser Methodik handelt es sich um einen Greedy-Algorithmus.

Lösung mittels ganzzahliger linearer Optimierung

Das Rucksackproblem lässt sich wie folgt als ganzzahliges lineares Optimierungsproblem (integer linear program oder kurz ILP) formulieren. Sei dazu für jedes Element eine binäre Entscheidungsvariable mit der folgenden Interpretation:

  • : Das Element wird im Rucksack mitgenommen.
  • : Das Element wird nicht im Rucksack mitgenommen.

Dies führt zu folgender Modellierung des Rucksackproblems

,

welches mit gängigen kommerziellen und nichtkommerziellen Solvern wie etwa CPLEX, Gurobi, FICO Xpress, SCIP, GLPK und CBC auch für große praxisrelevante Instanzen global optimal gelöst werden kann.[3]

Anwendungen

Viele reale Situationen lassen sich mit Hilfe der Lösung dieses Problems mathematisch klären. Oft steht eine begrenzte Kapazität zur Verfügung, welche nicht die gesamte Nachfrage befriedigen kann. Man denke z. B. an einen Lkw, der viele verschiedene Güter – mit einem bestimmten Gewinn – transportieren soll, aber wegen der begrenzten Lademenge nicht alle Güter aufnehmen kann. Der Besitzer des Lkws wird die Ladung so wählen wollen, dass der Gewinn maximal ausfällt.

Siehe auch

Literatur

Einzelnachweise

  1. Richard M.Karp: Reducibility Among Combinatorial Problems. In: Springer (Hrsg.): Proceedings of a symposium on the Complexity of Computer Computations. Yorktown Heights, New York 1972, S. 85–103 (amerikanisches Englisch, springer.com).
  2. GeeksforGeeks: 0-1 Knapsack Problem (englisch)
  3. David Pisinger: Where are the hard knapsack problems? In: Computers & Operations Research. Band 32, Nr. 9, September 2005, ISSN 0305-0548, S. 2271–2284, doi:10.1016/j.cor.2004.03.002 (englisch, gla.ac.uk [PDF; abgerufen am 4. Dezember 2023]).

Read other articles:

Masjid Fatih IstanbulFatih İstanbul CamiiAgamaAfiliasi agamaIslam – SunniProvinsiIstanbulLokasiLokasiFatihNegara TurkiKoordinat41°1′10.99″N 28°56′58.99″E / 41.0197194°N 28.9497194°E / 41.0197194; 28.9497194Koordinat: 41°1′10.99″N 28°56′58.99″E / 41.0197194°N 28.9497194°E / 41.0197194; 28.9497194ArsitekturArsitekAtik Sinan, Mimar Mehmet TahirJenisMasjidGaya arsitekturTurki dengan sedikit sentuhan arsitektur Utsmani...

 

Town in New Hampshire, United StatesFranconia, New HampshireTownFranconia Village with Sugar Hills background c. 1908Motto: Explore the Road Not TakenLocation in Grafton County, New HampshireCoordinates: 44°13′38″N 71°44′54″W / 44.22722°N 71.74833°W / 44.22722; -71.74833CountryUnited StatesStateNew HampshireCountyGraftonIncorporated1764Government • Board of SelectmenJill Brewer, ChairEric MethDan Walker • Town Administrato...

 

Not to be confused with Brandon Frazier. Canadian-American actor (born 1968) Brendan FraserFraser at the 2022 Montclair Film FestivalBornBrendan James Fraser (1968-12-03) December 3, 1968 (age 55)Indianapolis, Indiana, U.S.CitizenshipCanadaUnited StatesAlma materCornish College of the Arts (BA)OccupationActorYears active1990–presentWorksFull listSpouse Afton Smith ​ ​(m. 1998; div. 2009)​Children3RelativesGeorge Genereux (uncle)...

Мінськ-Мазовецький гето Країна  Республіка Польща Адміністративна одиниця Мінськ-Мазовецький Каталожний код ghettos/601 Координати: 52°10′45″ пн. ш. 21°34′19″ сх. д. / 52.17920000002777670° пн. ш. 21.57210000002777761° сх. д. / 52.17920000002777670; 21.57210000002777761 Мінськ-Мазовец...

 

Neighborhood of Manhattan in New York CityHudson HeightsNeighborhood of ManhattanThe highest point on Manhattan is in Bennett Park; the inset shows the marker seen on the lower right of the larger imageCountry United StatesState New YorkCityNew York CityBoroughManhattanPopulation • Total20,000 (2010)Time zoneUTC– 05:00 (Eastern) • Summer (DST)UTC– 04:00 (EDT)ZIP Codes10033 and 10040 Cabrini Boulevard in the snow (December 2013); north of the neighborhood'...

 

Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen sind unter Der Teufel mit den drei goldenen Haaren (Begriffsklärung) aufgeführt. Illustration von Otto Ubbelohde, 1909 Der Teufel mit den drei goldenen Haaren ist ein Märchen (ATU 930, 461). Es steht in den Kinder- und Hausmärchen der Brüder Grimm an Stelle 29 (KHM 29). In der 1. Auflage lautete der Titel Von dem Teufel mit drei goldenen Haaren. Inhaltsverzeichnis 1 Inhalt (ab der 2. Auflage) 2 Sprache und Textstruktur 3 Herku...

US military decoration AwardWorld War I Victory MedalObverseTypeService medalAwarded forservice between April 6, 1917, and November 11, 1918, or with either of the following expeditions: American Expeditionary Forces in European Russia between November 12, 1918, and August 5, 1919. American Expeditionary Forces Siberia between November 23, 1918, and April 1, 1920. DescriptionA medal of bronze 36 millimeters in diameter. On the obverse is a winged Victory standing full length and full face. On...

 

Bupati Labuhanbatu UtaraPetahanaHendri Yanto Sitorussejak 26 Februari 2021KediamanRumah Dinas Bupati Labuhanbatu UtaraDibentuk2008Pejabat pertamaDaudsyahSitus webhttp://www.labuhanbatuutarakab.go.id Berikut Daftar Bupati Kabupaten Labuhanbatu Utara: No Bupati Mulai menjabat Akhir menjabat Prd. Ket. Wakil Bupati — Daudsyah 2009 2009 — — — Azrin Naim 2009 2010 1 Khairuddin Syah Sitorus 2010 2015 1 Minan Pasaribu — M Zein Siregar 2015 2016 — (1) Khairuddin Syah Sitorus 17 Februa...

 

RhinolithSinar X dari sinus paranasal menunjukkan rhinolith.Informasi umumSpesialisasiPulmonologi  Rhinolith adalah kalkulus yang datang dalam rongga hidung. Kata ini berasal dari akar rhino- dan -lith, secara harfiah berarti batu hidung. Rhinolith merupakan hal medis yang sudah biasa, tidak perlu bingung dengan lendir kering di hidung. Sebuah Rhinolith biasanya terbentuk di sekitar inti dari benda asing eksogen, bekuan darah kecil atau sekresi oleh deposisi lambat, garam, kalsium, dan m...

صاروخ H-IIA يُطلق من مركز تانيغاشيما. مركز تانيغاشيما الفضائي   الاختصار (بالإنجليزية: TNSC)‏  البلد اليابان  الموقع الرسمي الموقع الرسمي  الإحداثيات 30°24′N 130°58′E / 30.4°N 130.97°E / 30.4; 130.97  تعديل مصدري - تعديل   مركز تانيغاشيما الفضائي (يابانية:種子島宇宙センタ

 

For other people with the same name, see George Brown (disambiguation). George V. BrownBrown with the militaryBornGeorge Vincent BrownOctober 21, 1880Hopkinton, Massachusetts, U.S.DiedOctober 17, 1937(1937-10-17) (aged 56)NationalityAmericanOccupationSports executiveKnown forBoston Marathon, ice hockey George Vincent Brown (21 October 1880 – 17 October 1937) of Hopkinton, Massachusetts, was an American sports official. He championed the development of various sports and sporting e...

 

Aviación del Noroeste IATA ICAO Callsign OC ANW AVINOR[1] Founded1988Ceased operations1995HeadquartersHermosillo, Mexico An Aviación del Noroeste Boeing 737-5Y0 (XA-SAS) at Mexico City International Airport Aviación del Noroeste S.A de C.V was a Mexican airline based in Hermosillo, Mexico.[2] It was shut down in 1995 and is currently defunct. History The airline was established in 1988 with two Fokker F27 Friendship turboprop aircraft, beginning with flights to the island d...

Kondisi kaki yang bengkak oleh karena edema, salah satu ciri-ciri pre-eklampsia Pre-eklampsia atau preeklampsia adalah sindrom yang ditandai dengan tekanan darah tinggi, kenaikan kadar protein di dalam urin (proteinuria), dan pembengkakan pada tungkai (edema).[1][2] Pre-eklampsia dialami oleh ibu yang sedang hamil, terutama para ibu muda yang baru pertama kali hamil.[1][2][3] Penyebab pasti pre-eklampsia belum diketahui sehingga masih sulit untuk dicega...

 

American television personality (born 1971) Rachel Campos-DuffyCampos-Duffy in 2021BornRachel Campos (1971-10-22) October 22, 1971 (age 52)Tempe, Arizona, U.S.Education Arizona State University, Tempe (BS) University of California, San Diego (MIA) OccupationTelevision personalityYears active1994–presentSpouse Sean Duffy ​(m. 1999)​Children9 Rachel Campos-Duffy[1] (born October 22, 1971) is an American conservative television personality. She fi...

 

Band discography Evermore discographyEvermore performing at the Big Day Out, 2007.Studio albums4Compilation albums2Video albums1Music videos23EPs6Singles16 The discography of New Zealand indie rock band Evermore, consists of four studio albums, two compilation albums, six extended plays, sixteen singles, one video album and twenty three music videos. Albums Studio albums List of studio albums, with selected chart positions and certifications Title Album details Peak chart positions Certificat...

School in Mitchell Park, South Australia, AustraliaSacred Heart College Champagnat CampusLocationMitchell Park, South AustraliaAustraliaCoordinates34°59′51″S 138°33′54″E / 34.99750°S 138.56500°E / -34.99750; 138.56500InformationTypeIndependent, co-educational secondary day and boarding schoolMottoLatin: Virtus Ubique Vincit(Courage Conquers All)Religious affiliation(s)Association of Marist Schools of AustraliaSouth Australian Commission for Catholic Schools...

 

Epson R-D1 Тип цифровой дальномерный фотоаппарат Производитель Seiko Epson Объектив сменный, крепление - байонет Leica M Матрица ПЗС-матрица 23,7×15,6 ммкроп-фактор 1,53 Разрешение 6,1 миллиона пикселей (3008×2000) Диапазон ISO 200-1600 ISO Экспозиция автомат с приоритетом диафрагмы, экспокоррекция ±...

 

Coordenadas: 49° N 32° E UcrâniaУкраїнаUkrayina Brasão de armas da Ucrânia Bandeira Brasão de armas Hino nacional: Ще не вмерла України ні слава, ні воля(Shche ne vmerla Ukrayiny ni slava, ni volya)A glória da Ucrânia ainda não morreu, nem a sua liberdade Gentílico: Ucraniano(a) Localização de UcrâniaLocalização da Ucrânia (em verde escuro)Territórios disputados com a Rússia antes da invasão de 2022 (em verde-claro) Capital Kiev 49°N 32...

Public school in Spotsylvania, Virginia, United StatesCourtland High SchoolAddress6701 Smith Station RoadSpotsylvania, Virginia 22553United StatesCoordinates38°13′54″N 77°33′07″W / 38.23167°N 77.55194°W / 38.23167; -77.55194InformationSchool typePublic high schoolFounded1980School districtSpotsylvania County Public SchoolsSuperintendentScott BakerPrincipalCliff Conway[1]Staff70.52 (FTE)[2]Grades9–12Enrollment1,555 (2019-2020)[2]...

 

Brazilian footballer In this Portuguese name, the first or maternal family name is Souza and the second or paternal family name is Lisboa. Yago Pikachu Yago Pikachu with Vasco da GamaPersonal informationFull name Glaybson Yago Souza LisboaDate of birth (1992-06-05) 5 June 1992 (age 31)Place of birth Belém, BrazilHeight 1.69 m (5 ft 6+1⁄2 in)Position(s) WingerTeam informationCurrent team Fortaleza (on loan from Shimizu S-Pulse)Number 27Youth career2001–2005 Tun...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!