Problem z plecakiem

W algorytmiki The Problem plecak , czasami oznaczany ( KP ) (od angielskiego Knapsack problem ) jest kombinatorycznej problem optymalizacji . Modeluje sytuację analogiczną do wypełnienia plecaka , który nie może utrzymać więcej niż określony ciężar , przy czym całość lub część danego zestawu przedmiotów ma wagę i wartość . Przedmioty wkładane do plecaka muszą maksymalizować całkowitą wartość, nie przekraczając maksymalnej wagi.

Historia

W badaniach

Problem plecaka jest jednym z 21 NP-Complete Problemów Richarda Karpa , przedstawionych w jego artykule z 1972 roku . Jest intensywnie badane od połowy XX -tego  wieku i istnieją odniesienia z 1897 roku , w artykule Jerzego Ballard Mathews  (w) . Sformułowanie problemu jest bardzo proste, ale jego rozwiązanie jest bardziej złożone. Istniejące algorytmy mogą rozwiązać duże praktyczne przypadki. Jednak osobliwa struktura problemu i fakt, że występuje on jako podproblem innych, bardziej ogólnych problemów, sprawiają, że jest to główny temat badań .

Złożoność i kryptografia

Ten problem jest podstawą pierwszego asymetrycznego (lub „klucza publicznego”) algorytmu szyfrowania przedstawionego przez Martina Hellmana , Ralpha Merkle'a i Whitfielda Diffiego na Uniwersytecie Stanforda w 1976 roku . Jednak mimo że pomysł zrodził się z problemu plecaka (od którego pochodzi nazwa algorytmu), jest on uważany za pierwszy prawdziwy asymetryczny algorytm szyfrowania tuż przed wydaniem RSA w następnym roku.

Wersja NP-difficile tego problemu została wykorzystana w prymitywach i protokołach kryptograficznych , takich jak kryptosystem Merkle-Hellmana lub kryptosystem Chor-Rivest . Ich przewagą w stosunku do asymetrycznych kryptosystemów, wynikającą z trudności faktoringu, jest szybkość szyfrowania i deszyfrowania. Jednak algorytm Hellmana, Merkle'a i Diffiego podlega algorytmicznym „tylnym drzwiom”, co oznacza, że ​​jest „zepsuty”, czyli poddany kryptoanalizacji . Problem plecaka jest klasycznym przykładem błędnego przekonania o związkach między NP-kompletnością a kryptografią. Następnie przedstawiono poprawioną wersję algorytmu z iteracją problemu plecaka, która ma zostać jak najszybciej złamana. Do tej pory wszystkie algorytmy szyfrowania asymetrycznego oparte na plecakach zostały złamane, a najnowszym jest algorytm Chor-Rivest.

Inne obszary objęte postępowaniem

Służy również do modelowania następujących sytuacji, czasami jako podproblem:

Innym powodem do zainteresowania się tym problemem jest jego pojawienie się w niektórych zastosowaniach metod generowania kolumn (np. W przypadku problemu   „ upakowania pojemników ).

Anegdotycznie, a tym samym uzasadniając nazwę problemu, turysta staje przed nim przygotowując się do wyprawy: plecak ma ograniczoną pojemność i dlatego trzeba zdecydować, czy wziąć np. Dwie puszki i pięćdziesięciocentymetrową tykwę, czy pojedyncza puszka i litrowa tykwa.

Oświadczenie matematyczne

Dane dotyczące problemu można wyrazić w kategoriach matematycznych. Obiekty są ponumerowane według indeksu i wahającego się od 1 do n . Liczby w i oraz p i reprezentują odpowiednio wagę i wartość numeru obiektu i . Pojemność worka oznaczona W .

Istnieje wiele sposobów na wypełnienie plecaka. Aby opisać jeden z nich, konieczne jest wskazanie dla każdego elementu, czy jest on pobrany, czy nie. Możemy zastosować kodowanie binarne: stan i-tego elementu będzie równy x i = 1, jeśli element zostanie umieszczony w woreczku, lub x i = 0, jeśli zostanie pozostawiony na boku. Jeden ze sposobów napełniania worka jest zatem całkowicie opisany przez wektor , zwany wektorem zawartym lub po prostu zawarty  :; a waga powiązana, jak również wartość związana z tym wypełnieniem, mogą być następnie wyrażone jako funkcja zawartego wektora.

Dla danej zawartości X , całkowita wartość zawarta w worku to naturalnie:

