Algorytm genetyczny dla problemu gniazdowego z ograniczeniem
Transkrypt
Algorytm genetyczny dla problemu gniazdowego z ograniczeniem
Algorytm genetyczny dla problemu gniazdowego z ograniczeniem bez czekania Mariusz Makuchowski Instytut Cybernetyki Technicznej, Politechnika Wrocławska Słowa kluczowe: (problem gniazdowy, ograniczenie bez czekania, rozwiązania super-aktywne, rozwiązania pseudo-aktywne, algorytm genetyczny) Streszczenie: W pracy analizuje się problem gniazdowy z ograniczeniem bez czekania z kryterium optymalizacji będącym terminem zakończenia wykonywania wszystkich zadań. Przedstawia się klasę rozwiązań superaktywnych oraz jej rozszerzenie – klasę rozwiązań pseudo-aktywnych. Na bazie omówionych klas rozwiązań proponuje się dwa algorytmy genetyczne. Jakość proponowanych algorytmów ocenia się na podstawie przeprowadzonych badań numerycznych, wykorzystując literaturowe przykłady testowe. 1. WPROWADZENIE W pracy rozwaŜa się problem gniazdowy (ang. job shop problem) z dodatkowym ograniczeniem bez czekania (ang. no-wait). Optymalizowaną funkcją celu jest termin zakończenia wykonywania wszystkich zadań (ang. makespane). Problem ten róŜni się od swojego klasycznego odpowiednika wymogiem rozpoczęcia wykonywania operacji dokładnie w chwili zakończenia wykonywania jej poprzednika technologicznego (bezzwłocznie). Ograniczenie to jest typowe dla wielu rzeczywistych procesów produkcyjnych, w których przetwarzany produkt zmienia swoje własności fizycznochemiczne, przykładowo podczas wyrobu stali [1], produkcji Ŝywności [2], czy wyrobu elementów betonowych [3]. Z punktu widzenia złoŜoności obliczeniowej, juŜ klasyczny problem gniazdowy jest silnie NPtrudny, co zostało pokazane w pracy [4]. Analizowało go wielu badaczy, co zaowocowało opracowaniem szeregu algorytmów (róŜnego rodzaju). Dla niewielkich instancji dedykowane są algorytmy dokładne, bazujące na technice „dziel i ograniczaj” (ang. branch and bound) [5], a dla pozostałych algorytmy przybliŜone, najczęściej algorytmy popraw [6,7]. Problem gniazdowy z ograniczeniem bez czekania jest takŜe problemem silnie NP-trudnym [4], nawet w przypadku zredukowanym do dwóch maszyn [8]. Choć teoretyczna złoŜoność obu wymienionych wariantów problemu gniazdowego jest identyczna, to wielu badaczy uwaŜa, z praktycznego punktu widzenia, problem z ograniczeniem bez czekania, za znacznie trudniejszy. Przykładowo przedstawiony w pracy [9] algorytm dokładny, bazujący na metodzie podziału i ograniczeń, potrafi rozwiązać w sensownym czasie instancje o liczbie zadań nie większej niŜ 15 przy 5 maszynach i nie większej niŜ 10 przy 10 maszynach. Ponadto rozwaŜany problem doczekał się wielu algorytmów przybliŜonych bazujących na róŜnorodnych technikach. Przykładowo w pracy [10] przedstawiono algorytm oparty na technice poszukiwania z zabronieniami, w pracy [11] algorytm oparty na technice symulowanego wyŜarzania, a w pracy [12] algorytm genetyczny z elementami symulowanego wyŜarzania. Dalszy układ pracy jest następujący. W rozdziale drugim podaję sformułowanie matematyczne rozwaŜanego problemu oraz wprowadzam najpotrzebniejsze oznaczenia wykorzystywane w dalszej części pracy. W rozdziale trzecim definiuję dwie klasy rozwiązań, tzn. rozwiązania super-aktywne oraz rozwiązania pseudo-aktywne. Następnie przeprowadzam eksperyment numeryczny mający na celu praktyczną ocenę najlepszych rozwiązań występujących w danej klasie. W rozdziale czwartym opisuję zaproponowane algorytmy genetyczne, bazujące na wcześniej opisanych rozwiązaniach superaktywnych oraz pseudo-aktywnych. Rozdział ten kończę badaniami numerycznymi z wykorzystaniem znanych w literaturze przykładów testowych. Uzyskane rezultaty porównuję do algorytmu literaturowego GASA [12], uwzględniając zarówno czas pracy algorytmu jak i jakość otrzymanych rozwiązań. Ostatni piąty rozdział zawiera ogólne uwagi autora, zarówno na temat zaproponowanych klas rozwiązań super-aktywnych i pseudo-aktywnych jak i zastosowania podejścia ewolucyjnego do rozwiązywania instancji rozwaŜanego problemu. 2. SFORMUŁOWANIE PROBLEMU Problem gniazdowy z ograniczeniem bez czekania i funkcją kryterialną, będącą terminem zakończenia wykonywania wszystkich zadań, oznaczany jest w notacji Graham'a przez: J | no − wait | C max , [13]. MoŜe on być sformułowany zgodnie z notacją zaproponowaną w pracy [12] w następujący sposób: Dany jest zbiór maszyn M = {1,2,… , m } oraz zbiór zadań J = {1,2,… , n } wykonywanych na tych maszynach. Dla kaŜdego zadania k ∈ J dany jest ciąg O k = ( o1k , K , o rkk ) zawierający rk operacji produkcyjnych. Operacja olk składa się z pary ( m lk , p lk ) określającej kolejno wykorzystywaną maszynę oraz czas trwania operacji. Ponadto w rozwaŜanym problemie obowiązują następujące ograniczenia: • kolejnościowe: operacje zadania k naleŜy wykonać w kolejności Ok, • synchroniczne: kaŜda maszyna moŜe wykonywać w danej chwili, co najwyŜej jedną operację oraz nie moŜna w tym samym czasie wykonywać więcej niŜ jednej operacji danego zadania, • bez czekania: kaŜda nie pierwsza operacja danego zadania, musi rozpocząć się dokładnie w momencie zakończenia wykonywania operacji wcześniejszej tego samego zadania. ZauwaŜmy, Ŝe termin tk rozpoczęcia wykonywania zadania k (moment rozpoczęcia wykonywania operacji o1k ) określa precyzyjnie terminy rozpoczęć oraz zakończeń wykonywania wszystkich operacji o ∈ O k tego zadania. Dlatego jako rozwiązanie (uszeregowanie) problemu przyjmuję wektor T = ( t1 , K , t n ) terminów rozpoczęcia wykonywania wszystkich n zadań. Rozwiązanie spełniające wszystkie powyŜsze ograniczenia nazywamy rozwiązaniem dopuszczalnym. Długością C max ( T ) uszeregowania T nazywamy termin wykonania wszystkich zadań: C max ( T ) = max ( t k + k∈J rk ∑p k l ). (1) l =1 Problem polega na znalezieniu rozwiązania dopuszczalnego T* o najmniejszej długości. 3. USZEREGOWANIA SUPER-AKTYWNE I PSEUDO-AKTYWNE Uszeregowania super-aktywne rozwaŜane w pracy, zdefiniowane są precyzyjnie przez daną permutację zadań π = ( π (1), K , π (n) ) (permutacja ładująca) oraz pewną procedurę przekształcającą tę permutację w rozwiązanie. Procedura tworząca uszeregowanie super-aktywne z permutacji π składa się z n identycznych kroków. W i-tym kroku do częściowego rozwiązania dokładane jest zadanie π ( i ) , tworząc nowe uszeregowanie częściowe. Procedura zaczyna działanie z pustego uszeregowania, a po zakończeniu działania budowane uszeregowanie częściowe staje się ostatecznym rozwiązaniem. Dodanie zadania π ( i ) w i-tym kroku procedury polega na wyznaczeniu minimalnego terminu tπ (i ) ≥ 0 spełniającego wszystkie ograniczenia względem π (l ), l = 1,K, i − 1 , uszeregowanych juŜ wcześniej zadań. ZauwaŜmy, Ŝe kaŜda permutacja π zbioru J definiuje dokładnie jedno uszeregowanie, co więcej, uszeregowanie to jest zawsze dopuszczalne, co wynika bezpośrednio ze sposobu jego konstrukcji. Zaimplementowana procedura posiada złoŜoność obliczeniową O( n 2 N 2 ) , gdzie N = max {rk } oznacza największą liczbę operacji w szeregowanych zadaniach. k∈J W rozwaŜanym problemie nie ma Ŝadnej gwarancji, Ŝe klasa rozwiązań super-aktywnych zawiera poszukiwane rozwiązanie optymalne. Przykład takiej instancji (moŜliwie najmniejszy pod względem liczby maszyn i zadań) wraz z najlepszym rozwiązaniem super-aktywnym oraz rozwiązaniem optymalnym znajduje się na rysunku 1. Rys.1. Harmonogram zadań, a) najlepsze rozwiązanie super-aktywne, b) rozwiązanie optymalne Chcąc zmniejszyć częstotliwość występowania niepoŜądanej, wspomnianej wyŜej własności, zdecydowałem się na rozszerzenie rozwiązań super-aktywnych o ich symetryczne odpowiedniki. W konsekwencji procedura generująca rozwiązania rozszerzona została o dodatkowy komplementarny moduł. W skrócie, moduł ten pracuje na „odbiciach lustrzanych” oryginalnych danych, generując harmonogram super-aktywny, po czym zwraca rozwiązanie odpowiadające „lustrzanemu odbiciu” wygenerowanego harmonogramu. Ostatecznie jako rozwiązanie dla danej sekwencji ładującej przyjmuję harmonogram lepszy w sensie wartości funkcji celu. Uzyskane w ten sposób rozwiązania będę nazywał dalej rozwiązaniami pseudo-aktywnymi (wszystkie zadania na wykresie Gantt’a dosunięte są najdalej jak to moŜliwe do lewej lub prawej strony). 3.1. OCENA JAKOŚCI ROZWIĄZAŃ SUPER-AKTYWNYCH I PSEUDOAKTYWNYCH W celu praktycznej oceny jakości rozwiązań super-aktywnych oraz pseudo-aktywnych, zaprojektowałem algorytm dokładny wyznaczający najlepszą (w sensie wartości funkcji celu) permutację ładującą. Badania przeprowadziłem dla przykładów, w których liczba zadań była nie większa niŜ 10 (wartości rozwiązań optymalnych podano w pracy [9,12]). Otrzymane rezultaty zamieściłem w tabeli 1. Tabela 1. Błędy względne najlepszych rozwiązań danej klasie względem rozwiązań optymalnych Grupa przykładów La01-La05 La16-La20 Orb01-Orb05 Orb06-Orb10 Ft06, Ft10 Średnia Błędy względne [%] najlepszych rozwiązań klasy: super-aktywnej pseudo-aktywnej 0,70 0,00 0,19 0,00 0,07 0,03 0,46 0,00 0,00 0,00 0,32 0,01 Z tabeli 1 wynika, Ŝe pogorszenie jakości rozwiązań związane z ograniczeniem przeglądania rozwiązań tylko super-aktywnych czy pseudo-aktywnych jest stosunkowo małe. Połączenie tego faktu z łatwością kodowania tych rozwiązań (jedna ładująca permutacja zadań) oraz stosunkowo prostą metodą ich konstrukcji sugeruje, Ŝe omawiane klasy są dobrą bazą dla projektowania efektywnych algorytmów przybliŜonych. Oczywiste jest, Ŝe przeglądanie rozwiązań pseudo-aktywnych umoŜliwia znalezienie lepszych rozwiązań, niŜ w przypadku przeglądania rozwiązań super-aktywnych, jednakŜe obarczone jest to dwukrotnie dłuŜszym czasem wyznaczenia wartości funkcji celu. 4. ALGORYTM SGA i PGA Ogólna idea algorytmu ewolucyjnego przedstawiona jest po raz pierwszy w pracy [14]. Algorytmy genetyczne są programami symulującymi dobór naturalny, ewolucję i dziedziczenie, występujące w przyrodzie. Pojedyncze osobniki symulowanej populacji utoŜsamiane są z rozwiązaniami danego problemu. Zazwyczaj jedna iteracja takiego algorytmu odpowiada Ŝyciu jednego pokolenia, w którym najsłabsze osobniki giną, a najlepiej przystosowane stają się rodzicami nowego pokolenia. Jakość przystosowania osobnika oceniana jest na podstawie wartości funkcji kryterialnej odpowiadającego mu rozwiązania. W celu nadania ewolucji tendencji do generowania coraz lepszych rozwiązań, nowo powstałe osobniki dziedziczą geny (pewne atrybuty rozwiązań) swoich rodziców. Natomiast w celu uniknięcia sytuacji, w której wszystkie nowo generowane osobniki są bardzo do siebie podobne, stosuje się niewielką ich mutację. Z powyŜszego opisu wynika, Ŝe podstawowymi operacjami występującymi w kaŜdej iteracji algorytmu genetycznego są: selekcja (wybór rodziców z całego pokolenia), krzyŜowanie (generowanie nowych osobników na podstawie materiału genetycznego rodziców) oraz mutacja (wprowadzenie niewielkich zmian w materiale genetycznym nowo powstałych osobników). Szczegółowa implementacja poszczególnych elementów algorytmu (wariantu algorytmu o najwyŜszej jakości osiąganych rozwiązań z pośród kilkudziesięciu testowanych) opisana jest poniŜej: • selekcja: w algorytmie zastosowano najprostszy rodzaj selekcji, zwaną selekcją twardą, polegającą na wyborze pareN najlepszych osobników, • krzyŜowanie: do krzyŜowania stosuję dwa operatory bazujące na bazie operatora PMX. Oba z nich losują po dwa punkty przecięcia się permutacji, dzieląc permutację rodzica A na trzy części. Pierwszy z nich, operator LRX, polega na skopiowaniu 1 i 3 części rodzica A, natomiast brakujące środkowe elementy uzupełniane są zgodnie z kolejnością występowania w rodzicu B. Drugi, operator MX, jest analogiczny, z tą róŜnicą, Ŝe kopiowaniu podlega środkowa część permutacji, a początkowa i końcowa jest uzupełniana, • mutacja: w algorytmie zastosowano mutację typu „wstaw”. Polega ona na przełoŜeniu jednego losowego elementu permutacji ładującej na nową wylosowaną pozycję, • dodatkowa dywersyfikacja: kaŜdy osobnik o wartości funkcji celu występującej juŜ u innego osobnika w pokoleniu poddawany jest dodatkowej mutacji. Ta dodatkowa mutacja wykonuje się tak długo, aŜ nastąpi zmiana wartości funkcji celu mutowanego rozwiązania. Ostatecznie parametrami sterującymi pracą algorytmu są kolejno: • timeN: maksymalny czas pracy algorytmu podany w sekundach, • iterN: maksymalna liczba pokoleń symulowana przez algorytm, • idleN: liczba pokoleń bez poprawy po której następuje restart (dla idleN>0) lub zatrzymanie algorytmu (dla idleN<0), • childN: liczba osobników w pokoleniu, • pareN : liczba osobników będących rodzicami dla następnego pokolenia, • crossOver: zbiór operatorów krzyŜowania. Operatory z tego zbioru uŜywane są cyklicznie, • insertP: prawdopodobieństwo mutacji, • N: krotność powtórzenia algorytmu. Opisany algorytm bazujący na rozwiązaniach super-aktywnych nazywany jest algorytmem SGA, natomiast algorytm bazujący na rozwiązaniach pseudo-aktywnych, algorytmem PGA. 4.1. ANALIZA EKSPERYMENTALNA Wszystkie badania przedstawione w tej pracy, zostały przeprowadzone na komputerze klasy PC z procesorem Athlon XP 2000+ taktowanym zegarem 1666 MHz. Prezentowane algorytmy zostały zaprogramowane w języku C++ i uruchamiane były w środowisku Windows XP. Efektywność proponowanych algorytmów rozumiana zarówno jako szybkość działania, jak i jakość dostarczanych rozwiązań, przetestowana została na znanych w literaturze przykładach testowych. Przykłady te są zróŜnicowane zarówno pod względem ilości maszyn (od 5 do 20), jak i ilości zadań (od 6 do 30). Dla lepszej interpretacji uzyskanych rezultatów, porównane zostały one względem wyników otrzymanych algorytmem hybrydowym GASA [12], łączącym w sobie algorytm genetyczny z elementami algorytmu symulowanego wyŜarzania. Tabela 2. Wyniki działania algorytmów GASA i PGA dla przykładów „łatwych” Przykład La01 La02 La03 La04 La05 La16 La17 La18 La19 La20 Orb01 Orb02 Orb03 Orb04 Orb05 Orb06 Orb07 Orb08 Orb09 Orb10 Ft06 Ft10 m×n 5 x 10 5 x 10 5 x 10 5 x 10 5 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 10 x 10 6x6 10 x 10 OPT C max GASA C max 971 937 820 887 777 1575 1371 1417 1482 1526 1615 1485 1599 1653 1365 1555 689 1319 1445 1557 73 1607 1037 990 832 889 817 1637 1430 1555 1610 1693 1663 1555 1603 1653 1415 1555 706 1319 1535 1618 73 1607 t GASA [s] 23 24 24 25 24 39 42 42 40 45 39 40 41 43 44 42 43 41 40 46 6 41 ρ GASA PGA C max [%] 6,80 5,66 1,46 0,23 5,15 3,94 4,30 9,74 8,64 10,94 2,97 4,71 0,25 0,00 3,66 0,00 2,47 0,00 6,23 3,92 0,00 0,00 971 937 820 887 777 1575 1371 1417 1482 1526 1615 1485 1599 1653 1367 1555 689 1319 1445 1557 73 1607 t PGA [s] 11 10 10 9 9 32 29 33 37 33 33 27 33 31 34 34 31 31 39 35 3 29 ρ PGA [%] 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,15 0,00 0,00 0,00 0,00 0,00 0,00 0,00 Tabela 3. Średni błąd oraz suma czasów działania algorytmów GASA i PGA dla grup „łatwych” Grupy przykładów t GASA [s] 120 208 207 212 47 794 ρ GASA t PGA [s] 49 164 158 170 32 573 ρ PGA [%] [%] La01-La05 3,86 0,00 La16-La20 7,51 0,00 Orb01-Orb05 2,32 0,03 Orb06-Orb10 2,52 0,00 Ft06, Ft10 0,00 0,00 Wszystkie 3,68 0,01 255,178,93 167,25,14 Właściwy test składa się z dwóch części. W pierwszej z nich bada się efektywność algorytmu na „łatwych”, a w drugiej na „trudnych” przykładach testowych. Przykłady „łatwe” to te, które udało się rozwiązać dokładnie stosując algorytm typu „dziel i ograniczaj” opisany w pracy [9], natomiast pozostałe noszą miano przykładów „trudnych”. Pewnego komentarza wymagają przykłady La06-La10, które udało się rozwiązać dokładnie, a zakwalifikowane zostały do przykładów trudnych. Decyzja o takim przydziale wynika bezpośrednio z faktu, iŜ pozostałe przykłady o liczbie zadań wynoszącej 15 są przykładami trudnymi. Ponadto praktyczna trudność ich rozwiązania (patrz tabela 3 i tabela 5) jest na poziomie cechującym przykłady trudne. W pierwszej części testu istnieje duŜa szansa na osiągnięcie rozwiązań niewiele róŜniących się od rozwiązania optymalnego (w sensie wartości funkcji celu), dlatego zdecydowałem się na zastosowanie algorytmu PGA, opartego na rozwiązaniach pseudo-aktywnych (najlepsze z rozwiązań klasy pseudoaktywnej są znacznie bliŜej rozwiązania optymalnego niŜ analogiczne rozwiązania w klasie rozwiązań super-aktywnych, patrz tabela 1). Algorytm PGA uruchamiany był z następującymi parametrami sterującymi: PGA( 999,250,-100,50,20,(coMX,coLRX),0.005,10 ). Znaczenie wszystkich parametrów (w kolejności ich wstępowania) wypunktowałem i omówiłem wcześniej. PGA Dla kaŜdego przykładu wyznaczyłem długość uszeregowania C max generowanego przez badany GASA algorytm PGA w czasie t PGA . Analogiczne dane C max i t GASA dla algorytmu GASA otrzymano uruchamiając 30 razy algorytm GASA (na komputerze z procesorem Athlon 1400 Mhz). Następnie dla OPT kaŜdego przykładu obliczyłem ρ A , względny błąd w stosunku do rozwiązania optymalnego C max , A OPT OPT − C max ) / C max , ρ A = 100% ⋅ (C max A ∈ { GASA, PGA } . (2) Tabela 4. Wyniki działania algorytmów GASA i SGA dla przykładów „trudnych” Przykład La06 La07 La08 La09 La10 La11 La12 La13 La14 La15 La21 La22 La23 La24 La25 La26 La27 La28 La29 La30 La31 La32 La33 La34 La35 La36 La37 La38 La39 La40 Ft20 m×n 5 x 15 5 x 15 5 x 15 5 x 15 5 x 15 5 x 20 5 x 20 5 x 20 5 x 20 5 x 20 10 x 15 10 x 15 10 x 15 10 x 15 10 x 15 10 x 20 10 x 20 10 x 20 10 x 20 10 x 20 10 x 30 10 x 30 10 x 30 10 x 30 10 x 30 15 x 15 15 x 15 15 x 15 15 x 15 15 x 15 20 x 20 REF C max GASA C max 1248 1172 1244 1358 1287 1656 1462 1610 1659 1713 2048 1918 2075 2044 1946 2627 2763 2696 2498 2602 3690 4082 3712 3716 3797 2796 3025 2612 2760 2728 1587 1339 1240 1296 1447 1338 1825 1631 1766 1805 1829 2182 1965 2193 2150 2034 2945 3036 2902 2617 2892 4298 4686 4214 4401 4299 2949 3216 2762 2908 2950 1675 t GASA [s] 80 70 72 83 70 170 164 183 176 167 147 135 136 133 142 332 311 324 311 346 957 869 860 968 897 203 192 202 195 214 184 σ GASA PAGA C max [%] 7,29 5,80 4,18 6,55 3,96 10,21 11,56 9,69 8,80 6,77 6,54 2,45 5,69 5,19 4,52 12,11 9,88 7,64 4,76 11,15 16,48 14,80 13,52 18,43 13,22 5,47 6,31 5,74 5,36 8,14 5,55 1318 1172 1298 1415 1299 1698 1561 1729 1703 1752 2077 1931 2132 2044 1959 2732 2848 2866 2564 2674 3857 4223 3854 3789 3997 2918 3105 2734 2730 2594 1580 σ SGA t SGA [s] 40 41 40 40 40 69 69 70 69 70 135 135 134 136 133 252 253 252 247 244 581 580 581 588 576 283 287 280 285 288 70 [%] 0.00 3.67 3.86 3.24 2.95 0.66 4.65 0.99 3.38 2.34 0.29 - 0.42 0.29 1.42 1.34 2.40 - 0.11 1.15 0.60 3.15 4.61 3.11 0.94 4.20 1.24 - 3.72 0.89 0.19 - 1.09 - 4.91 1.39 Tabela 5. Średni błąd oraz suma czasów działania algorytmów GASA i SGA dla grup „trudnych” Grupy przykładów La06-La10 La11-La15 La21-La25 La26-La30 La31-La35 La36-La40 Ft20 Wszystkie t GASA [s] 375 860 693 1 624 4 551 1 006 184 9 292 ρ GASA [%] 5,56 9,41 4,88 9,11 15,29 6,21 5,55 8,32 t SGA [s] 201 347 673 1 248 2 906 1 423 70 6 868 σ SGA [%] 2.74 2.40 0.58 1.44 2.82 - 1.73 1.39 1.38 OPT Jak juŜ wspominałem, rozwiązania C max zaczerpnięto z pracy [9], w której otrzymano je stosując PGA GASA OPT algorytm dokładny typu dziel i ograniczaj. Wartości C max , t PGA , C max , t GASA oraz C max dla kaŜdego z łatwych przykładów zamieszczono w tabeli 2. Średnie wartości ρ A błędu ρ A oraz sumę A czasów działania t sum algorytmu A ∈ { GASA, PGA } dla poszczególnych grup przykładów łatwych zamieściłem w tabeli 3. Dla drugiej części testu algorytm SGA (dwukrotnie szybszy względem algorytmu PGA) wydaje się być bardziej odpowiedni. Przykłady testowe są tym razem na tyle trudne, Ŝe spodziewana odległość względem rozwiązania optymalnego będzie duŜo większa niŜ błąd wynikający z ograniczenia się do analizy rozwiązań super-aktywnych, zamiast rozwiązań pseudo-aktywnych. Tym razem algorytm SGA uruchamiany był z parametrami: SGA( 999,250,250,50,20,(coMX,coLRX),0.000,20 ). Dalszy przebieg drugiej części testu przebiegał analogicznie do pierwszej części, z tą zasadniczą róŜnicą, Ŝe porównywane algorytmy A ∈ { GASA, SGA } testowane były na przykładach trudnych, a błędy rozwiązań σ A REF liczone są względem C max wartości funkcji celu rozwiązań referencyjnych. A REF REF − C max ) / C max , σ A = 100% ⋅ (C max A ∈ { GASA, SGA } . (3) REF Rozwiązania C max zaczerpnięto z pracy [15], w której otrzymano je stosując algorytm typu poszukiSGA GASA wania z zabronieniami oraz algorytm typu symulowanego wyŜarzania. Wartości C max , t SGA , C max , REF t GASA oraz C max przykładów trudnych zawarte są w tabeli 4, natomiast średnie wartości σ A błędu σ oraz sumę czasów działania algorytmu A ∈ { GASA, SGA } dla poszczególnych grup przykładów trudnych zamieściłem w tabeli 5. A A t sum 5. UWAGI KOŃCOWE Z badań wstępnych zamieszczonych w punkcie 3 wynika, Ŝe zarówno stosowanie algorytmów przybliŜonych bazujących na klasie rozwiązań super-aktywnych, jak i pseudo-aktywnych, wydaje się być bardzo dobrym podejściem. Algorytm bazujący na rozwiązaniach super-aktywnych, względem analogicznego algorytmu bazującego na rozwiązaniach pseudo-aktywnych, odznacza się dwukrotnie krótszym czasem działania oraz tylko niewiele słabszymi (w sensie wartości funkcji celu) dostarczanymi rozwiązaniami. Przykładowo dla testowanych łatwych instancji algorytm bazujący na rozwiązaniach super-aktywnych, moŜe znaleźć w najlepszym przypadku rozwiązania o średnim błędzie 0,32%, podczas gdy algorytm bazujący na rozwiązaniach pseudo-aktywnych moŜe znaleźć rozwiązania ze średnim błędem mniejszym niŜ 0,01% (błąd liczony względem wartości funkcji celu rozwiązania optymalnego). Wynika z tego, Ŝe klasa rozwiązań pseudo-aktywnych jest szczególnie polecana dla przykładów łatwych, gdzie osiągane błędy względne są bardzo małe. Natomiast klasę rozwiązań superaktywnych poleciłbym dla przykładów trudnych, gdzie znajdowane rozwiązania są ciągle dalekie od ideału (wartość funkcji celu jest duŜo większa niŜ wartość funkcji celu rozwiązania optymalnego). Zastosowanie algorytmu PGA dla przykładów łatwych, a algorytmu SGA dla przykładów trudnych było dobrą decyzją. Dodatkowe testy na trudnych przykładach wykazały przewagę algorytmu SGA nad PGA. Oba algorytmy działały jednakowo długo, przy czym algorytm SGA wykonywał 2 razy więcej iteracji niŜ algorytm PGA. Dostarczane algorytmem SGA rozwiązania były około 1% lepsze w sensie wartości funkcji celu od rozwiązań dostarczonych przez algorytm PGA. Natomiast w przypadku przykładów łatwych algorytm SGA mógłby w najlepszym wypadku znaleźć rozwiązania gorsze o 0,31% niŜ znalezione rozwiązania algorytmem PGA. Wynika to z faktu, Ŝe najlepsze rozwiązania w klasie rozwiązań super-aktywnych są gorsze od rozwiązań dostarczonych algorytmem PGA (patrz tabela 1 i tabela 3). Ponadto na szczególną uwagę zasługuje fakt, Ŝe dla wszystkich przykładów łatwych algorytm PGA znalazł najlepsze moŜliwe rozwiązania. MoŜna powiedzieć, Ŝe znalazł rozwiązania optymalne w klasie rozwiązań pseudo-aktywnych (patrz tabela 1 i tabela 3). Wśród tych rozwiązań aŜ 21 na 22 to rozwiązania optymalne (patrz tabela 2). Porównując osiągnięte rezultaty względem literaturowego algorytmu GASA wyraźnie widać przewagę proponowanych algorytmów. Wszystkie porównywane algorytmy są algorytmami genetycznymi (algorytm GASA zawiera w sobie dodatkowo elementy symulowanego wyŜarzania). Algorytmy SGA i PGA dostarczają rozwiązań zdecydowanie lepszych w sensie wartości funkcji celu niŜ literaturowy algorytm GASA działający w porównywalnym czasie. Pisząc o porównywalnym czasie uwzględniam zarówno realny czas działania algorytmu, jak i róŜnicę w szybkości pracy komputerów. Dla łatwych instancji algorytm GASA dostarczył rozwiązań z średnim błędem 3,68%, podczas, gdy algorytm PGA w identycznym czasie (po uwzględnieniu róŜnicy szybkości komputerów) wygenerował rozwiązań o średnim błędzie 0,01%. Podobnie dla przykładów trudnych algorytm GASA dostarczył rozwiązania z średnim błędem 8,32%, podczas, gdy algorytm SGA wygenerował rozwiązania z średnim błędem 1,38%. Definicja omawianych błędów zawarta jest w rozdziale 4.1. Warto takŜe zwrócić uwagę na fakt całkowitej rezygnacji, w testowanej wersji algorytmu SGA, z tradycyjnej mutacji, na rzecz mutacji osobników podobnych (patrz dodatkowa dywersyfikacja w rozdziale 4). Prezentowane podejście nie wymaga precyzyjnego strojenia a uzyskiwane rozwiązania są statystycznie lepsze (w sensie wartości funkcji celu) niŜ w przypadku podejścia tradycyjnego. Praca była częściowo finansowana ze środków KBN grant T11A01624. PIŚMIENNICTWO CYTOWANE [1] WISMER D.A., Solution of the flowshop scheduling-problem with no intermediate queues. Operations Research. 1972, 20, 689. [2] HALL N., SRISKANDARAJAH C., A survey of machine scheduling-problems with blocking and no-wait in process. Operations Research. 1996, 44 (3), 510. [3] GRABOWSKI J., PEMPERA J., Sequencing of jobs in some production system. European Journal of Operational Research. 2000, 125, 535. [4] LENSTRA J., RINNOOY KAN A., Computational complexity of discrete optimization problems. Annals of Discrete Mathematics, 1979, 4, 121. [5] BRUCKER P., JURISCH B., SIEVERES B., A branch and bound algorithm for the job-shop-scheduling-problem, Discrete Applied Mathematics, 1994, 49, 107. [6] NOWICKI E., SMUTNICKI C., A fast taboo search algorithm for the job shop scheduling problem, Managment Science, 1996, 42 (6), 797. [7] PEZZELLA F., MERELLI E., A tabu search method guided by shifting bottleneck for job-shop-schedulingproblem, branch and bound algorithm for the job-shop-scheduling-problem, European Journal of Operational Research. 2000, 120, 297. [8] SAHNI S., CHO Y., Complexity of scheduling shops with no-wait in process, Mathematics of Operations Research, 1979, 4, 448. [9] MASCIS A., PACCIARELLI D., Job shop scheduling with blocking and no-wait constraints, European Journal of Operational Research. 2002, 142 (3), 498. [10] MACCHIAROLI R., MOLE S., RIEMMA S., Modelling and optimization of industrial manufacturing processes subject to no-wait constrains, International Journal of Production Research, 1999, 37 (11), 2585. [11] RAAYMAKERS W., HOOGEVEEN J., Scheduling multipurpouse batch process industries with no-wait restrictions by simulated annealing, European Journal of Operational Research. 2000, 126, 131. [12] SCHUSTER C., FRAMINAN J., Approximative procedures for no-wait job shop scheduling, Operations Research Letters. 2003, 31, 308. [13] GRAHAM R., LAWLER E., LENSTRA J., RINNOOY KAN A., Optimization and approximation in deterministic sequencing and scheduling: a survey, Annals of Discrete Mathematics, 1979, 5, 287. [14] HOLLAND J.H., Genetic Algorithms, Scientific American, 1992, 267, 44. [15] Makuchowski M., Problemy gniazdowe z operacjami wielomaszynowymi. Własności i algorytmy. Raport Politechniki Wrocławskiej, seria: Preprinty nr 37 / 2004. GENETIC ALGORITHM FOR NO-WAIT JOB SHOP PROBLEM Keywords: (no-wait job shop problem, super active solutions, pseudo active solutions, genetic algorithm) Summary: The paper deals with the no-wait job shop scheduling problem with the makespan criterion. The new class of so called “super-active” solution is introduced. Two genetic algorithms SGA and PGA, based on aforementioned class, and the class of “pseudo-active” schedules, are proposed. These algorithms are tested on “easy” and “hard” benchmarks well-know in literature. Results of computational experiments are given and they are compared with results yielded by the best genetic algorithm discusses in literature.