Adam Stawowy Algorytm hybrydowy dla problemu pakowania Summary: We present a meta-heuristic to combine simulated annealing (SA) with local search technique for Bin Packing Problem. The main idea is to embed local search algorithm into SA so that the chain explores only local optima. Tests on instances from Beaysley's library quantify the power of the technique. 1. Wprowadzenie Problem pakowania pudełek (ang. Bin Packing Problem - BPP) ma wielkie znaczenie praktyczne, stąd jest szeroko badany przez teoretyków i praktyków zarządzania. Najlepszy algorytm dla tego zagadnienia - GGA (ang. Grouping Genetic Algorithm) został opracowany przez E. Falkenauera [2] dla potrzeb przemysłu metalowego. Prace nad tworzeniem i badaniem algorytmów dla trudnych problemów optymalizacji kombinatorycznej zmierzają w dwóch kierunkach. Pierwszy stawia sobie za cel opracowanie algorytmów rozwiązujących dokładnie problemy o coraz większych rozmiarach. Jednakże idą z tym w parze coraz większe nakłady obliczeniowe, czemu sprzyja dokonujący się nieustannie postęp w technice komputerowej. Praktycy uważają te algorytmy za zbyt trudne, czasochłonne i niestabilne (nie dają dokładnych rozwiązań dla problemów o różnych rozmiarach). W konsekwencji daje się zauważyć drugi kierunek zmierzający do znalezienia prostych i szybkich heurystyk dających dobre (niekoniecznie optymalne) rozwiązania, o zagwarantowanej jakości. Praca niniejsza jest próbą połączenia tych dwóch trendów: nasz algorytm ma dawać rozwiązania optymalne lub niewiele od niego odbiegające, bez wielkich nakładów obliczeniowych. Co więcej algorytm powinien dawać rozwiązania prawie powtarzalne o zagwarantowanej dokładności tak, by w dowolnym momencie procesu obliczeniowego można było stwierdzić, o ile aktualny wynik odbiega od optymalnego. Ma to niebagatelne znaczenie praktyczne, gdy istniejące ograniczenia mogą narzucić przerwanie obliczeń po zadanym okresie czasu. dr inż., Wydział Zarządzania, Akademia Górniczo-Hutnicza, Kraków
2. Problem pakowania pudełek Problem pakowania pudełek (ang. Bin Packing Problem - BPP) należy do dużej rodziny zagadnień grupowania elementów, które polegają na podziale zbioru elementów na rozdzielne podzbiory. Problemy te należą do NP-trudnych problemów optymalizacji kombinatorycznej. BBP formułujemy następująco: mamy n niepodzielnych obiektów, każdy o wadze (wartości) wi, (1 i n) oraz n pudełek (ang. bins) każde o pojemności C (wi<c); należy tak rozmieścić obiekty w pudełkach, by liczba użytych pudełek była minimalna, przy założeniu, że pojemność pudełek nie będzie przekroczona. Proste algorytmy rozwiązujące w sposób przybliżony problem pakowania pudełek podali Garey i Johnson [6]; spośród nich algorytm First Fit Decreasing (FFD), daje w wyniku rozwiązanie nie gorsze niż 22% od rozwiązania optymalnego. W 1990 roku Martello i Toth zaproponowali algorytm przeglądu z nawrotami osiągając bardzo dobre rezultaty. W ostatnim okresie trwają intensywne prace nad zastosowaniem algorytmów ewolucyjnych do różnych problemów optymalizacji kombinatorycznej. W przypadku BBP pojawił się specjalizowany algorytm genetyczny Falkenauera GGA [3] bazujący na specjalizowanej reprezentacji problemu oraz specjalnie skonstruowanych operatorach pseudogenetycznych. 3. Algorytm CLO dla zagadnienia pakowania pudełek Nasze poprzednie prace skupiały się na wykorzystaniu algorytmów ewolucyjnych dla analizowanego problemu [5]. Stosowane algorytmy dawały bardzo dobre rezultaty, jednakże dla części problemów testowych dawały wyniki zbliżone do algorytmu konstrukcyjnego FFD, co nie jest wynikiem zadowalającym. Dalsze prace musiałyby doprowadzić do znacznego skomplikowania algorytmu, co nie jest zgodne z naszymi zapatrywaniami na to, w jaki sposób konstruować dobre algorytmy. Stąd próba wykorzystania nowego podejścia tj. mataheurystyki o nazwie łańcuchowa optymalizacja lokalna (ang. CLO - Chained Local Optimization) przedstawionej przez Martina i Otto dla problemu komiwojażera [4]. Podstawowym założeniem techniki CLO jest ograniczenie przestrzeni badanych rozwiązań do obszaru lokalnych optimów; samo przeszukiwanie odbywa się na zasadzie łańcuchów Markowa. Proces ten schematycznie przedstawia rysunek 1.
Funkcja kryterium Rozwiązanie pośrednie Optymalizacja lokalna Perturbacja Stan i Stan i+1 Dopuszczalne rozwiązania Rys. 1 Schematyczne przedstawienie procedury łańcuchowej optymalizacji lokalnej Źródło: opracowanie własne na podstawie [4] Załóżmy, że Stan i oznacza lokalne optimum osiągnięte w kroku i. Po wykonaniu silnie zaburzającego ruchu (nazwanego tu perturbacją) osiągamy rozwiązanie pośrednie, które poprawiane jest przy użyciu wybranego algorytmu optymalizacji lokalnej. W konsekwencji przechodzimy do rozwiązania w stanie i+1, które poddawane jest procedurze testowej identycznej jak w algorytmie symulowanego wyżarzania. Jeśli rozwiązanie zostanie zaakceptowane, staje się nowym rozwiązaniem startowym, w przeciwnym razie - wracamy do stanu i. W przeciwieństwie do symulowanego wyżarzania procedura testowa wykonywana jest dla lokalnego optimum, a nie dla każdego kolejno wygenerowanego rozwiązania. Przyśpiesza to działanie algorytmu i zapewnia ominięcie nieefektywnych fragmentów przestrzeni przeszukiwań. Dla prawidłowego działania, algorytm CLO potrzebuje dobrej techniki lokalnego przeszukiwania oraz wyboru ruchu perturbacyjnego. Oba zagadnienia są specyficzne dla rozpatrywanego problemu. W przypadku BPP nie istnieje dobra technika optymalizacji lokalnej, stąd wykorzystano propozycję Falkenauera [3]. Algorytm ten polega na wykreśleniu z rozwiązania wylosowanych grup i ponownym włączeniu skreślonych obiektów do niepełnych pudełek. Gdy dalsze włączanie nie jest możliwe, dla pozostałych obiektów stosowany jest algorytm FFD w celu uzyskania prawidłowego rozwiązania. W przypadku ruchu perturbacyjnego zdecydowano się na ruch typu wstawianie (insertion). Pozostałe elementy algorytmu przedstawiono poniżej.
Reprezentacja rozwiązania problemu Dopuszczalne rozwiązania są reprezentowane w sposób proponowany przez nas dla strategii ewolucyjnej [5] tj. przez listę n elementów i s separatorów grup, przy czym wartość j (1 j n) określająca numer elementu może wystąpić na liście tylko jeden raz, podobnie jak wartość i (n+1 i n+s) określająca numer separatora. W algorytmie przyjęto s = ROUND(0.7*n). Tak więc dla 7 elementów i 3 separatorów grup, rozwiązanie postaci R1 = (1,3,9,8,5,2,7,10,6,4) oznacza, że elementy spakowane są do trzech pudełek (1,3), (5,2,7) i (6,4), natomiast rozwiązanie R2 = (1,10,3,8,5,2,9,7,6,4) oznacza, że elementy mieszczą się w czterech pudełkach (1), (3), (5,2) i (7,6,4). Ruchowi perturbacyjnemu podlegają zarówno elementy jak i separatory. Sposób generowania rozwiązania początkowego Populację początkową stanowi rozwiązanie otrzymane algorytmem FF [6]. Postać funkcji dopasowania FD W algorytmie maksymalizowano następującą funkcję: gdzie: N - liczba grup w danym rozwiązaniu, F i - suma wag elementów upakowanych w pudełku i, i=1,..., N, C - pojemność pudełka, s - stała kary, taka że: 1 jeśli Fi C s 1000 jeśli Fi C Kryterium akceptacji Rozwiązania lepsze od startowego w danym kroku są bezwzględnie akceptowane, natomiast gorsze są akceptowane z prawdopodobieństwem zależnym od względnej różnicy wartości funkcji kryterium: P N i 1 2 Fi s C N FDSt FD 0.0001 (2) FD akcp 1 (1)
4. Badania eksperymentalne Do badań wzięto 8 zestawów po 20 przykładowych problemów zawartych w bibliotece Beasley a [1]. Problemy te podzielone są na dwie grupy: elementy o wagach wylosowanych z rozkładu równomiernego z przedziału [20..100] mają być umieszczone w pudełkach o rozmiarach 150, przy czym liczba elementów wynosi 120, 250, 500 i 1000, elementy o wartościach z przedziału [0,25..0,50] mają być umieszczone w pudełkach o rozmiarach 1, przy czym liczba elementów wynosi 60, 120, 249 i 501, z czego 1/3 ma duże wagi a 2/3 - małe (poniżej 1/3 rozmiaru pudełka). Dla każdego zestawu danych wykonywano trzy przebiegi, z których wybierano najlepsze rozwiązanie. W jednym przebiegu algorytm badał 450 000 rozwiązań, co stanowi znikomą część przestrzeni poszukiwań i jest wartością porównywalną ze stosowaną przez Khuriego i zespół (1000 generacji po 500 rozwiązań) w ich algorytmie [3]. Ogólnie rzecz biorąc problemy oznaczone binpack1-binpack3 oraz binpack5-binpack7 okazały się łatwe dla naszego algorytmu: w każdym przypadku osiągano rozwiązania optymalne. W tabeli 1 zaprezentowano wyniki osiągnięte przez znane algorytmy przybliżone dla 2 pozostałych zestawów z biblioteki Beasley a: binpack4 dla 1000 elementów oraz binpack8 dla 501 elementów, które stanowią największe i najtrudniejsze problemy odpowiednio z pierwszej i drugiej grupy zestawów. W zestawieniu nie ujęto propozycji Khuriego i zespołu ze względu na znacząco gorsze wyniki osiągane przez ten algorytm w porównaniu z innymi. Wyniki badań potwierdziły dominację algorytmu GGA Falkenauera, szczególnie dla problemów o dużych rozmiarach. Algorytmy Martello i Totha oraz FFD radzą sobie dobrze z problemami pierwszej grupy, natomiast zawodzą dla trudniejszych - wg Falkenauera - problemów drugiej grupy. Algorytm CLO daje tylko nieznacznie gorsze wyniki niż GGA Falkenauera, dominując nad pozostałymi technikami, szczególnie dla problemów drugiej grupy. Na uwagę zasługuje fakt, że osiągane rezultaty są lepsze niż nasza poprzednia propozycja, którą była prosta strategia ewolucyjna (w tabeli oznaczona jako ES-S).
Tabela 1. Wyniki osiągnięte przez FFD, GGA, MTP (Mortello i Toth), CLO oraz ES-S (Strategia ewolucyjna Stawowego); OPT - optimum globalne BINPACK4 BINPACK8 Lp OPT FFD GGA MTP ES-S CLO Lp. OPT FFD GGA MTP ES-S CLO. 1 399 403 399 403 403 401 1 167 190 167 184 168 167 2 406 411 406 410 409 407 2 167 191 167 181 168 168 3 411 416 411 416 415 413 3 167 190 167 177 168 168 4 411 416 411 416 417 413 4 167 190 167 180 168 167 5 397 402 397 401 402 398 5 167 191 167 181 168 168 6 399 404 399 402 403 401 6 167 190 167 183 168 168 7 395 399 395 398 400 397 7 167 190 167 183 169 168 8 404 408 404 406 411 407 8 167 189 167 183 169 168 9 399 404 399 402 406 400 9 167 191 167 177 168 168 10 397 404 397 402 403 398 10 167 190 167 185 168 168 11 400 404 400 404 403 401 11 167 190 167 179 168 168 12 401 405 401 404 405 403 12 167 190 167 178 168 168 13 393 398 393 396 397 394 13 167 190 167 187 168 167 14 396 401 396 401 400 398 14 167 190 167 181 168 168 15 394 400 394 399 398 395 15 167 189 167 183 169 168 16 402 408 402 407 408 405 16 167 190 167 181 168 167 17 404 407 404 407 407 405 17 167 189 167 183 168 168 18 404 409 404 407 408 406 18 167 191 167 183 168 168 19 399 403 399 403 403 400 19 167 189 167 180 169 168 20 400 406 400 405 404 401 20 167 191 167 188 168 168
5. Wnioski końcowe Przeprowadzone badania eksperymentalne wykazały dużą przydatność techniki CLO dla problemu pakowania pudełek, zaproponowany algorytm daje tylko nieznacznie gorsze rozwiązania niż, o wiele bardziej skomplikowany, GGA, natomiast dużo lepsze niż inne algorytmy przybliżone. Nasz algorytm bada tylko okolice optimów lokalnych, co znacząco redukuje przestrzeń poszukiwań. Kluczowym elementem sukcesu nowej techniki jest zastosowanie dobrego algorytmu optymalizacji lokalnej oraz dobrego ruchu perturbacyjnego. Zagadnienia te są specyficzne dla rozpatrywanego problemu. Zastosowane przez nas rozwiązania nie są prawdopodobnie najlepsze dla problemu pakowania pudełek, stąd konieczne są dalsze prace zmierzające do doboru optymalnych elementów algorytmu CLO. Literatura [1] Beasley J.: "OR-Library: Distributing test problems by electronic mail". Journal of the Operational Research Society, vol. 41, no. 11, 1990, str. 1069-1072. [2] Falkenauer E.: "A new representations and operators for genetic algorithms applied to grouping problems". Evolutionaty Computations, vol. 2, no. 2, 1994, str. 123-144. [3] Khuri S., Schütz M., Heitkötter J.: "Evolutionary heuristics for the bin packing problem". Proceedings of ICANNGA 95, April 1995. [4] Martin O., Otto S.: "Combining simulated annealing with local search heuristics". Artykuł przeznaczony dla Metaheuristics in Combinatoric Optimization pod redakcją Laporte'a i Osmana. [5] Stawowy A.: "Algorytm ewolucyjny dla problemu pakowania". Kwartalnik AGH - Mechanika, Wydawnictwa AGH, Kraków 1997, str. 593-598. [6] Sysło M., Deo N., Kowalik J.: Algorytmy optymalizacji dyskretnej, PWN, Warszawa 1995.