Podobnie suma wag wybranych obiektów to:

Problem można następnie przeformułować jako poszukiwanie zawartego wektora (składowe są równe 0 lub 1), realizując maksimum funkcji wartości całkowitej z ( X ) , pod warunkiem: (1) To znaczy, że suma wag wybranych przedmiotów nie przekracza pojemności plecaka.

Ogólnie rzecz biorąc, w celu uniknięcia pojedynczych przypadków dodaje się następujące ograniczenia:

Terminologia:

NP-kompletność

Problem plecaka można przedstawić w formie decyzyjnej, zastępując maksymalizację następującym pytaniem: dana liczba k , czy istnieje wartość, dla której w odniesieniu do ograniczenia? W jego postaci decyzyjnej, gdy liczby są reprezentowane w notacji binarnej, problem jest NP-zupełny , co oznacza, że ​​nie jest znana ogólna metoda konstruowania optymalnego rozwiązania, inna niż systematyczne badanie wszystkich rozwiązań. Problem optymalizacyjny jest NP-trudny, jego rozwiązanie jest co najmniej tak samo trudne jak rozwiązanie problemu decyzyjnego, a nie ma znanego algorytmu wielomianowego (wielomian w liczbie cyfr opisujących instancję), który mając rozwiązanie, może powiedzieć jeśli jest optymalny (co oznaczałoby stwierdzenie, że nie ma rozwiązania z większym k , a więc rozwiązać problem decyzyjny NP-zupełny).

Istnieje powiązanie między wersją "decyzyjną" a wersją "optymalizacyjną" problemu, ponieważ jeśli istnieje algorytm wielomianowy, który rozwiązuje wersję "decyzyjną", to możemy znaleźć maksymalną wartość dla problemu optymalizacji w sposób wielomianowy wykonując dychotomię w celu znalezienia k między 1 a i wywołując algorytm wielomianowy, który rozwiązuje wersję „decyzyjną” (uważaj, jeśli przejdziemy przez wszystkie wartości k od 1 do , otrzymamy algorytm wykładniczy w instancji rozmiar). Z drugiej strony, jeśli algorytm znajdzie optymalną wartość problemu optymalizacji w czasie wielomianowym, to problem decyzyjny można rozwiązać w czasie wielomianowym, porównując wartość rozwiązania uzyskanego przez ten algorytm z wartością k . Zatem obie wersje problemu mają podobne trudności.

Systematyczny proces eksploracji

Ten systematyczny przegląd można przeprowadzić przy użyciu drzewa eksploracji binarnych, takiego jak pokazane (trójkąty reprezentują poddrzewa).

Drzewo jest opisane przez zstępowanie od góry do dołu trójkątów (liści drzewa). Każde pole odpowiada jednej możliwej trasie. Postępując zgodnie ze wskazówkami podanymi wzdłuż krawędzi drzewa, każdej ścieżce odpowiada szereg wartości tworzących wektor zawarty. W każdej komórce można wtedy wprowadzić całkowitą wartość i całkowitą wagę odpowiedniej zawartości. Pozostaje tylko wyeliminować skrzynki, które nie spełniają tego ograniczenia, i wybrać spośród tych, które pozostają tym (lub jednym z nich), który nadaje największą wartość funkcji celu .

Za każdym razem, gdy obiekt jest dodawany do listy dostępnych obiektów, poziom jest dodawany do binarnego drzewa eksploracji, a liczba pól jest mnożona przez 2. Eksploracja drzewa i wypełnianie komórek ma zatem koszt, który rośnie wykładniczo wraz z liczba n obiektów.

Dowód kompletności NP

Ten dowód NP-kompletności został przedstawiony przez Michaila G. Lagoudakisa na podstawie artykułu Richarda Karpa i artykułu JE Savage'a.

Szczegóły dowodów

Dowód na NP-kompletność odbywa się za pomocą problemu plecaka w postaci problemu decyzyjnego. Odbywa się to w dwóch krokach, po pierwsze, aby sprawdzić, czy ( KP ) należy do klasy NP, a po drugie, aby pokazać, że ( KP ) jest NP-trudne.

Jako dowód przynależności do NP-difficile użyjemy sumy wersji podzbiorów (patrz warianty poniżej), oznaczonej ( SSE ), konkretnej wersji plecaka, w której zysk przedmiotu jest równy jego wadze. Jeśli ta konkretna wersja jest NP-trudna, to ( KP ) w całej swojej ogólności też jest.

