• Nie Znaleziono Wyników

Algorytm symulowanego wyżarzania

W dokumencie Index of /rozprawy2/10260 (Stron 52-55)

3.4 Algorytmy metaheurystyczne

3.4.1 Algorytm symulowanego wyżarzania

Idea działania algorytmu symulowanego wyżarzania pochodzi z termodynamiki i nawiązuje do procesu wyżarzania ciał stałych. Zastosowanie SA umożliwia unikanie ekstremów lokalnych przez możliwość akceptacji gorszych rozwiązań od dotychczas znalezionych. Algorytm symulowanego wyżarzania dla problemów optymalizacyjnych

został opracowany przez Kirkpatricka w 1983 r. [71]. SA opiera się na koncepcji zasto-sowanej w algorytmie Metropolisa w 1953 r.[124].

Powstało już wiele różnych wersji algorytmu SA np. COSA (ang. Cooperative

lated Annealing), MSA (ang. Modular Simulated Annealing), ASA (ang. Adaptive Simu-lated Annealing)[130]. Schemat działania opracowanego algorytmu symulowanego

wy-żarzania zaprezentowany jest na rysunku 5. Jest on zbliżony do podstawowej wersji algorytmu SA [71].

Ustal (x, T0, λ, Tk) //Krok 1 – inicjalizacja, faza strojenia

x* := x

T := T0

repeat

Wybierz (wylosuj) rozwiązanie sąsiednie dla x: y € Nx //Krok 2 – wykonanie ruchu

If (f(y) < f(x*)) then x* := y

//jeśli znaleziono najlepsze rozwiązanie, to je zapamiętaj If (P(f(y),f(x),T) > Random) then x := y

//zmień bieżące rozwiązanie gdy spełnione kryterium akceptacji Zaktualizuj (T)

//Zaktualizuj temperaturę zgodnie z schematem chłodzenia // T := λ·T --> schemat geometryczny

// T := T/(1+λ·T) --> schemat logarytmiczny until (Warunek_Stopu)

Oznaczenia:

T – temperatura bieżąca,

To – temperatura początkowa (maksymalna),

Tk – temperatura końcowa (minimalna),

λ – parametr algorytmu ustalony w fazie strojenia, 0 < λ <1, Random – liczba losowa z przedziału (0, 1),

x* - najlepsze aktualnie rozwiązanie, x – rozwiązanie bieżące,

f(x) – wartość funkcji celu dla x,

P(f(y), f(x),T) – funkcja akceptacji rozwiązania y, y – rozwiązanie sprawdzane z otoczenia Nx.

Rysunek 5. Schemat działania algorytmu symulowanego wyżarzania

Algorytm SA dąży do minimalnego stanu energii a funkcją celu harmonogramowania nominalnego jest maksymalizacja Fn określonej wzorem (13). Z tego powodu dokonano

zamiany problemu maksymalizacji Fn, na równoważny problem minimalizacji – Fn. Przyjęto, więc f(x) = - Fn (x), gdzie Fn (x) – wartość funkcji celu (13) dla rozwiązania

(permutacji, listy czynności) x.

Poniżej przedstawione są szczegóły implementacji opracowanego algorytmu SA dla rozpatrywanego problemu:

Krok 1:

Inicjalizacja.

Generowanie początkowej listy (permutacji) zadań przy użyciu najlepszego z algorytmów konstrukcyjnych. Ustalenie parametrów algorytmu: temperatury początkowej, końcowej (minimalnej) oraz parametru lambdy w fazie strojenia. Przebieg fazy strojenia ustalany jest eksperymentalnie.

Krok 2:

Wybór z sąsiedztwa bieżącej listy zadań rozwiązania sąsiedniego: stosowane są tutaj techniki jednoargumentowe (ruchy).

Krok 3:

Akceptacja z pewnym prawdopodobieństwem nowego rozwiązania. Jeśli ma być zaakceptowane, to staje się ono rozwiązaniem bieżącym w następnej itera-cji algorytmu. Zastosowano klasyczną funkcję akceptaitera-cji [71]:

( ( ), ( ), ) exp( ( ) ( )) T y f x f T x f y f P   (32)

Funkcja akceptacji określa prawdopodobieństwo, z jakim przyjmowane jest nowe rozwiązanie y za rozwiązanie bieżące x. Przy funkcji akceptacji określo-nej wzorem (54), gdy rozwiązanie y jest lepsze niż bieżące x (f(x) > f(y)), y zawsze staje się rozwiązaniem bieżącym. Natomiast gorsze rozwiązanie y (f(x) < f(y)) jest akceptowane tylko wtedy, gdy wylosowana liczba z przedziału (0, 1) jest mniejsza od prawdopodobieństwa akceptacji, które jest większe na po-czątku działania SA przy wyższej temperaturze T.

