Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania Metody optymalizacji Metody bezgradientowe optymalizacji bez ograniczeń Materiały pomocnicze do ćwiczeń laboratoryjnych T4 Opracowanie: Piotr Hirsch, mgr inż. Kazimierz Duzinkiewicz, dr hab. inż. Gdańsk, 05.2016
1. Wstęp W ćwiczeniu zapoznamy się z dwiema metodami bezgradientowymi poszukiwania ekstremum bezwarunkowego: metodą Gaussa-Seidla i metodą Neldera-Meada. Metody bezgradientowe nie posiadają wymagania na różniczkowalność funkcji kryterialnej. Do ich zastosowania wystarczająca jest znajomość wartości funkcji w punkcie przy zachowaniu warunku ciągłości. 2. Metoda Gaussa-Seidla Metoda Gaussa-Seidla polega na poszukiwaniu minimum w kolejnych kierunkach bazowych. Poczynając od punktu startowego x 0, poszukujemy minimum w kierunku x 1. Dojdziemy więc do punktu styczności z pewną poziomicą, od którego rozpoczniemy poszukiwanie minimum funkcji w kierunku x 2. Postępowanie to powtarzamy aż do ostatniej zmiennej zbioru argumentów, czyli x n, a następnie rozpoczynamy cykl poszukiwań od nowa, czyli z osiągniętego punktu poszukujemy minimum w kierunku x 1. Tak postępujemy aż do spełnienia warunku zakończenia obliczeń. Minimum funkcji w kierunku x k poszukujemy jedną z bezgradientowych metod minimalizacji funkcji jednej zmiennej (metodą złotego podziału). x2 x 0 Rys. 1. Poszukiwanie minimum metodą Gaussa-Seidla x1 Przyjmujemy kartezjański układ współrzędnych, określonych przez wersory kierunkowe: e 1 = [1 0 0 0] e 2 = [0 1 0 0] e n = [0 0 0 1] Algorytm metody Gaussa-Seidla: 1. Przyjąć punkt startowy x 0 i dokładność wyznaczenia ekstremum (określana jako zmiana wartości funkcji kryterialnej w kolejnych dwóch krokach) ε (np. ε = 10 3 ). 2. Obliczyć w punkcie x i wartość funkcji celu f(x i ).
3. Wykonać z punktu x i,k 1 krok o długości d w kierunku e k, tak, by minimalizować f(d), przechodząc do punktu: x i,k = x i,k 1 + d e k. 4. Powtórzyć poprzedni punkt (n-1) razy, osiągając punkt x i,n czyli x i+1 5. Obliczyć wartość funkcji celu w nowym punkcie. Jeśli f(x i+1 ) f(x i ) < ε, to zakończyć postępowanie. W przeciwnym razie przyjąć i = i + 1 i wrócić do punktu 2. Przykład: Znaleźć minimum funkcji: f(x) = 2x 1 2 + x 2 2 2x 1 x 2 startując w punkcie x 0 = [2; 3], przyjmując dokładność ε = 10 2. Na początku wyznaczamy wartość funkcji w punkcie startowym: f(x 0 ) = 5 x 01 = x 00 + d e 1 Funkcja f(x) po podstawieniu powyższej zależności przechodzi w funkcję f(d) taka postać nazywana jest parametrycznym przedstawieniem funkcji: f(d) = f(x 01 ) = f ([ 2 3 ] + d [1 ]) = 5 + 2 d + 2 d2 0 Następnie poszukujemy minimum funkcji f(d). Skorzystać możemy z metody złotego podziału (w tym celu należy także wyznaczyć przedział na którym znajduje się minimum). W tym wypadku krok d minimalizujący funkcję f(x) w kierunku e 1 będzie miał wartość d = 0.5. Wyznaczamy współrzędne nowego punktu: x 01 = [ 2 3 ] 0.5 [1 0 ] = [1.5 3 ] Z tego punktu wykonujemy minimalizację w kierunku e 2 : x 02 = x 01 + d e 2 f(d) = f(x 02 ) = f ([ 1.5 3 ] + d [0 ]) = 4.5 + 3 d + d2 1 Ponownie obliczamy optymalną długość kroku d = 1.5 i kolejny punkt: x 02 = [ 1.5 1.5 ] = x10 f(x 10 ) = 2.25. Możemy teraz sprawdzić warunek zakończenia obliczeń:
2.25 5 = 2.75 > 0.01 Przechodzimy do kolejnego kroku obliczeń, startując z punktu x 10. 3. Metoda Powella Metoda Powella polega na poszukiwaniu minimum w kolejnych kierunkach bazowych. Kierunki bazowe w każdym cyklu poszukiwań ulegają modyfikacji, tak aby prowadziły one do szybszego znalezienia minimum, przy czym w kolejnych cyklach muszą być wzajemnie sprzężone. Metoda Powella pozwala odnaleźć minimum funkcji liniowo-kwadratowej w skończonej liczbie iteracji, w wyniku minimalizacji tej funkcji wzdłuż każdego kierunku tylko raz. Metodę Powella zastosować można nie tylko do funkcji będących formą kwadratową, ale także do dowolnych funkcji analitycznych, przyjmując, że w bliskim otoczeniu minimum można je przybliżyć formą kwadratową. x2 x 0 Rys. 2. Poszukiwanie minimum metodą Powella (linia ciągła) i metodą Gaussa-Seidla (linia przerywana) x1 Przyjmujemy kartezjański układ współrzędnych, określonych przez wersory kierunkowe: e 1 = [1 0 0 0] e 2 = [0 1 0 0] e n = [0 0 0 1] Algorytm metody Powella: 1. Przyjąć punkt startowy x 0 i dokładność wyznaczenia ekstremum (określana jako zmiana wartości funkcji kryterialnej w kolejnych dwóch krokach) ε (np. ε = 10 3 ). 2. Obliczyć x i,0, jako wynik minimalizacji funkcji f(x) w kierunku e n z punktu x i 3. Obliczyć w punkcie x i,0 wartość funkcji celu f(x i,0 ). 4. Wykonać z punktu x i,k 1 krok o długości d w kierunku e k, tak, by minimalizować f(d), przechodząc do punktu: x i,k = x i,k 1 + d e k. 5. Powtórzyć poprzedni punkt (n-1) razy, osiągając punkt x i,n czyli x i+1
6. Obliczyć wartość funkcji celu w nowym punkcie. Jeśli f(x i+1 ) f(x i ) < ε, to zakończyć postępowanie. 7. Zmodyfikować bazę, wykonując podstawienie: e 1 = e 2 e 2 = e 3 e n 1 = e n e n = x i,n x i,0 8. Podstawić x i+1 = x i,n, przyjąć i = i + 1 i wrócić do punktu 2. Tak więc, w nowej bazie pojawi się na ostatnim miejscu nowy kierunek (sprzężony), a usunięty z bazy zostanie pierwszy kierunek poprzedniego zestawu. Od tego nowego kierunku rozpoczniemy minimalizację w następnym cyklu obliczeń. Przykład: Znaleźć minimum funkcji: f(x) = 2x 1 2 + x 2 2 2x 1 x 2 startując w punkcie x 0 = [2; 3], przyjmując dokładność ε = 10 2. Obliczamy minimum funkcji f(x) w kierunku e 2 z punktu startowego x 0. x 00 = x 0 + d e 2 f(d) = f(x 00 ) = f ([ 2 3 ] + d [0 ]) = 5 + 2 d + d2 1 Wartość d wyznaczamy jako: d = 1. Wyznaczamy współrzędne nowego punktu i wartość funkcji celu: x 00 = [ 2 3 ] 1 [0 1 ] = [2 2 ] f(x 00 ) = 4 Od tego momentu postępujemy zgodnie z metodą Gaussa-Seidla, otrzymując w kierunku e 1 : x 01 = x 00 + d e 1 f(d) = f(x 01 ) = f ([ 2 2 ] + d [1 ]) = 4 + 4 d + 2 d2 0 x 01 = [ 2 2 ] 1 [1 0 ] = [1 2 ] Wykonujemy minimalizację w kierunku e 2 :
x 02 = x 01 + d e 2 f(d) = f(x 02 ) = f ([ 1 2 ] + d [0 ]) = 2 + 2 d + d2 1 x 02 = [ 1 2 ] 1 [0 1 ] = [1 1 ] = x1 Obliczamy wartość funkcji celu w nowym punkcie i sprawdzamy warunek stopu: f(x 1 ) = 1. 1 4 = 3 > 0.01 Modyfikujemy bazę: e 1 = [ 0 1 ] e 2 = x 02 x 00 = [ 1 1 ] Podstawiamy x 1 = x 02 i przechodzimy do kolejnego cyklu obliczeń. Obliczamy minimum funkcji f(x) w kierunku e 2 z punktu x 1 : x 10 = x 1 + d e 2 f(d) = f(x 00 ) = f ([ 1 ] + d [ 1]) = 1 2 d + d2 1 1 x 10 = [ 1 1 ] + 1 [ 1 1 ] = [0 0 ] f(x 10 ) = 0 Obliczamy x 11 i x 12 jak poprzednio, otrzymując: x 11 = x 10 x 12 = x 11 = x 10 Ponieważ minimalizacja w kolejnych kierunkach nie zmienia położenia punktu, kończymy obliczenia.
4. Metoda Neldera-Meada Metoda Neldera-Meada, zwana też metodą pełzającego simpleksu, polega na kolejnym przekształcaniu wielościanu wypukłego, posiadającego n+1 liniowo niezależnych wierzchołków, w kierunku minimum. Wielościan taki nazywamy simpleksem (sympleksem). W każdej iteracji zmieniane jest położenie jednego punktu wierzchołkowego simpleksu tego o najgorszej wartości funkcji celu. Hiperpowierzchnia przechodząca przez pozostałe n wierzchołków rozdziela przestrzeń zmiennych na dwie półprzestrzenie. Oczekujemy, że możemy znaleźć punkt o mniejszej wartości funkcji celu w tej półprzestrzeni, która nie zawiera najgorszego punktu z pośród dotychczasowych. Szkielet algorytmu wygląda następująco: Rys. 2. Ilustracja do algorytmu Neldera-Meada 1. Uporządkuj punkty początkowego simpleksu wg wartości funkcji celu. Punkt W jest najgorszy, więc wyliczamy środek ciężkości M punktów B i G (w przestrzeni dwuwymiarowej jest to po prostu środek odcinka łączącego oba punkty). 2. Wygeneruj odbicie punktu W względem hiperpowierzchni łączącej pozostałe punkty (przechodzące przez M), tworząc punkt R. 3. Jeśli R nie jest najlepszym ani najgorszym z punktów wierzchołkowych nowego simpleksu, to przejdź do kolejnej iteracji algorytmu. 4. Jeśli R jest lepszy od najlepszego z dotychczasowych, to kierunek poszukiwań wydaje się być obiecujący, więc dokonujemy ekspansji simpleksu (rozciągnięcie) w tym kierunku, tworząc punkt E. 5. Jeśli R jest najgorszym z dotychczasowych punktów, to dokonujemy kontrakcji, czyli ściśnięcia simpleksu w tym kierunku, otrzymując punkty C2 lub C1, w zależności od tego, czy f(r) > f(w) czy nie. 6. Możliwa jest też sytuacja, gdy dokonujemy kontrakcji całego simpleksu wokół punktu dotychczas najlepszego. 7. Jako warunek stopu najczęściej stosujemy sprawdzenie, czy maksimum odległości między wierzchołkami simpleksu jest mniejsze od zadanego ε.
Charakter metody wymaga stosowania mechanizmów periodycznej odnowy, to jest zastąpienia aktualnego simpleksu innym, bardziej regularnym, gdy simpleks jest zbyt rozciągnięty w jednym kierunku, a ściśnięty w innym. Bibliografia: Amborski K., Podstawy metod optymalizacji, Oficyna Wydawnicza Politechniki Warszawskiej, 2009 Stachurski A., Wprowadzenie do optymalizacji, Oficyna Wydawnicza Politechniki Warszawskiej, 2009 Ostanin A., Metody optymalizacji z MATLAB. Ćwiczenia laboratoryjne, NAKOM, 2009