Problem ( SSE ) można uzyskać z powyższego problemu plecaka, ustawiając w i = p i . Ustawiając W = k , otrzymujemy:

Znajdź X takie, że

Członkostwo w NP

Najpierw musimy udowodnić, że ( KP ) należy do klasy NP, to znaczy istnieje algorytm wielomianowy, który mając rozwiązanie problemu, może zweryfikować poprawność tego rozwiązania. Aby zweryfikować rozwiązanie, wystarczy obliczyć sumę mas wybranych obiektów i porównać ją z W , a także sumę ich wartości do porównania z k . Wszystko jest oczywiście wielomianowe.

Członkostwo w NP-difficile

Teraz chodzi o pokazanie, że ( SSE ) jest problemem NP-trudnym poprzez przekształcenie problemu dokładnego pokrycia (oznaczonego ( EC ), z angielskiego dokładnego pokrycia ) w problem ( SSE ). Problem ( EC ) wyraża się następująco:

Niech Ü zestaw elementów oraz zbiór podzbiorów U . Czy istnieje podzbiór S * od S takie, że:

Problem ( EC ) jest NP-zupełny. Pokazując, że dowolne wystąpienie ( EC ) można przekształcić wielomianowo w wystąpienie ( SSE ), udowodnimy, że (a zatem ( KP )) należy do klasy problemów NP-trudnych.

Niech I = ( U , S ) będzie dowolnym wystąpieniem ( EC ). Rozważymy to bez utraty ogólności . Zwrócimy uwagę:

stan zbioru S i ( x i = 1 wtedy i tylko wtedy, gdy ); przynależność wartości j do zbioru S i ( y ij = 1 wtedy i tylko wtedy ).

Albo . Zmienne problemu ( SSE ), to x i tego problemu ( WE ). Określamy ich wagę w następujący sposób:

.

Zdefiniujemy pojemność W wg

.

Waga obiektu i jest sumą potęg b i b j -1 pojawia się we w i wtedy i tylko wtedy, gdy . Dlatego istnieje zgodność jeden do jednego między rozwiązaniem skonstruowanego problemu ( SSE ) a instancją ( EC ). Każda wartość w i jest obliczana w O (| U |), a wartość W jest obliczana w O (1) . Transformacja ma zatem złożoność czasową w O ( n | U |) .

Przybliżona rozdzielczość

Podobnie jak w przypadku większości problemów NP-zupełnych, znalezienie wykonalnych, ale nie optymalnych rozwiązań może być interesujące. Najlepiej z gwarancją różnicy między wartością znalezionego rozwiązania a wartością rozwiązania optymalnego.

Wydajność przedmiotu nazywany jest stosunkiem wartości od jego wagi. Im większa wartość przedmiotu w stosunku do tego, co konsumuje, tym bardziej wydajny jest przedmiot.

Algorytm chciwy

Najprostszym algorytmem jest chciwy algorytm . Chodzi o to, aby priorytetowo dodawać najskuteczniejsze przedmioty, dopóki worek nie zostanie nasycony:

trier les objets par ordre décroissant d'efficacité w_conso := 0 pour i de 1 à n si w[i] + w_conso ≤ W alors x[i] := 1 w_conso := w_conso + w[i] sinon x[i] := 0 fin si fin pour Analiza zachłannego algorytmu

Oznaczymy przez z * wartość rozwiązań optymalnych.

Rozwiązanie X zwrócone przez chciwy algorytm może być możliwie niskiej jakości. Weźmy na przykład pod uwagę, że mamy tylko dwa przedmioty do umieszczenia w torbie. Pierwszy ma wzmocnienie 2 i masie 1, drugi ma przewagę i ciężar równy zarówno W . Pierwszym celem wynalazku jest bardziej skuteczny zostanie wybrana pierwsza i uniemożliwia odpływ z drugim, co daje wartość 1 jako roztworu optymalna jest biała . Istnieją zatem wartości problemu, dla których stosunek znalezionego rozwiązania do rozwiązania optymalnego jest jak najbardziej bliski zeru.

Istnieją inne algorytmy aproksymacyjne dla problemu plecakowego, które umożliwiają uzyskanie rozwiązania gwarantowanego w odległości k lub przy współczynniku ε optymalnej jakości rozwiązania. To znaczy, że rozwiązanie znalezione przez X jest takie, że lub . Złożoność czas z tych algorytmów jest na ogół funkcją odwrotności spodziewanej jakości; na przykład lub . Czas realizacji może być bardzo ważny.