Krok 4:

Zmiana temperatury zgodnie z przyjętym schematem chłodzenia. Na początku temperatura jest równa temperaturze początkowej. Stosowany jest liniowy, geometryczny i logarytmiczny schemat chłodzenia [71].

Kroki 2-4 powtarzane są aż do spełnienia warunku STOP-u. Warunkiem stopu może być przebieg algorytmu przez zadaną liczbę iteracji lub osiągnięcie temperatury T rów-nej temperaturze minimalrów-nej Tk.

Kluczowe dla SA jest odpowiednie określenie parametrów algorytmu i znalezienie skutecznych technik przeszukiwań potencjalnych rozwiązań (krok 2), czyli ruchów. Ruch można określić jako funkcję, która przekształca jedno rozwiązanie w drugie. Rozwiązanie powstające w wyniku wykonania ruchu nazywane jest rozwiązaniem są-siednim. Dla rozważanego problemu sąsiedztwo, oznaczone Nπ, to zbiór wszystkich permutacji możliwych do wygenerowania z permutacji π za pomocą pojedynczego ru-chu. Funkcja określająca ruch v to transformacja π do πv. Zachodzi πv = v(π) oraz v: Π→ Π. Dla każdego rozwiązania π można znaleźć zbiór ruchów V(π).

Sposób określania otoczenia to jeden z najważniejszych elementów decydujących o skuteczności i złożoności obliczeniowej algorytmów LS. W przestrzeni permutacji definiowane są najczęściej ruchy typu Wstaw, Zamień i Odwróć. Opracowany przez autora algorytm symulowanego wyżarzania do przeszukiwania przestrzeni rozwiązań wykorzystuje następujące ruchy:

- Ruch typu Wstaw (ang. Insert) – wybierana jest losowo czynność, która następnie jest przesuwana na losową pozycję między ostatnim w uporządkowaniu zadań po-przednikiem a pierwszym następnikiem.

- Ruch typu Zamień (ang. Swap) – wybierana jest losowo czynność, która następnie jest zamieniana z losowo wybranym zadaniem zajmującym pozycję między ostatnim w uporządkowaniu zadań poprzednikiem a pierwszym następnikiem.

- Ruch typu Zamień sąsiednie (ang. Adjacent swap) – zamiana zadań na sąsiednich pozycjach w permutacji zadań. Wybierana jest losowo czynność, która następnie jest

zamieniana z czynnością kolejną na liście o ile nie naruszy to ograniczeń kolejno-ściowych.

- Ruch typu Inwersja (ang. Inversion) – odwrócenie fragmentu listy czynności. Wy-bierana jest losowo pozycja k, dla tej pozycji ustalany jest taki maksymalny podciąg listy czynności znajdujących się na pozycjach …k-1, k, k+1…, który nie zaburza sieci ograniczeń kolejnościowych. Następnie w tym podciągu losowane są dwie pozycje, które wyznaczają właściwy fragment odwracany podczas tego ruchu.

- Ruch typu Wstaw wszystkie – wybierana jest losowo czynność, która następnie jest przesuwana na pozycję między ostatnim w uporządkowaniu zadań poprzednikiem a pierwszym następnikiem tej czynności, sprawdzane są wszystkie możliwe pozycje wstawienia i wybierana jest pozycja, dla której funkcja kryterium Fn osiąga najwięk-szą wartość.

- Ruch typu Zamień wszystkie – wybierana jest losowo czynność, która następnie jest zamieniana z każdym zadaniem zajmującym pozycję między ostatnim w uporząd-kowaniu zadań poprzednikiem a pierwszym następnikiem tej czynności i wykony-wana jest zamiana, dla której funkcja kryterium Fn osiąga największą wartość.

Algorytmy przybliżone są stosowane ze względu na znacznie mniejszy czas obliczeń w porównaniu z algorytmami dokładnymi. Ze złożonością obliczeniową algorytmu SA ściśle związana jest liczebność sąsiedztwa ruchów danego typu. Liczebność sąsiedztwa to liczba wszystkich możliwych ruchów danego typu, możliwych do wykonania dla danej permutacji. Dla problemu RCPSP maksymalny rozmiar otoczenia dla poszcze-gólnych ruchów występuje dla projektu bez zależności kolejnościowych. Występowanie relacji kolejnościowych (i uwzględnienie tego podczas przeszukiwania przestrzeni roz-wiązań) między zadaniami zmniejsza przestrzeń potencjalnych rozwiązań i w szczegól-ności redukuje liczebność sąsiedztwa analizowanych ruchów.

W dokumencie Index of /rozprawy2/10260 (Stron 52-55)