Algorytmy pakowania bin Karmarkara-Karpa

Karmarkara -Karpa (KK) to kilka powiązanych algorytmów aproksymacji problemu pakowania w pojemniki . Problem pakowania w pojemniki polega na pakowaniu przedmiotów o różnych rozmiarach do pojemników o identycznej pojemności, tak aby całkowita liczba pojemników była jak najmniejsza. Znalezienie optymalnego rozwiązania jest trudne obliczeniowo . Karmarkar i Karp opracowali algorytm, który działa w czasie wielomianowym i znajduje rozwiązanie z co najwyżej pojemniki, gdzie OPT to liczba pojemników w optymalnym rozwiązanie. Opracowali także kilka innych algorytmów z nieco innymi gwarancjami aproksymacji i ograniczeniami czasu wykonywania.

Algorytmy KK uznano za przełom w badaniu pakowania pojemników: znane wcześniej algorytmy znalazły przybliżenie multiplikatywne, w którym liczba pojemników wynosiła co najwyżej r ⋅ O P T + s {\ dla niektórych stałych lub co najwyżej . Algorytmy KK jako pierwsze uzyskały przybliżenie addytywne.

Wejście

Dane wejściowe do problemu pakowania do pojemników to zestaw przedmiotów o różnych rozmiarach, a 1 ,... a n . Stosowana jest następująca notacja:

  • n - liczba elementów.
  • m - liczba różnych rozmiarów przedmiotów. Dla każdego i w 1,..., m :
    • s i to i -ty rozmiar;
    • n i to liczba elementów o rozmiarze s i .
  • B - rozmiar pojemnika.

Biorąc pod uwagę instancję I , oznaczamy:

  • OPT(I) = optymalne rozwiązanie instancji I .
  • FOPT( I ) = ( a 1 +...+ a n )/ B = teoretycznie optymalna liczba pojemników, gdy wszystkie pojemniki są całkowicie wypełnione przedmiotami lub ułamkami przedmiotów.

Oczywiście FOPT( I ) ≤OPT(I).

Schemat na wysokim poziomie

Algorytmy KK zasadniczo rozwiązują konfiguracyjny program liniowy :

.

Tutaj A jest macierzą o m wierszach. Każda kolumna A reprezentuje wykonalną konfigurację - multizbiór rozmiarów pozycji, taki, że suma wszystkich tych rozmiarów wynosi co najwyżej B . Zbiór konfiguracji to C . x jest wektorem o rozmiarze C. Każdy element x c z x reprezentuje liczbę przypadków użycia konfiguracji c .

  • Przykład : załóżmy, że rozmiary przedmiotów to 3,3,3,3,3,4,4,4,4,4, a B = 12. Wtedy jest C = 10 możliwych konfiguracji: 3333; 333; 33, 334; 3, 34, 344; 4, 44, 444. Macierz A ma dwa wiersze: [4,3,2,2,1,1,1,0,0,0] dla s=3 i [0,0,0,1,0, 1,2,1,2,3] dla s=4. Wektor n to [5,5], ponieważ istnieje 5 elementów każdego rozmiaru. Możliwym optymalnym rozwiązaniem jest x = [1,0,0,0,0,0,1,0,0,1], co odpowiada użyciu trzech pojemników o konfiguracjach 3333, 344, 444.

Istnieją dwie główne trudności w rozwiązaniu tego problemu. Po pierwsze, jest to program liniowy liczb całkowitych , który jest trudny obliczeniowo do rozwiązania. Po drugie, liczba zmiennych to C – liczba konfiguracji, która może być ogromna. Algorytmy KK radzą sobie z tymi trudnościami za pomocą kilku technik, z których część została już wprowadzona przez de-la-Vegę i Luekera. Oto ogólny opis algorytmu (gdzie jest oryginalną instancją):

  • 1-a. Niech instancją zbudowaną .
    • 2-a. Niech instancją zbudowaną z grupowania elementów i rozmiaru elementów w każdej grupie do najwyższego elementu w
      • 3-a. Skonstruuj program liniowy dla , bez ograniczeń integralności
        • 4. Oblicz (ułamkowe) rozwiązanie x dla odprężonego programu liniowego.
      • 3-b. Zaokrąglij x do rozwiązania całkowego dla .
    • 2-b. „Rozgrupuj” elementy, aby uzyskać rozwiązanie dla .
  • 1b. Dodaj małe elementy, aby uzyskać rozwiązanie dla .

Poniżej opisujemy po kolei każdy z tych kroków.

Krok 1. Usuwanie i dodawanie małych elementów

Motywacją do usuwania małych przedmiotów jest to, że gdy wszystkie przedmioty są duże, liczba przedmiotów w każdym pojemniku musi być mała, więc liczba możliwych konfiguracji jest (względnie) mała. Wybieramy pewną z pierwotnej instancji mniejsze niż . Niech będzie instancją Zauważ, że w może zawierać . Pakujemy opakowanie z

Teraz dodajemy małe przedmioty do istniejących pojemników w dowolnej kolejności, o ile jest miejsce. Kiedy w istniejących pojemnikach nie ma już miejsca, otwieramy nowy pojemnik (jak w pakowaniu pojemników z następnym dopasowaniem ). Niech będzie liczbą pojemników w końcowym opakowaniu. Następnie:

.

dowód . Jeśli żadne nowe pojemniki nie zostaną otwarte, liczba pojemników pozostaje . całkowity rozmiar co najmniej więc całkowity rozmiar instancji wynosi co najmniej . Dlatego , więc optymalne rozwiązanie potrzebuje co najmniej pojemniki. Więc . W szczególności, przyjmując g =1/ n , otrzymujemy:

,

ponieważ . Dlatego często przyjmuje się, że wszystkie pozycje są większe niż 1/ n .

Krok 2. Grupowanie i rozgrupowywanie elementów

Motywacją do grupowania elementów jest zmniejszenie liczby różnych rozmiarów elementów, zmniejszenie liczby ograniczeń w konfiguracji LP. Ogólny proces grupowania to:

  • Uporządkuj produkty według malejącego rozmiaru.
  • Podziel elementy na grupy.
  • Dla każdej grupy zmodyfikuj rozmiar wszystkich elementów w grupie do największego rozmiaru w grupie.

Istnieje kilka różnych metod grupowania.

Grupowanie liniowe

Niech będzie parametrem całkowitym. największe w grupie 1; kolejne w grupie 2; i tak dalej (ostatnia grupa może mieć mniej niż . Niech będzie pierwotną Niech będzie pierwszą grupą (grupą największych elementów) i instancja pierwszej grupy . Następnie:

  • W wszystkie elementy mają ten sam rozmiar. W liczba różnych rozmiarów wynosi .
  • ponieważ grupa 1 dominuje w grupie 2 wszystkie k pozycji w grupie 1 jest większych niż k pozycji w grupie 2); podobnie grupa 2 w grupą 3 itd
  • możliwe jest spakowanie każdego elementu w jednym pojemniku.

Dlatego . Rzeczywiście, biorąc pod uwagę rozwiązanie { pojemnikami z najwyżej

Grupowanie geometryczne

Niech będzie parametrem całkowitym. Grupowanie geometryczne przebiega w dwóch krokach:

  • Podziel instancję na kilka instancji tak, aby w każdym przypadku , wszystkie rozmiary mieszczą się w przedziale . Zauważ, że jeśli wszystkie elementy w co najmniej wtedy liczba wystąpień wynosi co najwyżej .
  • W każdym przypadku wykonaj zaokrąglenie liniowe z parametrem . Niech będą wynikowymi przypadkami. Niech i .

Następnie liczba różnych rozmiarów jest ograniczona w następujący sposób:

  • dla wszystkich r , i . elementy w większe niż , mamy , więc . Sumowanie wszystkich r daje .

Liczba pojemników jest ograniczona w następujący sposób:

  • dla wszystkich r , - ponieważ ma a wszystkie są mniejsze niż , więc można je zapakować co najwyżej pojemniki.
  • Dlatego .
  • Dlatego .

Alternatywne grupowanie geometryczne

Niech będzie parametrem całkowitym. Uporządkuj produkty według malejącego rozmiaru. Podziel je na grupy w taki sposób, aby całkowity rozmiar w każdej grupie wynosił co najmniej . Ponieważ rozmiar każdego elementu jest mniejszy niż B , liczba elementów w każdej grupie wynosi co najmniej . Liczba pozycji w każdej grupie nieznacznie rośnie. Jeśli wszystkie elementy są większe niż , to liczba elementów w każdej grupie wynosi najwyżej . W każdej grupie tylko większe elementy są zaokrąglane w górę. Można to zrobić tak, że:

  • .
  • .

Krok 3. Konstruowanie LP i zaokrąglanie rozwiązania

Rozważamy konfiguracyjny program liniowy bez ograniczeń integralności:

.

Tutaj możemy użyć ułamkowej liczby każdej konfiguracji.

  • Przykład : załóżmy, że jest 31 elementów o rozmiarze 3 i 7 elementów o rozmiarze 4, a rozmiar pojemnika to 10. Konfiguracje to: 4, 44, 34, 334, 3, 33, 333. Ograniczenia to [0,0 ,1,2,1,2,3]* x =31 i [1,2,1,1,0,0,0]* x =7. Optymalnym rozwiązaniem ułamkowego LP jest [0,0,0,7,0,0,17/3] To znaczy: jest 7 pojemników o konfiguracji 334 i 17/3 pojemników o konfiguracji 333. Zauważ, że tylko dwie różne konfiguracje są potrzebne.

Oznacz optymalne rozwiązanie programu liniowego przez LOPT. Oczywiste są następujące zależności:

  • FOPT(I) ≤ LOPT(I), ponieważ FOPT(I) to (prawdopodobnie ułamkowa) liczba pojemników, gdy wszystkie pojemniki są całkowicie wypełnione przedmiotami lub ułamkami przedmiotów. Oczywiście żadne rozwiązanie nie może być bardziej wydajne.
  • LOPT(I) ≤ OPT(I), ponieważ LOPT(I) jest rozwiązaniem problemu minimalizacji z mniejszą liczbą ograniczeń.
  • OPT(I) < 2*FOPT(I), ponieważ w dowolnym opakowaniu z co najmniej 2 pojemnikami*FOPT(I) suma dwóch najmniej zapełnionych pojemników wynosi co najwyżej B , więc można je połączyć w jeden pojemnik .

Rozwiązanie ułamkowego LP można zaokrąglić do rozwiązania całkowego w następujący sposób.

Załóżmy, że mamy rozwiązanie x dla ułamka LP. Zaokrąglamy x do rozwiązania dla całkowego ILP w następujący sposób.

  • Niech x będzie optymalnym podstawowym możliwym rozwiązaniem ułamkowego LP. Załóżmy, że jako { być liczba ułamkowa). Ponieważ ułamkowy LP ma m ograniczeń (po jednym dla każdego odrębnego rozmiaru), x ma co najwyżej m zmiennych niezerowych, to znaczy co najwyżej m stosowane są różne konfiguracje. Konstruujemy z x opakowanie integralne składające się z części głównej i części szczątkowej .
  • Główna część zawiera kosze floor( x c ) każdej konfiguracji c , dla której x c > 0.
  • Dla części resztkowej (oznaczonej przez R ) konstruujemy dwa opakowania kandydujące:
    • Pojedynczy przedział każdej konfiguracji c , dla której x c > 0; w sumie potrzebnych jest m pojemników.
    • Pakowanie zachłanne, z mniej niż 2 pojemnikami*FOPT( R ) (ponieważ jeśli są co najmniej 2 pojemniki*FOPT( R ), dwa najmniejsze można połączyć).
  • Najmniejsze z tych opakowań wymaga min( m , 2*FOPT( R )) ≤ średnia ( m , 2*FOPT( R )) = FOPT(R) + m /2.
  • głównej części daje . [ wymagane wyjaśnienie ]
  • Czas wykonania tego algorytmu konwersji wynosi O( n log n ).

Oznacza to również, że .

Krok 4. Rozwiązanie ułamkowego LP

Głównym wyzwaniem w rozwiązaniu ułamkowego LP jest to, że może on mieć ogromną liczbę zmiennych - zmienną dla każdej możliwej konfiguracji.

Podwójny LP

Podwójny program liniowy ułamkowego LP to:

.

Ma m zmiennych i ograniczenia C - ograniczenie dla każdej konfiguracji. Ma następującą interpretację ekonomiczną. Dla każdego rozmiaru s powinniśmy określić nieujemną cenę . Nasz zysk to łączna cena wszystkich przedmiotów. Chcemy maksymalizować zysk n y z zastrzeżeniem ograniczeń, że łączna cena przedmiotów w każdej konfiguracji wynosi co najwyżej 1. Ten LP ma teraz tylko m zmiennych, ale ogromną liczbę ograniczeń. Nawet wymienienie wszystkich ograniczeń jest niewykonalne.

Na szczęście możliwe jest rozwiązanie problemu z dowolną precyzją bez wymieniania wszystkich ograniczeń, używając wariantu metody elipsoidalnej . Ten wariant otrzymuje jako dane wejściowe wyrocznię separacji : funkcję, która przy danym wektorze y ≥ 0 zwraca jedną z następujących dwóch opcji:

  • Twierdź, że y jest wykonalne, to znaczy ; Lub -
  • Twierdź, że y jest niewykonalne i zwróć określone ograniczenie, które zostało naruszone, to znaczy wektor a taki, że za .

Metoda elipsoidy zaczyna się od dużej elipsoidy, która zawiera całą wykonalną domenę . Na każdym kroku t bierze środek bieżącej elipsoidy i wysyła go do wyroczni separacji:

  • Jeśli wyrocznia mówi, że to wykonujemy „cięcie optymalności”: wycinamy z elipsoidy wszystkie punkty y , dla których . Te punkty zdecydowanie nie są optymalne.
  • Jeśli wyrocznia mówi, że narusza ograniczenie a , to wykonujemy „cięcie wykonalności”: wycinamy z elipsoidy wszystkie punkty y , dla których . Te punkty są zdecydowanie niewykonalne.

Po wykonaniu cięcia konstruujemy nową, mniejszą elipsoidę. Można wykazać, że proces ten zbiega się do rozwiązania przybliżonego, w czasie wielomianu z wymaganą dokładnością.

Wyrocznia separacji dla podwójnego LP

Dano nam kilka m liczb nieujemnych . Musimy zdecydować między dwiema opcjami:

  • możliwej konfiguracji suma tej konfiguracji wynosi co najwyżej 1 oznacza to, że y jest wykonalne.
  • Istnieje wykonalna konfiguracja, dla której suma 1; oznacza to, że y jest niewykonalne. W takim przypadku również musimy zwrócić konfigurację.

Ten problem można rozwiązać, rozwiązując problem plecakowy , gdzie wartości przedmiotów to , wagi przedmiotów to , a nośność to B (rozmiar pojemnika).

  • Jeśli całkowita wartość optymalnego rozwiązania plecakowego wynosi co najwyżej 1, to mówimy, że y jest wykonalne.
  • Jeśli całkowita wartość optymalnego rozwiązania plecakowego jest większa niż 1, to mówimy, że y jest niewykonalne, a elementy w optymalnym rozwiązaniu plecakowym odpowiadają konfiguracji, która narusza ograniczenie (ponieważ dla wektora a odpowiadającego tej konfiguracji).

dynamicznego w czasie pseudowielomianowym: to liczba wejść, a to liczba możliwych Aby otrzymać algorytm czasu wielomianowego, możemy w przybliżeniu rozwiązać problem plecakowy, stosując zaokrąglanie danych wejściowych. Załóżmy, że chcemy rozwiązania z tolerancją . Możemy zaokrąglić każdy z w dół do najbliższej wielokrotności / n . Wtedy liczba możliwych wartości między 0 a 1 wynosi n / , a czas wykonania to . Rozwiązaniem jest co najmniej rozwiązanie optymalne minus / n .

Metoda elipsoidalna z przybliżoną wyrocznią separacji

Metodę elipsoidalną należy dostosować do stosowania przybliżonej wyroczni separacji. Biorąc pod uwagę obecny środek elipsoidy :

  • Jeśli przybliżona wyrocznia zwróci rozwiązanie o wartości większej niż 1, to niewykonalne, a rozwiązanie odpowiada konfiguracji, która narusza a . Wykonujemy „cięcie wykonalności” w elipsoidę wszystkie punkty y , dla których .
  • rozwiązanie o wartości co najwyżej 1, to może być wykonalne lub nie, ale zaokrąglone w dół (oznacz to przez . Z definicji zaokrąglenia wiemy, że . Nadal wykonujemy „cięcie optymalności” w z elipsoidy wszystkie punkty dla których . Zauważ, że , więc jego wartość może być większa niż OPT. Dlatego możemy usunąć niektóre punkty, których cel jest optymalny. Jednak usunięte punkty spełniają [ potrzebne wyjaśnienie ] ; żaden punkt nie zostanie usunięty, jeśli jego przekroczy wartość o więcej niż .

Korzystanie z przybliżonej wyroczni separacji daje wykonalne rozwiązanie y * dla podwójnego LP, gdzie , po co najwyżej , gdzie . Całkowity czas działania metody elipsoidalnej z przybliżoną wyrocznią separacji wynosi .

Eliminacja ograniczeń

Podczas metody elipsoidy używamy co najwyżej ograniczeń Q postaci za . Wszystkie inne ograniczenia można wyeliminować, ponieważ nie mają one wpływu na wynik y* metody elipsoidalnej. Możemy wyeliminować jeszcze więcej ograniczeń. Wiadomo, że w każdym LP z m zmiennymi istnieje zbiór m ograniczeń wystarczających do wyznaczenia optymalnego rozwiązania (czyli optymalna wartość jest taka sama, nawet jeśli tylko te m stosowane są ograniczenia). Możemy wielokrotnie uruchamiać metodę elipsoidalną jak powyżej, za każdym razem próbując usunąć określony zestaw ograniczeń. Jeśli wynikowy błąd jest co najwyżej trwale usuwamy te ograniczenia. Można _ wynosi co najwyżej . Jeśli spróbujemy zestawów ograniczeń deterministycznie, to w najgorszym przypadku jedna z m prób się powiedzie, więc musimy uruchomić metodę elipsoidy co najwyżej razy. Jeśli wybierzemy ograniczenia do usunięcia losowo, to oczekiwana liczba iteracji to .

Wreszcie mamy zredukowany podwójny LP, z tylko m zmiennymi i m ograniczeniami. Optymalna wartość zredukowanego LP to ≈ .

Rozwiązanie pierwotnego LP

Zgodnie z twierdzeniem o dualności LP minimalna wartość pierwotnego LP jest równa maksymalnej wartości podwójnego LP, którą oznaczyliśmy przez LOPT. Gdy mamy zredukowany podwójny LP, bierzemy jego podwójny i bierzemy zredukowany pierwotny LP. Ten LP ma tylko m zmiennych - odpowiadających tylko m z konfiguracji C. Maksymalna wartość zredukowanego podwójnego LP wynosi co najmniej . Można to pokazać [ wymagane wyjaśnienie ] że optymalnym rozwiązaniem zredukowanego pierwotnego LP jest co najwyżej . . Rozwiązanie zapewnia niemal optymalne pakowanie pojemników przy użyciu maksymalnie m konfiguracji.

Całkowity czas działania algorytmu deterministycznego, gdy wszystkie elementy są większe niż , wynosi:

,

Oczekiwany całkowity czas działania losowego algorytmu to: .

Algorytmy od końca do końca

Karmarkar i Karp przedstawili trzy algorytmy wykorzystujące powyższe techniki o różnych parametrach. Czas działania wszystkich tych algorytmów zależy od funkcji jest wielomianową opisującą czas potrzebny do rozwiązania ułamkowego h 1, czyli dla wersji deterministycznej .

Algorytm 1

Niech stałą reprezentującą pożądaną dokładność

  • 1-a. Ustaw sol . Niech instancją zbudowaną z niż g .
    • 2-a. Ustaw . Niech instancją zbudowaną z z parametrem k niech pozostałą instancją (grupą k elementów) Zauważ, że .
      • 3-a. Skonstruuj program liniowy dla , bez ograniczeń integralności
        • Oblicz rozwiązanie x dla , z tolerancją h = . Rezultatem _ Czas działania to .
      • 3-b. Zaokrąglij x do rozwiązania całkowego dla . Dodaj najwyżej Całkowita liczba pojemników to .
    • 2-b. Zapakuj elementy w , używając co najwyżej k pojemników; zdobądź opakowanie . Liczba pojemników to .
  • 1b. Dodaj elementy mniejsze niż g aby uzyskać rozwiązanie . Liczba pojemników to: .

W sumie liczba pojemników jest w i bieg -czas jest w . Wybierając P .

Algorytm 2

Niech parametrem rzeczywistym, a całkowitym, który zostanie określony później.

  • 1-a. Niech instancją zbudowaną z niż g .
  • 2. Podczas gdy wykonaj:
    • 2-a. Wykonaj alternatywne grupowanie geometryczne z parametrem k . Niech i niech instancją Mamy .
      • 3-a. Skonstruuj program liniowy dla , bez ograniczeń integralności
        • Oblicz rozwiązanie x dla , z tolerancją h = . Rezultatem _ Czas działania to .
      • 3-b. Zaokrąglij x do rozwiązania całkowego dla . Nie dodawaj przedziałów dla części ułamkowej. Zamiast tego po prostu wyjmij spakowane elementy z .
    • 2-b. elementy do co najwyżej .
  • 2. Raz , pozostałe pozycje chciwie spakuj do co najwyżej pojemniki.
    • W każdej iteracji pętli w kroku 2 ułamkowa część x ma co najwyżej m ( K ) wzorców, więc . FOPT spada o współczynnik k w każdej iteracji, więc liczba iteracji wynosi co najwyżej .
    • Dlatego całkowita liczba pojemników używanych : .
  • 1b. Dodaj elementy mniejsze niż g aby uzyskać rozwiązanie . Liczba pojemników wynosi: .

Czas wykonania jest w .

Teraz, jeśli wybierzemy k = 2 i g = 1/FOPT (I), otrzymamy:

,

i stąd:

,

więc całkowita liczba pojemników wynosi . Czas wykonania to .

Ten sam algorytm może być używany z różnymi parametrami, aby uzyskać kompromis między czasem wykonywania a dokładnością. Dla jakiegoś parametru = i . Następnie opakowanie potrzebuje co najwyżej , a czas wykonywania jest w .

Algorytm 3

Trzeci algorytm jest przydatny, gdy liczba rozmiarów m jest mała (patrz także pakowanie bin o dużej wielokrotności ).

  • 1-a. Ustaw sol . Niech instancją zbudowaną z niż g .
  • Jeśli to:
    • 3-a. Skonstruuj program liniowy dla , bez ograniczeń integralności
      • Oblicz rozwiązanie x dla , z tolerancją h = . Rezultatem _ Czas działania to .
    • 3-b. Zaokrąglij x do rozwiązania całkowego dla . Nie dodawaj przedziałów dla części ułamkowej. Zamiast tego po elementy z .
  • Uruchom krok 2 algorytmu 2 na pozostałych elementach.
  • 1-b. Dodaj elementy mniejsze niż g aby uzyskać rozwiązanie . Liczba pojemników wynosi: .

Wykorzystuje _ .

Ulepszenia

Techniki KK zostały później ulepszone, aby zapewnić jeszcze lepsze przybliżenia.

Rothvoss używa tego samego schematu co algorytm 2, ale z inną procedurą zaokrąglania w kroku 2. Wprowadził krok „sklejania”, w którym małe elementy są sklejane w celu uzyskania jednego większego elementu. To klejenie można wykorzystać do zwiększenia najmniejszego rozmiaru elementu do około . Gdy wszystkie rozmiary są co najmniej , możemy zastąpić w gwarancji algorytmu 2 i uzyskaj:

,

co daje za pojemniki.

Hoberg i Rothvoss stosują podobny schemat, w którym przedmioty są najpierw pakowane do „kontenerów”, a następnie pojemniki są pakowane do pojemników. Ich _