Metaheurystyka

Metody metaheurystyczne , takie jak algorytmy genetyczne lub optymalizacje oparte na algorytmach kolonii mrówek , pozwalają uzyskać rozsądne przybliżenie przy jednoczesnym uniknięciu monopolizacji zbyt wielu zasobów.

Algorytm genetyczny

Te algorytmy genetyczne są często stosowane w trudnych problemów optymalizacyjnych jak plecak. Są stosunkowo łatwe w realizacji i pozwalają na szybkie uzyskanie satysfakcjonującego rozwiązania, nawet jeśli problem jest duży.

Tworzymy populację osób, których chromosomy symbolizują rozwiązanie problemu. Reprezentacja osoby jest binarna, ponieważ każdy przedmiot zostanie zatrzymany lub usunięty z torby. Liczba bitów w genomie każdego osobnika odpowiada liczbie dostępnych obiektów.

Optymalizacja przebiega zgodnie ze zwykłymi zasadami algorytmu genetycznego. Osobniki są oceniane, a następnie wybierane do reprodukcji najlepsze. Zgodnie z obranym przebiegiem operatory reprodukcji mogą być mniej lub bardziej złożone (cross-over), mogą również wystąpić mutacje (zamiana 0 na 1 lub odwrotnie). Możemy też zdecydować się na skopiowanie najlepszego osobnika dla następnego pokolenia (elitaryzm). Po określonej liczbie pokoleń populacja dąży do optymalnego, a nawet dokładnego rozwiązania.

Algorytmy oparte na koloniach mrówek

Koncepcja ta została wykorzystana do rozwiązania problemu wielowymiarowego plecaka, w którym musi być spełnionych kilka ograniczeń. Pierwsze algorytmy opierały się na idei algorytmu zachłannego: mrówki stopniowo wybierały najciekawsze obiekty. Ten dobór może się różnić, ale zawsze opiera się na śladach feromonów osadzonych przez mrówki, które warunkują kolejne wybory. Wśród proponowanych rozwiązań można wymienić osadzanie feromonów na najlepszych obiektach, osadzanie się na parach obiektów wstawianych jeden po drugim w roztworze czy też dodawanie feromonów na pary obiektów, niezależnie od kolejności wstawiania.

Synteza przeprowadzona przez badaczy tunezyjskich i francuskich wykazała, że ​​algorytm pozostawiania śladów na parach kolejno wybranych obiektów jest mniej skuteczny niż warianty skupiające się na obiekcie lub dowolnych parach. Jednak ulepszenia są nadal możliwe, ponieważ algorytmy te można łączyć z innymi metaheurystykami w celu uzyskania optymalnego rozwiązania.

Dokładna rozdzielczość

Problem plecaka w jego klasycznej wersji został dogłębnie zbadany. Obecnie istnieje wiele metod rozwiązania tego problemu. Większość z tych metod to ulepszona wersja jednej z poniższych metod.

Programowanie dynamiczne

Problem plecaka ma właściwość optymalnej podkonstrukcji , to znaczy, że możemy zbudować optymalne rozwiązanie problemu ze zmiennymi i z zadania ze zmiennymi i -1 . Użyj tej właściwości, aby użyć dynamicznej programowej metody rozstrzygania .

Oznaczymy przez KP ( i , c ) problem zredukowany do i zmiennych i pojemności c . Pomysł jest następujący:

Biorąc pod uwagę zmienną i oraz pojemność c , optymalnymi rozwiązaniami KP ( i , c ) są:

  • optymalne rozwiązania problemu ze zmiennymi i -1 o tej samej pojemności c (czyli KP ( i -1, c ) ), do których dodajemy  ;
  • optymalne rozwiązania problemu ze zmiennymi i -1 o pojemności c - w i (czyli KP ( i -1, c - w i ) ), do których dodajemy .

Problem plecaka o zmiennej zerowej ( KP (0, *) ) ma optymalne rozwiązanie o wartości zerowej.

Następnie konstruujemy tablicę T [i, c] zawierającą wartości optymalnych rozwiązań dowolnego problemu KP ( i , c ) w następujący sposób:

pour c de 0 à W faire T[0,c] := 0 fin pour pour i de 1 à n faire pour c de 0 à W faire si c>=w[i] alors T[i,c] := max(T[i-1,c], T[i-1, c-w[i]] + p[i]) sinon T[i,c] := T[i-1,c] fin si fin pour fin pour

Po skonstruowaniu tabeli wszystko, co musisz zrobić, to zacząć od pudełka T [n, W] i wydedukować stan obiektów, przechodząc do pudełka T [0, *].

Wynik dzięki metodzie rozwiązania do programowania dynamicznego
Pojemność worka 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Pudła Wartość worka
Wartość Waga
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 2 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 5 0 0 1 1 1 2 2 3 3 3 3 3 3 3 3 3
3 7 0 0 1 1 1 2 2 3 3 4 4 4 5 5 6 6
7 12 0 0 1 1 1 2 2 3 3 4 4 4 7 7 8 8
10 9 0 0 1 1 1 2 2 3 3 10 10 11 11 11 12 12

Algorytm ten ma czasową i przestrzenną złożoność w O ( nW ) . Jednak dodając algorytm dziel i zwyciężaj , możemy zmniejszyć zużycie pamięci do O ( n + W ) , a nawet, jeśli ważna jest tylko wartość rozwiązania optymalnego, do O ( W ) . Ma dwie zalety:

  1. szybko, jeśli ciężary są pełne, a pojemność worka jest umiarkowana.
  2. nie ma potrzeby sortowania zmiennych.

i wada:

  1. intensywna pamięć (w związku z tym brak rozwiązania dużych problemów).

Zauważ, że ten algorytm nie działa w czasie wielomianowym w odniesieniu do rozmiaru danych wejściowych. Rzeczywiście, złożoność jest proporcjonalna do pojemności worka W , jest wykładnicza w odniesieniu do jego kodowania. Jeśli wagi przedmiotów są dziesiętne , wymusza to pomnożenie wagi przedmiotów i pojemności torby, aby uzyskać całość. Ta operacja może następnie spowolnić działanie algorytmu.

To podejście pochodzi od Garfinkela i Nemhausera (1972).

Procedura separacji i oceny

Jak każdy problem kombinatoryczny, problem plecaka można rozwiązać za pomocą procedury separacji i oceny (PSE). Funkcja oceny węzeł składa się często w rozwiązaniu problemu w zmiennych ciągłych (patrz poniżej). Wdrożenie zaproponowane przez Martello i Totha (1990) stało się punktem odniesienia. Wyróżnia się:

Zaletą tej metody jest niskie zużycie pamięci .

Podejścia hybrydowe

Podejście hybrydowe nie jest tak naprawdę nową metodą rozwiązywania. Polega po prostu na połączeniu dwóch poprzednich metod w celu uzyskania wszystkich korzyści. Zazwyczaj zastosujemy PSE do głębokości wyszukiwania, przy której podproblem zostanie oceniony jako wystarczająco mały, aby można go było rozwiązać za pomocą programowania dynamicznego.

Prekursorami tego podejścia są Plateau i Elkihel (1985), a następnie Martello i Toth (1990). Od tego czasu wprowadzono inne ulepszenia.

Warianty

Przedstawiony dotychczas problem to, dokładniej, problem plecaka ze zmienną binarną ( 01KP ). W rzeczywistości jest to jedna z wielu odmian. Ta sekcja przedstawia te różne warianty. Szczegóły dotyczą dziedziny zmiennych, liczby wartości przedmiotów, liczby wymiarów torby itp. Te funkcje można również łączyć.

Zmienne ciągłe

Problem plecaka ze zmienną ciągłą ( LKP ) osiąga się poprzez usunięcie ograniczenia integralności zmiennych. To znaczy, że ktoś jest upoważniony do podjęcia tylko część obiektów w plecaku: . LKP należy do klasy P złożoności .

Oto algorytm obliczania optymalnego rozwiązania problemu LKP  :

trier les objets en ordre décroissant d'efficacité i := 1 w_dispo := W tant que w_dispo >= w[i] faire x[i] := 1 w_dispo := w_dispo - w[i] i := i + 1 fin tant que x[i] := w_dispo / w[i] tant que i < n faire i := i + 1 x[i] := 0 fin tant que

Należy zauważyć, że wartość optymalnego rozwiązania LKP jest co najwyżej równa dwukrotności wartości optymalnego rozwiązania odpowiedniego problemu KP :

Zmienne całkowite

W przypadku problemu plecaka ze zmiennymi całkowitymi rozważamy, że mamy kilka kopii każdego obiektu. Problem polega zatem na znalezieniu liczby kopii do wykonania dla każdego.

Jeśli liczba kopii jest ograniczona, będziemy mówić o plecaku w oprawie ( BKP ), w przeciwnym razie o plecaku bez ograniczeń ( UKP ). Problem BKP można bez trudu przekształcić w 01KP .

Wielowymiarowy plecak

Uważamy tutaj, że plecak ma wymiary d , gdzie d > 0 ( d-KP ). Na przykład możemy sobie wyobrazić pudełko. Każdy obiekt ma trzy wymiary i nie powinien przenikać do żadnego z wymiarów. Następnie ograniczenie (1) zastępuje się:

Praktyczne użycie

W praktyce wersja wielowymiarowa może służyć do modelowania i rozwiązywania problemu napełnienia pojemnika, którego objętość i maksymalne obciążenie są ograniczone.

Innym przykładem jest zarządzanie personelem. W wersji uproszczonej oceniamy produktywność lub kompetencje każdej osoby (jego „wagę” w problemie) i przypisujemy mu inne zmienne: koszt i dyspozycyjność. Każdy z tych parametrów określa wymiar plecaka. Na koniec określasz ograniczenia związane z Twoim projektem w odniesieniu do poprzednich parametrów: dostępny budżet i czas przeznaczony na wykonanie prac. Uchwała pozwala określić, kto powinien zostać zatrzymany do realizacji projektu.

Uniwersalny plecak

Wariant problemu polega na tym, że z obiektów posiadających kilka wartości, aby zmaksymalizować kilka funkcji celu, jest to problem plecaka wielocelowego ( MOKP ). W związku z tym wkraczamy w obszar optymalizacji wielocelowej .

Na przykład załóżmy, że zaczynamy firmę specjalizującą się w rejsach wycieczkowych . Aby dać się poznać, postanawiamy zaprosić znane osoby na pokład najpiękniejszej łodzi . Ta łódź nie może pomieścić więcej niż tonę pasażerów (będzie to stałe W ). Każdy pasażer ma masę ( w i ), rozgłos swoją popularnością ( s1
i
 : indeks popularności) i prosi o wynagrodzenie ( s2
i
 : wynagrodzenie ujemne). Naturalnie staramy się zmaksymalizować dostarczaną reklamę i zminimalizować całkowitą pensję do wypłaty (zmaksymalizować ujemną pensję). Ponadto chcemy, aby na łodzi znajdowało się jak najwięcej osób ( s3
i
= 1). Dlatego należy zmaksymalizować trzy kwoty.

W kategoriach matematycznych szukamy wektora X znanych osób spełniających problem:

  1. (zależy nam na maksymalnej popularności)
  2. (zminimalizować wynagrodzenie do wypłaty, tj. zmaksymalizować wynagrodzenie ujemne);
  3. (mieć jak najwięcej osób na łodzi)

pod ograniczeniami

 : łódź nie może tonąć.

Ogólnie rzecz biorąc, zastępujemy funkcję celu w pierwotnym problemie rodziną funkcji celu:

Plecak kwadratowy

Problem z plecakiem kwadratowym jest oznaczony przez QKP . Tutaj mamy dodatkowe wzmocnienie g ij, gdy dwa obiekty ( i i j ) są brane jednocześnie. Na przykład załóżmy, że chcemy zmaksymalizować jakość kawy podczas wyprawy z plecakiem. Możemy zrozumieć, że bardziej interesujące jest przyniesienie łyżki i cukru niż tylko jednego z nich.

Następnie zapisujemy funkcję celu:

Problem sumy podzbiorów lub sumy podzbiorów

Specyfika problemu sumy podzbiorów (w języku angielskim: suma podzbiorów ) polega na tym, że wartość i waga obiektów są identyczne ( p i = w i ). Jest to ważny problem z zakresu kryptografii , stosowany w kilku systemach generowania kluczy publicznych .

Plecak wielokrotnego wyboru

W przypadku problemu z plecakiem wielokrotnego wyboru ( MCKP ) obiekty są pogrupowane w klasy, a dla każdej klasy należy wziąć tylko jednego przedstawiciela.

Na przykład jesteśmy w trakcie tworzenia Twojego zestawu narzędzi . Jeśli masz pięć kluczy nastawnych , możesz wybrać najlżejszy, aby wziąć potężny młotek , lub wybrać najmocniejszy klucz i młotek z niższej półki, albo pójść na kompromis. Ogólna idea jest taka, że ​​nie możesz wziąć więcej niż jednego klucza ani więcej niż jednego młotka.

Jeśli obiekty są ułożone w k klas, oznaczymy zbiór indeksów obiektów należących do klasy j . Uważamy oczywiście, że obiekt należy tylko do jednej klasy. Sformułowanie problemu wygląda następująco:

pod ograniczeniami:

  • (nie przekraczamy pojemności worka);
  • (wybiera się co najwyżej jednego przedstawiciela każdej klasy).

Wielokrotny plecak

Problem z wieloma plecakami ( MKP ) polega na podzieleniu zestawu przedmiotów na wiele plecaków o różnej pojemności. Wartość przedmiotu zależy teraz od worka, w którym został umieszczony. Na przykład możemy uznać, że euro ma większą wartość na rachunku oszczędnościowym niż na rachunku bieżącym .

Jeśli mamy k plecaków, zanotujemy, czy przedmiot i jest umieszczony w torbie j . Sformułowanie problemu wygląda następująco:

pod ograniczeniami

  • (nie przekraczamy pojemności worków);
  • (przedmiot wkłada się tylko do torby).

Istnieje wariant tego problemu, w którym wszystkie torby mają taką samą pojemność, zaznaczono MKP-I .

Zobacz też

Powiązane artykuły

Bibliografia

(en) Hans Kellerer, Ulright Pferschy i David Pisinger, Knapsack Problems , Springer, 2004 ( ISBN  3-540-40286-1 ) .

Uwagi i odniesienia

  1. (w) Lenore Blum , Felipe Cucker, Michael Shub i Stephen Smale , Complexity and Real Computation , Springer ,2012( czytaj online ) , s.  13.
  2. (w) GB Mathews , „  O podziale liczb  ” , Proc. Natl. London Math. Soc. , vol.  28,1897, s.  486-490.
  3. (w) Kryptografia klucza publicznego , w „  Historii  ” projektu klasy Erica Roberta w college'u SophomoreIntelektualna ekscytacja informatyki ” na Uniwersytecie Stanforda . Odpowiednia publikacja to: RC Merkle i ME Hellman, Hiding Information and Receipts in Trap Door Knapsacks , Internal Symposium on Information Theory , Cornell University, Ithaca, Nowy Jork, październik 1977.
  4. Pascal Boyer, Mały towarzysz liczb i ich zastosowania , Paryż, Calvage i Mounet,2019, 648  str. ( ISBN  978-2-916352-75-6 ) , VI. Kryptografia, rozdz.  6 („Metoda plecakowa”), s.  538-539.
  5. (w) A. Shamir , A Wielomian-Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem , IEEE Transactions on Information Theory , Vol. IT-30, s.  699-704 , 1984. (pierwsze opublikowane w kwietniu 1982 ).
  6. (w) Knapsack Encryption Scheme Broken ,  wydział matematyki „  Math Matrix ” na State University of Ohio , v 1985 , vol. 1, nr 3.
  7. (w) S. Vaudenay, Kryptanaliza kryptosystemu Chor-Rivest .
  8. Na przykład, patrz (w) Kurt Eisemann, „  The trim problem  ” , Management Science , INFORMS flight.  3 n o  3,1957, s.  279-284.
  9. (w) Michail G. Lagoudakis, Problem plecakowy 0-1 - ankieta wprowadzająca 1996.
  10. (en) Optymalizacja Ant Colony dla problemu z powrotem w wielowymiarowej torbie .
  11. (en) U. Pferschy, "  Dynamiczne programowanie ponownie: ulepszanie algorytmów plecakowych  " , Informatyka. Archives for Scientific Computing , vol.  63, n o  4,1999, s.  419-430 ( czytaj online ).
  12. (w) RS Garfinkel i GL Nemhauser , Integer Pogramming , Nowy Jork, John Wiley & Sons ,1972( ISBN  978-0-471-29195-4 ).
  13. (en) Silvano Martello i Paolo Toth , Knapsack Problems: Algorithms and Computer Implementations , John Wiley & Sons ,1990, 296  str. ( ISBN  978-0-471-92420-3 ).
  14. (w) Gerard Plateau i Moussa Elkihel , "  Metoda hybrydowa dla problemu plecakowego 0-1  " , Methods Oper. Res. , vol.  49,1985, s.  277-293.
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">