Metody optymalizacji - teoria i wybrane algorytmy 15 stycznia 2012 Spis treści I Algorytmy optymalizacji funkcji jednej zmiennej 2 1 Metody ustalania przedziału, w którym znajduje się minimum 3 1.1 Metoda wyczerpującego poszukiwania (ang. exhaustive search method).............................. 3 1.2 Metoda przyspieszonego poszukiwania (ang. bounding phase method).................................. 3 2 Metody znajdowania minimum z zadaną dokładnością: 4 2.1 Metody eliminowania obszarów................... 4 Metoda dzielenia przedziału na połowę.............. 5 Metoda złotego podziału....................... 5 Metoda liczb Fibonacciego...................... 6 2.2 Metody estymacji punktowej..................... 7 Metoda interpolacji kwadratowej Powella............. 7 2.3 Metody oparte na gradientach.................... 8 Metoda Newtona-Raphsona...................... 9 Metoda siecznych (ang. secant method).............. 10 2.4 Porównanie metod znajdowania minimum z zadaną dokładnością................................... 10 II Algorytmy optymalizacji funkcji wielu zmiennych 10
3 Metody bezpośrednich poszukiwań 11 3.1 Metoda hipersześcienna........................ 12 3.2 Metoda sympleksu Neldera-Meada................. 13 3.3 Metoda kierunków sprzężonych Powella.............. 14 4 Metody gradientowe 15 4.1 Metoda Cauchy ego najszybszego spadku............. 16 4.2 Metoda Newtona............................ 17 4.3 Metoda Marquardta.......................... 18 III Optymalizacja z ograniczeniami. 18 5 Teoria 18 6 Algorytmy 24 6.1 Metoda funkcji kar i barier...................... 25 6.2 Metoda Rosena rzutowanego gradientu.............. 26 IV Tutorial z OCTAVE/MATLAB 29 7 Wprowadzenie 29 2
Moja strona internetowa: http://michallewandowski.eu Mój adres e-mail: michal.lewandowski@eui.eu Część I Algorytmy optymalizacji funkcji jednej zmiennej Algorytmy w tym rozdziale mogą być stosowane do rozwiązywania problemów minimalizacji następującego typu: min f(x) gdzie f(x) jest funkcją celu a x jest zmienną rzeczywistą. Wyróżnia się dwa podstawowe typy algorytmów: Metody bezpośrednich poszukiwań (ang. direct search methods) oraz Metody oparte na gradientach (ang. gradient-based methods) Metody bezpośrednich poszukiwań wykorzystują wyłącznie wartości funckji celu, natomiast metody oparte na gradientach wykorzystują rownież pochodne pierwszego i/lub drugiego rzędu funkcji celu. Ponieważ gradienty liczymy numerycznie, funkcja celu nie musi by c rożniczkowalna ani nawet ciągła, aby wykorzystywać metody gradientowe. Metody opisane tutaj mogą być stosowane również do maksymalizacji. Wystarczy po prostu sformułować i rozwiązać równoważny problem dualny min( f(x)). Poniższe metody zakładają, że funkcja celu jest unimodalna (ang. unimodal function), czyli taka, że ma tylko jedno minimum lokalne. W praktyce, dzieli się funkcję na przedziały, w których jest ona unimodalna i dla każdego takiego przedziału z osobna, znajduje się minimum. My będziemy zakładać, że szukamy minimum funkcji f na przedziale [a, b]. Minimum funkcji znajduje się w dwóch fazach: Metody ustalania przedziału, w którym znajduje się minimum (ang. bracketing methods) Metody znajdowania minimum z zadaną dokładnością: Metody eliminowania obszarów (ang. region elimination methods) 3
Metoda estymacji punktowej (ang. point estimation method) Metody oparte na gradientach (ang. gradient based methods) 1 Metody ustalania przedziału, w którym znajduje się minimum W tym podrozdziale przedstawione są dwie metody: 1.1 Metoda wyczerpującego poszukiwania (ang. exhaustive search method) Metoda ta polega na porównywaniu wartości funkcji celu dla punktów jednakowo od siebie odległych. Zazwyczaj poszukiwania zaczyna się od dolnego ograniczenia zmiennej i w pojednynczej iteracji porównuje się wartości trzech kolejnych punktów wykorzystując założenie unimodalności. Algorytm 1) Ustal x 1 = a, x = (b a)/n (n jest liczbą punktów pośrednich), x 2 = x 1 + x, i x 3 = x 2 + x. 2) Jeśli f(x 1 ) f(x 2 ) f(x 3 ), minimum znajduje się w (x 1, x 3 ), Zakończ; W przeciwnym przypadku x 1 = x 2, x 2 = x 3, x 3 = x 2 + x i przejdź do kroku 3). 3) Czy x 3 b? Jeśli tak, to idź do kroku 2); Jeśli nie, to nie istnieje minimum w przedziale (a, b) lub punkt brzegowy (a lub b) jest puntem minimalnym. Ostateczny przedziałuzyskany przy użyciu tego algorytmu to 2(b a)/n. Średnio potrzeba obliczyć (n/2 + 2) wartości funkcji, aby uzyskać żądaną dokładność. 1.2 Metoda przyspieszonego poszukiwania (ang. bounding phase method) Metoda ta polega na obraniu punktu początkowego i wybraniu kierunku poszukiwań na podstawie porównania wartości funkcji w punkcie początkowym oraz dwóch wartości funkcji w punktach będących w bezpośrednim sąsiedztwie punktu początkowego. Później znajduje się drugi kraniec 4
przedziału stosując wykładniczą strategię poszukiwań. Poniżej użyty jest wykładnik równy 2, ale można używaċ jakąkolwiek inną liczbę dodatnią. Wykładnik wyższy niż 1, powoduje przyspieszanie wykładnicze poszukiwań, co zmniejsza liczbę iteracji, ale dzieje się to kosztem uzyskanej dokładności. Dla porównania w metodzie ustalania przedziału uzyskana dokładność jest lepsza, ale ilość potrzebnych iteracji jest większa. Algorytm 1) Wybierz punkt początkowy x (0) oraz wartość. Ustal k = 0. 2) Jeśli f(x (0) ) f(x (0) ) f(x (0) + ), wtedy > 0; Jeśli f(x (0) ) f(x (0) ) f(x (0) + ), wtedy < 0; W pozostałych przypadkach wróć do kroku 1). 3) Ustal x (k+1) = x (k) + 2 k. 4) Jeśli f(x (k+1) ) < f(x (k) ), ustal k = k + 1 i idź do kroku 3); W przeciwnym razie minimum znajduje się w przedziale (x (k 1), x (k+1) ), Zakończ. 2 Metody znajdowania minimum z zadaną dokładnością: 2.1 Metody eliminowania obszarów Ogólna zasada metod eliminowania obszarów jest następująca: Rozważmy dwa punkty x 1 i x 2, które leżą w przedziale (a, b) oraz x 1 < x 2. Dla problemu minimalizacji funkcji unimodalnej, można wyciągnąć następujące wnioski: Jeśli f(x 1 ) > f(x 2 ), to minimum nie leży w (a, x 1 ) Jeśli f(x 1 ) < f(x 2 ), to minimum nie leży w (x 2, b) Jeśli f(x 1 ) = f(x 2 ), to minimum nie leży ani w (a, x 1 ) ani w (x 2, b) Poniżej przedstawione zostaną trzy metody: Metoda dzielenia przedziału na połowę (ang. interval halving method) Metoda złotego podziału (ang. golden section search) Metoda liczb Fibonacciego (ang. Fibonacci search) 5
Metoda dzielenia przedziału na połowę Metoda ta polega na wybraniu trzech punktów jednakowo odległych od siebie oraz od krańców przedziału oraz wyliczeniu wartości funkcji w tych punktach, w wyniku czego można wyeliminować połowę przedziału. Algorytm 1) Wybierz dolne i górne ograniczenie przedziału a i b oraz małą liczbę ε. Niech x m = (a + b)/2, L 0 = L = b a. Wylicz f(x m ). 2) Ustal x 1 = a + L/4, x 2 = b L/4. Wylicz f(x 1 ) oraz f(x 2 ). 3) Jeśli f(x 1 ) < f(x m ), ustal b = x m ; x m = x 1 ; Przejdź do kroku 5); W przeciwnym wypadku przejdź do kroku 4). 4) Jeśli f(x 2 ) < f(x m ), ustal a = x m ; x m = x 2 ; Przejdź do kroku 5); W przeciwnym przypadku ustal a = x 1, b = x 2 ; przejdź do kroku 5). 5) Wylicz L = b a. Jeśli L < ε, Zakończ; W przeciwnym przypadku przejdź do kroku 2). W każdej nowej iteracji algorytmu, potrzebne jest wyliczenie dwóch wartości funkcji, a przedział zmniejsza się o połowę. Po n-krotnym wyliczeniu wartości funkcji, przedział zmniejsza się do około 0.5 n/2 L 0. Czyli ilość razy n, ile trzeba policzyć wartości funkcji, aby osiągnąć daną dokładność ε można policzyć z następującego wzoru: (0.5) n/2 (b a) = ε. Metoda złotego podziału W metodzie tej w każdej nowej iteracji potrzeba wyliczyć tylko jedną nową wartość funkcji. Idea polega na tym, że spośród dwóch punktów, które potrzebne są, aby stosować regułę eliminowania obszarów, jeden punkt jest zawsze poprzednim a tylko drugi punkt jest nowy. Ponadto przedział zawęża się za każdą iteracją proporcjonalnie o tyle samo, czyli o wartość ρ, która spełnia następującą zależność: 1 ρ 1 = ρ 1 ρ ρ = 3 5 2 0.382 Algorytm 6
1) Wybierz dolne i górne ograniczenie przedziału a i b oraz małą liczbę ε. Ustal k = 1. 2) Ustal w 1 = a + (1 ρ)(b a) oraz w 2 = a + ρ(b a). Wylicz f(w 1 ) oraz f(w 2 ), w zależności od tego, które z nich nie było wyliczone wcześniej. Wyeliminuj odpowiedni region zgodnie z regułą eliminowania obszarów. Ustal nowe a i b. 3) Czy a b < ε? Jeśli nie, ustal k = k + 1 i przejdź do kroku 2); Jeśli tak, Zakończ. W tym algorytmie, po n-krotnym wyliczeniu wartości funkcji przedział zmiejsza sie do (0.618) n 1 (a b), zatem ilość potrzebnych wyliczeń wartości funkcji przy danej dokładności ε można wyliczyć z następującego wzoru: (0.618) n 1 (a b) = ε Metoda liczb Fibonacciego W metodzie złotego podziału proporcja zmniejszania się przedziału z iteracji na iterację pozostaje niezmienna i wynosi 0.618. W metodzie liczb Fibonacciego, idea jest taka sama jak w metodzie złotego podziału, z wyjątkiem faktu, że w metodzie liczb Fibonacciego proporcja zmniejszania się przedziału z iteracji na iterację zmienia się tak, aby przedział zmniejszał się w sposób optymalny (tzn. jak najbardziej). Jeśli ρ k oznacza proporcje, o jaką zmniejsza się przedział w k-tej iteracji, to w metodzie Fibonacciego zachodzi następujący związek: 1 ρ k+1 1 = ρ k 1 ρ k (1) Okazuje się, że wartościami ρ k (0, 1/2], gdzie k = 1,..., N, które minimalizują wyrażenie (1 ρ 1 )(1 ρ 2 ) (1 ρ N ) i które spełniają powyższy związek (1), są następujące liczby: ρ 1 = 1 F N F N+1 ρ 2 = 1 F N 1 F N... ρ k = 1 F N k+1 F N k+2... ρ N = 1 F 1 F 2 7
gdzie F k oznaczają liczby Fibonacciego. Liczby Fibonacciego mają następującą charakterystykę: F 1 = 1, F 2 = 1 i gdzie k = 3, 4,... Algorytm F k = F k 1 + F k 2 1) Wybierz dolne i górne ograniczenie przedziału a i b i ustal L = b a. Ustal liczbę wyliczeń wartości funkcji n. Ustal k = 1. 2) Wylicz Lk = (1 ρ N k+1) (1 ρ 1 )L = F N k+1 F N+1. Ustal x 1 = a + Lk oraz x 2 = b Lk. 3) Spośród f(x 1 ) i f(x 2 ) wylicz tą wartość, która nie była wcześniej policzona. Wyeliminuj region według ogólnej metody eliminowania obszarów. Ustal nowe a i b. 4) Czy k = n? Jeśli nie, ustal k = k + 1 i idź do kroku 2); W przeciwnym przypadku, Zakończ. W tym algorytmie przedział redukuje się do 2 F N+1 L do czego potrzebnych jest n wyliczeń wartości funkcji. Zatem ilość potrzebnych wyliczeń wartości funkcji przy danej dokładności ε można wyliczyć z następującego wzoru: 2 F N+1 (b a) = ε Jednym z minusów metody liczb Fibonacciego jest fakt, iż trzeba wyliczaċ kolejne liczby Fibonacciego w każdej iteracji. 2.2 Metody estymacji punktowej W poprzednim podrozdziale omawiane były metody, które porównują wartości funkcji. W metodach estymacji punktowej wykorzystuje się również wielkość różnicy wartości funkcji. Poniżej omówimy tylko metodę interpolacji kwadratowej Powella. Metoda interpolacji kwadratowej Powella Szukamy trzy punkty x 1 < x 2 < x 3 takie, że wartości funkcji w tych punktach spełniają f(x 1 ) > f(x 2 ) < f(x 3 ). Szukamy równania wielomianu kwadratowego przechodzącego przez punkty (x 1, f(x 1 )), (x 2, f(x 2 )) i (x 3, f(x 3 )). 8
W tym celu zapisujemy ogólne równanie wielomianu kwadratowego przechodzącego przez punkty x 1 i x 2 : q(x) = a 0 + a 1 (x x 1 ) + a 2 (x x 1 )(x x 2 ) Następnie szukamy współczynników tego wielomianu: q(x 1 ) = f(x 1 ) = a 0 q(x 2 ) = f(x 2 ) = a 0 + a 1 (x 2 x 1 ) q(x 3 ) = f(x 3 ) = a 0 + a 1 (x 3 x 1 ) + a 2 (x 3 x 1 )(x 3 x 2 ) Otrzymujemy układ trzech równań, który rozwiązujemy, aby znaleźć współczynniki szukanego wielomianu: a 0 = f(x 1 ) a 1 = f(x 2) f(x 1 ) x 2 x ( 1 1 f(x3 ) f(x 1 ) a 2 = f(x ) 2) f(x 1 ) x 3 x 2 x 3 x 1 x 2 x 1 Teraz szukamy argumentu, dla którego ten wielomian kwadratowy osiąga minimum. Ponieważ zgodnie z naszymi założeniami a 2 > 0, minimum znajduje się tam, gdzie pochodna równa jest zero. q (x) = 0 a 1 + a 2 (x x 2 + x x 1 ) = 0 x = x 1 + x 2 2 a 1 2a 2 W punkcie x wielomian kwadratowy q(x) osiąga minimum. Ponieważ q(x) jest przybliżeniem funkcji f(x), której minimum szukamy, x jest przybliżeniem wartości, w której funkcja f(x) osiąga minimum. Spośród punktów (x 1, x 2, x 3, x ), zatrzymujemy trzy najlepsze (innymi słowy wyrzucamy punkt, w którym wartość funkcji f(x) jest największa) i ponownie dokonujemy interpolacji kwadratowej dla tych trzech punktów i szukamy minimum otrzymanego wielomianu. Procedura ta powtarzana jest do momentu, kiedy osiągnięta zostanie żądana dokładność. Alogorytm Powella, który został zarysowany powyżej znajduje minimum szybciej niż metoda złotego podziału, jeśli funkcja f(x) nie jest skrzywiona. Dla mocno niesymetrycznych funkcji, metoda złotego podziału pozostaje jednak lepsza. 2.3 Metody oparte na gradientach Metody opisane dotychczas wykorzystywały tylko wartości funkcji. Metody oparte na gradientach wykorzystujá natomiast dodatkowo informację o 9
pochodnych funkcji. Gradienty zazwyczaj oblicza się numerycznie. Używając metody różnic centralnych (ang. central difference method), liczymy pierwszą i drugą pochodną w punkcie x k następująco: f (x (k) ) = f(x(k) + x (k) ) f(x (k) x (k) ) 2 x (k) (2) f (x (k) ) = f(x(k) + x (k) ) 2f(x (k) ) + f(x (k) x (k) ) ( x (k) ) 2 (3) Parametr x (k) powinien być mały, na przykład może stanowić 1% wartości x (k). Metoda Newtona-Raphsona Załóżmy, że możemy policzyć f(x (k) ), f (x (k) ) i f (x (k) ) w każdym punkcie pomiaru funkcji x ( k). Możemy zdefiniować wielomian kwadratowy, którego pierwsza i druga pochodna oraz wartść w punkcie x (k) są identyczne z tymi dla funkcji f(x). Ten wielomian ma następującą postać: q(x) = f(x (k) ) + f (x (k) )(x x (k) ) + 1 2 f (x (k) )(x x (k) ) 2 Zamiast minimalizować funkcję f(x) minimalizujemy jej przybliżenie q(x). Warunek pierwszego rzędu na istnienie minimum jest następujący: 0 = q (x) = f (x (k) ) + f (x (k) )(x x (k) ) Nowy punkt x = x (k+1) spełnia zatem: x (k+1) = x (k) f (x (k) ) f (x (k) ) Metoda Newtona-Raphsona polega na kontynuowaniu powyższej procedury do momentu, w którym pochodna f (x (k+1) ) będzie wystarczająco blisko zera. Jeśli podstawimy g(x) = f (x), wtedy otrzymujemy formułę do iteracyjnego poszukiwania rozwiązania równania g(x) = 0: x (k+1) = x (k) g(x(k) ) g (x (k) ) Metoda Newtona-Raphsona działa dobrze jeśli f (x) > 0 wszędzie. Jeśli natomiast f (x) < 0 dla pewnego x, algorytm może nie zbiegać do minimum. Jeśli zamiast analitycznych pochodnych funkcji wykorzystujemy przybliżone pochodne (por. (2) oraz (3)), wówczas algorytm powyższy nazywamy quasinewtonowskim. 10
Metoda siecznych (ang. secant method) Jest to metoda podobna do Newtona-Raphsona. Zamiast f (x (k) ), używa się następującego przybliżenia: f (x (k) ) f (x (k 1) ) x (k) x (k 1) Otrzymuje się wtedy przedstawiony poniżej algorytm, który nazywa się metodą siecznych: x (k+1) = x (k) x (k) x (k 1) f (x (k) ) f (x (k 1) ) f (x (k) ) Metoda siecznych wymaga dwóch punktów startowych x ( 1) i x (0). Tak samo, jak w przypadku metody Newtona Raphsona, metodę siecznych można wykorzystać do znajdowania pierwiastków równania g(x) = 0. Otrzymujemy wtedy algorytm: x (k+1) = x (k) x (k) x (k 1) g(x (k) ) g(x (k 1) ) g(x(k) ) 2.4 Porównanie metod znajdowania minimum z zadaną dokładnością Metoda liczb Fibonacciego jest najbardziej efektywną metodą eliminacji obszarów jeśli początkowy przedział, w którym leży minimum jest znany. Jeśli nie znamy początkowego przedziału oraz pochodnych funkcji, wówczas najlepsza powinna być metoda iterpolacji kwadratowej Powella lub metoda quasi-newtonowska. Gdy pierwsze pochodne są dostępne, metoda siecznych lub metoda interpolacji sześciennej 1 powinna być najbardziej efektywna. W końcu metoda Newtona-Raphsona jest najbardziej efektywna, gdy dostępne są informacje i pierwszych i drugich pochodnych funkcji. 1 Ta metoda nie została omówiona w rozdziale. Jest to metoda podobna do interpolacji kwadratowej, używa jednak pierwszych pochodnych funkcji w celu zmniejszenia ilości potrzebnych wartości funkcji w pojedynczej iteracji. 11
Część II Algorytmy optymalizacji funkcji wielu zmiennych Dana jest funkcja wielu zmiennych: f : R N R. Mówimy, że punkt x jest punktem stacjonarnym, jeśli gradient w tym punkcie jest zerowym wektorem: f( x) = 0. Punkt ten jest lokalnym minimum, jeśli Hesjan w tym punkcie 2 f( x) jest dodatnio określony. Macierz jest dodatnio określona jeśli wszystkie jej wartości własne są dodatnie: λ i > 0, i = 1, 2,..., N 2. W niniejszej części skryptu omówione będą następujące algorytmy minimalizacji funkcji wielu zmiennych: Metody bezpośrednich poszukiwań: Metoda hipersześcienna (ang. evolutionary optimization) Metoda sympleksowa Neldera-Meada Metoda kierunków sprzężonych (ang. conjugate direction) Powella Metody gradientowe (ang. descent methods) Metoda najszybszego spadku (ang. steepest descent method) Metoda Newtona Metoda Marquardta Metoda sprzężonego gradientu Fletcher-Reevesa Metody quasinewtonowskie: Metoda Davidon-Fletcher-Powella (DFP) Metoda Broyden-Fletcher-Goldfarb-Shannona (BFGS) 3 Metody bezpośrednich poszukiwań Tak jak w przypadku optymalizacji funkcji jednej zmiennej metody bezpośrednich poszukiwań korzystają wyłącznie z wartości funkcji w punktach, w przeciwieństwie do metod gradientowych, które dodatkowo wykorzystują pochodne funkcji. 2 Macierz symetryczna, a taką jest Hesjan ma wszystkie wartości własne rzeczywiste, nie trzeba się więc martwić o zespolone wartości własne. 12
3.1 Metoda hipersześcienna Algorytm potrzebuje w pojedynczej iteracji 2 N +1 punktów, z czego 2 N punktów to są wierzchołki hipersześcianu scentrowanego na pozostałym punkcie. Porównuje się wartości funkcji we wszystkich tych punktach i wskazuje się najlepszy (z najmniejszą wartością). W następnej iteracji tworzy się sześcian wokół tego najlepszego punktu. Jeśli najlepszym punktem okaże się punkt, który był środkiem danego hipersześcianu, wówczas zmniejsza się rozmiar sześcianu. Proces ten kontynuuje się aż hipersześcian stanie się dostatecznie mały. Algorytm 1) Wybierz punkt początkowy x (0) oraz parametry redukcji i dla każdej ze zmiennych, i = 1, 2,..., N. Wybierz parametr zakończenia ε. Ustal x = x (0) 2) Jeśli < ε, Zakończ; W przeciwnym przypadku stwórz 2 N punktów poprzez dodanie i odjęcie i /2 do/od każdej zmiennej w punkcie x. 3) Oblicz wartość funkcji dla wszystkich (2 N + 1) punktów. Znajdź punkt z najmniejszą wartością. Ustal ten punkt jako x. 4) Jeśli x = x (0), zredukuj parametry redukcji i = i /2 i przejdź do kroku 2); W przeciwnym przypadku ustal x ( 0) = x i przejdź do kroku 2) W powyższym algorytmie w każdej iteracji trzeba policzyć maksymalnie 2 N wartości fukcji. Czyli ilość potrzebnych ewaluacji funkcji wzrasta wykładniczo wraz z N. Jeśli algorytm znajdzie dokładne minimum funkcji w którejś iteracji, nie zatrzymuje się automatycznie. Wartość musi spaść poniżej ε, aby algorytm zakończył działanie. Ustalenie dużego parametru redukcji i jest dobre, ale wtedy algorytm może potrzebować wielu iteracji a zatem i wielu ewaluacji funkcji. Z drugiej strony ustalenie małego parametru redukcji może prowadzić do zbyt wczesnej zbieżności algorytmu do suboptymalnego punktu, szczególnie w przypadku funkcji bardzo nieliniowych. Redukcja parametru redukcji nie musi być dwukrotna tak jak w algorytmie podanym powyżej (patrz krok 4)). Dla 13
lepszej zbieżności algorytmu rekomenduje się redukcję mniejszą niż dwukrotną 3. 3.2 Metoda sympleksu Neldera-Meada Sympleks wymaga dużo mniejszej ilości punktów niż hypersześcian, co staje się szcególnie widoczne dla wielu wymiarów. Sympleks w N-wymiarowej przestrzeni ma N + 1 wierzchołków. Jest to minimalna ilość wierzchołków umożliwiająca poszukiwanie we wszystkich możliwych kierunkach N- wymiarowej przestrzeni. Ważne jest jednak, aby sympleks 4 nie rozpinał figury o zerowej objętości w N-wymiarowej przestrzeni - czyli na przykład dla funkcji dwuwymiarowej trzy punkty sympleksu nie mogą leżeć na jednej linii, a w przypadku funkcji trójwymiarowej cztery punkty sympleksu nie mogą leżeć na jednej płaszczyźnie. Działanie metody najlepiej widać w pseudokodzie algorytmu: Algorytm 1) Wybierz γ > 1, β (0, 1) oraz parametr zakończenia ε. Stwórz sympleks początkowy. 2) Znajdź najgorszy punkt x w, najlepszy punkt x b oraz drugi w kolejności najgorszych x m. Oblicz punkt, wzgędem którego będziemy odbijać x w : x c = 1 N N+1 i=1,i h 3) Oblicz punkt odbicia x r = 2x c x w. Ustal x new = x r. Jeśli f(x r ) < f(x b ), ustal x new = (1 + γ)x c γx w (ekspansja); Jeśli f(x r ) f(x w ), ustal x new = (1 β)x c + βx w (kontrakcja); Jeśli f(x m ) < f(x r ) < f(x w ), ustal x new = (1 + β)x c βx w (kontrakcja). Policz f(x new ) i wymień x w na x new. x i. { N+1 } (f(x 4) Jeśli i ) f(x c )) 2 1/2 i=1 N+1 ε, Zakończ; W przeciwnym przypadku idź do kroku 2). Jednym ze sposobów stworzenia sympleksu początkowego do pierwszego kroku algorytmu jest wybranie punktu bazowego x (0) oraz liczby C. Wów- 3 W kroku 4): i = i /p, gdzie p (1, 2). 4 Chodzi tutaj o sympleks początkowy. O następne nie trzeba się martwić, co będzie widoczne w algorytmie. 14
czas N + 1 punktów sympleksu to x (0) oraz dla i, j = 1, 2,..., N: x (i) j = { (0) x j + C if j = i x (0) j + C otherwise, where = { 0.25 if N = 3 N+1 2 N 3 otherwise. Dla zapewnienia dobrej zbieżności algorytmu, sugeruje się ustalenie γ 2 i β 0.5. 3.3 Metoda kierunków sprzężonych Powella. Metoda kierunków sprzężonych Powella jest chyba najbardziej popularną metodą bezpośrednich poszukiwań. Wykorzystuje ona historię poprzednich rozwiązań, aby swtorzyć nowe kierunki poszukiwań. Idea jest prosta: trzeba utworzyć N liniowo niezależnych kierunków poszukiwań i dokonać sekwencyjnie serię poszukiwań wzdłuż tych kierunków, startując za każdym razem z poprzednio znalezionego punktu. Algorytm 1) Wybierz punkt początkowy x (0) oraz zbiór N liniowo niezależnych kierunków; najlepiej s (i) = e (i), dla i = 1, 2,..., N, gdzie e (i) oznacza i-ty wektor bazowy bazy kanonicznej. 2) Szukaj minimum startując z punktu początkowego wzdłuż kierunku s (1). Startując z nowo znalezionego punktu (oznacz go jako y (1) ), szukaj minimum wzdłuż kierunku s (2). Kontynuuj szukanie wzdłuż kolejnych kierunków aż do kierunku s (N). Następnie ponownie szukaj minimum wdłuż kierunku s (1). Punkt, który został ostatecznie znaleziony oznacz jako y (2). 3) Oblicz d = y (2) y (1). Jest to kierunek sprzężony do s (1). 4) Jeśli d jest małe lub kierunki s (1), s (2),..., s (N 1), d są liniowo zależne, Zakończ; W przeciwnym przypadku ustal s (j) = s (j 1) dla wszystkich j = N, N 1,..., 2. Ustal s (1) = d/ d i idź do kroku 2). 15
4 Metody gradientowe Gradient w punkcie x (t) możemy przybliżyć numerycznie za pomocą następującej formuły: f(x (t) ) x 1 f(x (t) f(x (t) ) ) = x 2..., gdzie f(x(t) ) x i f(x (t) ) x N = f(x(t) i + x (t) i ) f(x (t) i x (t) i ) 2 x (t) i Hesjan w punkcie x (t) natomiast liczymy następująco: 2 f(x (t) ) x 1 x 2... 2 f(x (t) = 2 f(x (t) ) x1 2 2 f(x (t) ) 2 f(x (t) ) x 2 x 1 x2 2... 2 f(x (t) ) x 1 x N 2 f(x (t) ) x 2 x N............ 2 f(x (t) ) 2 f(x (t) ) x N x 1 x N x 2... 2 f(x (t) ) x 2 N gdzie: 2 f(x (t) ) x 2 i 2 f(x (t) ) x i x j = = f(x(t) i + x (t) i ) 2f(x (t) ) + f(x (t) i x (t) i ) ( x (t) i ) 2 f(x (t) i + x (t) i ) x j f(x(t) i x (t) i ) x j 2 x (t) i Pochodne cząstkowe w ostatnim wyrażeniu powyżej są z kolei liczone tak, jak składowe gradientu, tylko że w innym punkcie. Wyrażenie x (t) i + x (t) i reprezentuje wektor (x (t) 1,..., x(t) i + x (t) i,..., x (t) N )T Żeby policzyć gradient potrzebnych jest 2N ( różnych ) wartości funkcji. Ażeby N policzyć Hesjan potrzebnych jest 3N + 4 = 2N 2 + N. 2 Ponieważ gradient jest kierunkiem najszybszego wzrostu, minus gradient jest kierunkiem najszybszego spadku funkcji. Kierunek poszukiwań (ang. search direction) d (t) jest kierunkiem spadku w punkcie x (t), jeśli w otoczeniu tego punktu spełniony jest następujący warunek: f(x (t) ) d (t) 0 Oznacza to, że cosinus kąta między gradientem i kierunkiem poszukiwań jest większy niż 90 0. Kierunek d (t) jest kierunkiem spadku, ponieważ w wyniku rozwinięcia f wokół x (t) otrzymujemy: f(x (t+1) ) = f(x (t) + αd (t) ) = f(x (t) ) + α f(x (t) ) d (t). 16
Im niższa ujemna wartość f(x (t) ) d (t) tym większy spadek funkcji w kierunku d (t). W metodach gradientowych często w ramach pojedynczej iteracji dokonuje się poszukiwań w danym kierunku. Jest to optymalizacja jednowymiarowa. Najpierw zapisujemy reprezentatywny punkt wzdłuż kierunku s (t) jako: x (k+1) = x (k) + α (k) s (k), gdzie α (k) jest długością kroku. Ponieważ x (k) i s (k) są znane, punkt x (k+1) można zapisać tylko jedną zmienną. Można więc wykonać minimalizację jednowymiarową, aby otrzymać nowy punkt x (k+1). Następnie poszukiwania kontynuuje się wzdłuż nowego kierunku s (k+1) i tak dalej aż do momentu znalezienia lokalnego minimum. Jeśli metoda gradientowa jest użyta do poszukiwań jednowymiarowych wzdłuż kierunku, minimum znajdujemy poprzez zróżniczkowanie wyrażenia f(x (t+1) ) = f(x (t) + αs (k) ) względem α i przyrównaniem do zera: f(x (k+1) ) s (k) = 0. W ten sposób znajdujemy nowy punkt x (k+1). Okazuje się że kąt pomiędzy kierunkiem poszukiwań w k-tej iteracji i kierunkiem najszybszego spadku w nowym punkcie f(x (k+1) ) jest równy 90 0. 4.1 Metoda Cauchy ego najszybszego spadku Kierunek poszukiwań w metodzie Cauchy ego jest kierunkiem najszybszego spadku: s (k) = f(x (k) ). Algorytm ten gwarantuje poprawę, to jest spadek wartości funkcji, w każdej iteracji. Metoda najszybszego spadku działa dobrze, gdy x (0) jest daleko od minimum x. Jeśli bieżący punkt jest blisko minimum, zmiana gradientu jest mała, wobec następny punkt powstały w wyniku poszukiwania w jednym kierunku jest blisko punktu bieżącego. Algorytm 1) Wybierz maksymalną liczbę iteracji M, punkt początkowy oraz dwa parametry zakończenia ε 1 i ε 2 i ustal k = 0. 2) Oblicz f(x (k) ) 17
3) Jeśli f(x (k) ) ε 1, Zakończ; Jeśli k M; Zakończ; W przeciwnym razie idź do kroku 4). 4) Wykonaj poszukiwanie wzdłuż kierunku, żeby znaleźć α (k) tak, aby f(x (k+1) ) = f(x (k) + α (k) s (k) ) było minimalne. Jednym z kryteriów zakończenia jest f(x (k+1) ) f(x (k) ) ε 2. 5) Jeśli x(k+1) x (k) ε x (k) 1, Zakończ; W przeciwnym przypadku ustal k = k + 1 i idź do kroku 2). 4.2 Metoda Newtona Rozwinięcie w szereg Taylora drugiego rzędu funkcji f wokół punktu x (t) przyjmuje następującą formę: f(x (k+1) ) = f(x (k) ) + f(x (k) ) T (x x (k) ) + 1 2 (x x(k) ) T 2 f(x (k) )(x x (k) ) Jeśli policzymy warunek pierwszego rzędu na maksimum lokalne tej funkcji, otrzymujemy: f(x (k) ) + 2 f(x (k) )(x x (k) ) = 0 Podstawiając x (k+1) = x, otrzymujemy: [ 1 x (k+1) = x (k) 2 f(x )] (k) f(x (k) ) Kierunek poszukiwań w metodzie Newtona jest zatem dany wyrażeniem: [ 1 s (k) = 2 f(x )] (k) f(x (k) ) Jeśli macierz [ 2 f(x (k) )] 1 jest półdodatnio określona, kierunek s (k) jest kierunkiem spadku. Warunek drugiego rzędu optymalizacji mówi, że macierz 2 f(x ) jest dodatnio określona dla minimum lokalnego. Można zatem założyć, że macierz 2 f(x) jest dodatnio określona w otoczeniu minimum. Metoda Newtona jest więc dobra, kiedy punkt początkowy jest blisko minimum. Algorytm jest bardzo podobny do metody najszybszego spadku. Poszukiwania prowadzone są jednak w innym kierunku s (k) = 2 f(x )] (k) f(x (k) [ 1 ). Możliwy warunek zakończenia optymalizacji wzdłuż kierunku wygląda następująco: [ 1 f(x(k+1) ) 2 f(x )] (k) f(x (k) ) ε 2. 18
4.3 Metoda Marquardta Metoda Cauchy ego działa dobrze, gdy punkt początkowy jest daleko od minimum, podczas, gdy metoda Newtona działa dobrze, gdy punkt początkowy jest blisko minimum. W metodzie Marquardta, metodę Cauchy ego stosuje się na początku by następnie zaadoptować metodę Newtona. Algorytm 1) Wybierz maksymalną liczbę iteracji M, punkt początkowy oraz parametr zakończenia ε. Ustal k = 0 oraz λ (0) = 10 4 (duża liczba). 2) Oblicz f(x (k) ) 3) Jeśli f(x (k) ) ε, Zakończ; Jeśli k M; Zakończ; W przeciwnym razie idź do kroku 4). [ 1 4) Oblicz x (k+1) = x (k) 2 f(x (k) ) + λ I] (k) f(x (k) ) 5) Jeśli f(x (k+1) ) < f(x (k) ), idź do kroku 6); W przeciwnym przypadku idź do kroku 7). 6) Ustal λ (k+1) = 1 2 λ(k), k = k + 1 i idź do kroku 2). 7) Ustal λ (k+1) = 2λ (k) i idź do kroku 4). Algorytm może być szybszy, jeśli dodatkowo będziemy dokonywać optymalizacji wzdłuż kierunku w każdej iteracji. Część III Optymalizacja z ograniczeniami. 5 Teoria Nieniejszy rozdziałma służyć intuicyjnemu przedstawieniu idei twierdzenia Lagrangeá i Kuhn-Tuckera. Dane jest następujące zadanie optymalizacyjne: max f(x) x D R N 19
Zbiór D jest zbiorem punktów dopuszczalnych. Zbiór ten będziemy przedstawiać za pomocą ograniczeń w postaci równości h(x) = c oraz ograniczeń w postaci nierówności g(x) c. W przypadku ograniczeń w postaci nierówności, mówimy, że dane ograniczenie jest aktywne bądź napięte w punkcie dopuszczalnym x jeśli zachodzi g(x) = c. W przeciwnym przypadku, tj. gdy g(x) < c mówimy, że ograniczenie jest nieaktywne lub luźne w punkcie dopuszczalnym x. Oczywiście dla ograniczeń w postaci równości dla punktu dopuszczalnego ograniczenie z definicji musi być napięte. Intuicję dotyczącą zagadnień optymalizacyjnych najlepiej wyrobić sobie graficznie dla przypadku, gdy x R 2. Rysunki poniżej pokazują, że w przypadku ograniczeń w postaci równości w punkcie optymalnym 5 nachylenie funkcji celu i ograniczenia powinno być równe: x 2 Równe nachylenie i mnożnik dodatni f(x*)=λ h(x*), λ>0 x* f(x*) h(x*) A x' f(x') h(x') h(x)=c x 1 x 2 Równe nachylenie i mnożnik ujemny f(x*)=λ h(x*), λ<0 f(x*) x* h(x*) A h(x') f(x') x' h(x)=c x 1 5 Zakładając różniczkowalność. 20
Możemy to zapisać w następujący sposób: gdzie symbol λ oznacza mnożnik Lagrange a. f(x ) = λ h(x ) (4) Tak więc problem optymalizacji z ograniczeniem max x f(x), p.w. h(x) = c można sprowadzić do problemu optymalizacji bez ograniczeń funkcji L(x, λ) = f(x) λ(h(x) c), zwanej funkcją Lagrange a, bowiem warunki pierwszego rzędu optymalizacji tej funkcji będą dokładnie równe warunkom (4) oraz ograniczeniu h(x ) = c: f(x ) λ h(x ) = 0 h(x ) c = 0 Z powyższych rysunków wynika również, że w przypadku ograniczeń w postaci równości mnożnik Lagrange a może być zarówno dodatni, jak i ujemny. Jedyna wymagana rzecz jest taka, że musi on być zdefiniowany. Aby mnożnik można było zdefiniować musi być spełniony następujący warunek: h(x ) 0 (5) Gradient ograniczenia w punkcie optymalnym musi być różny od wektora zerowego. W naszym przykładzie oznacza to, że: [ ] [ ] h(x ) 0 0 x 1 h(x ) x 2 Dla problemu optymalizacji z ograniczeniami w postaci nierówności g(x) c problem jest podobny, lecz nieco bardziej złożony. Jeśli optimum jest w punkcie, w którym dane ograniczenie nie jest aktywne, to warunek pierwszego rzędu jest taki sam jak, gdyby ograniczenia nie było tj. f(x ) = 0 (6) Warunek pierwszego rzędu funkcji Lagrange a wynosi zaś: f(x ) λg(x ) = 0 Aby te warunki się zgadzały, mnożnik Lagrange a w tym przypadku musi wynosić zero. Jeśli zaś optimum jest w punkcie, w którym dane ograniczenie jest aktywne, wówczas mamy do czynienia z sytuacją jak na rysunku poniżej: 21
x 2 f(x*)=λ g(x*), λ>0 f(x*) x* g(x*) g(x) c A x' f(x') g(x') x 1 W tym przypadku mnożnik Lagrange a musi być dodatni, ponieważ w przeciwnym razie moglibyśmy przesunąć punkt x do wewnątrz zbioru dopuszczalnego podnosząc wartość funkcji celu f - co przeczyłoby optymalności punktu x : x 2 Dlaczego mnożnik Lagrange'a musi być dodatni g(x*) f(x*) g(x)<b g(x)>b g(x)=b x 1 Zatem mamy dwie sytuacje możliwe w punkcie optymalnym: ograniczenie aktywne, mnożnik dodatni: g(x) = c i λ > 0 ograniczenie nieaktywne, mnożnik zerowy: g(x) < 0 i λ = 0 22
Te dwa przypadki można zapisać jednym warunkiem zwanym "complementary slackness": λ[g(x ) c] = 0 Analiza będzie podobna jeśli ograniczenia w postaci zamienimy na ograniczenia w postaci. Wówczas trzeba jednak w prezentacji graficznej zmodyfikować kierunki gardientów ograniczeń: x 2 Ograniczenia w postaci g 1 (x) g 4 (x) g 1 (x) b 1 {x g 2 (x)=b 2 } g 2 (x) g 2 (x) b 2 g 3 (x) b 3 g 4 (x) b 4 g 3 (x) x 1 x 2 Ograniczenia w postaci g 1 (x) g 2 (x) g 1 (x) b 1 g 2 (x) b 2 g 3 (x) b 3 g 4 (x) b 4 g 4 (x) {x g 2 (x)=b 2 } g 3 (x) x 1 W przypadku więcej niż jednego ograniczenia, zarówno jeśli chodzi o ograniczenia w postaci równości, które w punkcie optymalnym muszą być ak- 23
tywne z definicji 6, jak i ograniczenia w postaci nierówności, ale które w punkcie optymalnym są aktywne, mamy do czynienia z sytuacją, jak na rysunku poniżej: x 2 Kombinacja liniowa gradientów ograniczeń aktywnych f(x*)=λ 1 g 1 (x*)+λ 2 g 2 (x*) g 1 (x) c 1 g 1 (x*) g 2 (x)=c 2 g 2 (x) c 2 f(x*) g 2 (x*) g 1 (x)=c 1 x 1 Tym razem gradient funkcji celu musi być kombinacją liniową gradientów ograniczeń aktywnych. W punkcie x oba ograniczenia g 1 (x) c 1 oraz g 2 (x) c 2 są aktywne, a zatem w tym punkcie gradient funkcji celu jest kombinacją liniową gradientów obu ograniczeń. Mnożniki Lagrange a odpowiadające poszczególnym ograniczeniom występują tutaj w roli wag kombinacji liniowej. Oczywiście, aby gradient funckji celu dało się zapisać jako kombinacjłe liniową gradientów ograniczeń aktywnych, te gradienty ograniczeń aktywnych powinny być liniowo niezależne. Inaczej możemy mieć do czynienia z sytuacją, jak na rysunku poniżej: 6 Punkt optymalny musi być punktem dopuszczalnym. 24
x 2 Dlaczego potrzebne jest constraint qualification? g 1 (x*) f(x*) g 2 (x*) x 1 Jedyny punkt dopuszczalny to punkt x, zatem jest on zarazem punktem optymalnym. Jednakże nie da się zapisać f(x ) jako liniową kombinację gradientów g 1 (x ) i g 2 (x ). Liniowa niezależność gradientów wszystkich ograniczeń w postaci równości oraz aktywnych ograniczeń w postaci nierówności jest zwana warunkiem "constraint qualification". Warunek konieczny nie wystarczajacy Nie mozna pozbywac sie nieaktywnych ograniczen Dlaczego x=0 nie mozna zastapic x<=0 i -x<=0. Cofnij sie do h(x)=c i wytlumacz ten punkcik A na rysuneczkach 6 Algorytmy Dane są funkcje f : R N R, g j : R N R, gdzie j = 1,..., J oraz h k : R N R, gdzie k = 1,..., K. Ogólny problem optymalizacyjny w niniejszej części jest następujący: przy warunkach: min f(x) x g j (x) 0, j = 1,..., J; h k (x) = 0, k = 1,..., K; Funkcja Lagrange a dla powyższego problemu ma postać: L(x, u, v) = f(x) J u j g j (x) j=1 K v k h k (x) k=1 25
Warunki Kuhn-Tuckera zapisujemy następująco: J K f(x) u j g j (x) v k h k (x) = 0 j=1 k=1 g j (x) 0, j = 1,..., J; h k (x) = 0, k = 1,..., K; u j g j (x) = 0, j = 1,..., J; u j 0, j = 1,..., J. Możemy teraz zapisać twierdzenie Kuhn-Tuckera o warunku koniecznym istnienia optimum. Twierdzenie. Dla problemu zadanego powyżej, niech f, g j oraz h k będą różniczkowalne a punkt x punktem dozwolonym. Niech I(x ) = {j : g j (x ) = 0} oznacza zbiór aktywnych ograniczeń w postaci nierówności. Niech g j (x ) dla j I oraz h k (x ), dla k = 1,..., K będą liniowo niezależne ("constraint qualification"). Jeśli x jest optymalnym rozwiązaniem problemu, wówczas istnieje wektor mnożników Lagrange a (u, v ), taki że (x, u, v ) spełnia warunki Kuhn-Tuckera. Warunek "constraint qualification" oznacza, że gradienty wszystkich ograniczeń aktywnych w dozwolonym punkcie są liniowo niezależne 7. Zatem każdy optymalny punkt musi spełniać warunki Kuhn-Tuckera, ale nie każdy punkt, który spełnia warunki Kuhn-Tuckera jest optymalny. Jeśli chodzi o punkty, które nie spełniają "constraint qualification", nic się nie da o nich powiedzieć - mogą być optymalne i mogą być nieoptymalne. 6.1 Metoda funkcji kar i barier Algorytm funkcji kar i barier polega na sprowadzeniu problemu optymalizacji z ograniczeniami do serii problemów optymalizacji bez ograniczeń. Dla różnych parametrów funkcji kar i barier wykonuje się wielokrotnie optynalizację funkcji bez ograniczeń, która dana jest nastę pują cym wzorem: P(x, R) = f(x) + Ω(R, g(x), h(x)) gdzie R jest zbiorem parametrów kary a Ω jest funkcją kary, która faworyzuje selekcję punktów dopuszczalnych nad punkty niedopuszczalne. Używa 7 Ograniczenia w postaci równości są aktywne z definicji dla punktu dopuszczalnego, a spośród pozostałych ograniczeń - tych w postaci nierówności - aktywne są tylko te ze zbioru I(x ). 26
się różnych funkcji kary dla ograniczeń w postaci równości i dla ograniczeń w postaci nierówności. Dodatkowo niektóre funkcje Ω nakładają karę tylko na punkty niedozwolone (wówczas nazywają się funkcjami kary lub funkcjami kary zewnętrznej) a niektóre funkcje nie potrafią w ogóle radzić sobie z punktami niedopuszczalnymi i nakładają karę na punkty dozwolone, jeśli są blisko granicy ograniczenia (nazywają się wówczas funkcją bariery lub wewnętrzną funkcją kary). Poniżej przedstawiona będzie jedna wersja metody kar i barier, w której będziemy zajmować się wyłą cznie ograniczeniami w postaci nierówności i funkcja kary bedzie nastę pują cej postaci: Ω = R g(x) 2 { g(x), jeśli g(x) < 0 gdzie g(x) = 0, jeśli g(x) 0 Na początku optymalizuje się f(x)+ω dla małej wartości R, następnie sukcesywnie zwiększa się wartość R i znowu optymalizuje metodami optymalizacji bez ograniczeń dla nowych wartości R. Poniżej znajduje się algorytm: Algorytm 1) Wybierz parametry zakończenia ε 1, ε 2, początkowy punkt x (0), początkowy parametr funkcji kary R (0) oraz parametr zwiększania parametru funkcji kary c > 1. Ustal t = 0. 2) Utwórz P(x (t), R (t) ) = f(x (t) ) + R g(x (t) ) 2. 3) Startując z x (t), znajdź x (t+1) tak, że P(x (t+1), R (t) ) jest minimalne dla ustalonej wartości R (t) - wykorzystaj jedną z metod minimalizacji funkcji wielu zmiennych bez ograniczeń. Do zatrzymania poszukiwań użyj ε 1. 4) Jeśli P(x (t+1), R (t) ) P(x (t), R (t 1) ) ε 2, ustal x T = x (t+1) i Zakończ. W przeciwnym przypadku idź do kroku 5). 5) Wybierz R (t+1) = cr (t). Ustal t = t + 1 i idź do kroku 2). 6.2 Metoda Rosena rzutowanego gradientu Idea metody Rosena jest następująca: Identyfikujemy zbiór ograniczeń aktywnych. Jeśli żadne nie jest aktywne, stosujemy metodę Cauchy ego. 27
W przeciwnym wypadku, znadujemy kierunek metodą Cauchy ego i rzutujemy go na przecięcie przestrzeni ograniczeń aktywnych, żeby znaleźć dopuszczalny kierunek. Algorytm można przedstawić w postaci następującego pseudo-kodu: Algorytm 1) Wybierz punkt początkowy x (0) oraz parametry zakończenia ε 1, ε 2. Ustal t = 0. 2) Zidentyfikuj zbiór ograniczeń aktywnych: I (t) = {j : g j (x (t) ) ε 1, j = 1, 2,..., J} 3) Jeśli t 1 i I (t) = I (t 1) lub I (t) =, ustal s (t) = f(x (t) ) i idź do kroku 4) W przeciwnym wypadku, skonstruuj A, gdzie wierszami są h k i g j, j I (t). Następnie wylicz macierz projekcji P = I A T (AA T ) 1 A i kierunek poszukiwań s (t) = P f(x (t) ) 4) Jeśli s (t) ε 2, idź do kroku 5) W przeciwnym wypadku, wylicz mnożniki (v, u) = (AA T ) 1 A f i znajdź u m = min{u l : l I (t) } * Jeśli u m ε 2, Zakończ. W przeciwnym wypadku, wykasuj ograniczenie m z I (t) i idź do kroku 3). 5) Wyznacz maksymalną długość kroku α max, takie że: g l (w(α)) 0, l / I (t), gdzie każdy punkt wzdłuż s (t) jest reprezentowany przez w(α). 6) Wylicz α z przedziału (0, α max ) poprzez jednowymiarowe poszukiwanie wzdłuż kierunku. 7) Ustal x (t+1) = w(α ), t = t + 1, idź do kroku 2). Zilustrujmy działanie algorytmu przykładem: Dane jest następujące zadanie optymalizacji nieliniowej: 2x1 2 + 2x2 2 2x 1x 2 4x 1 6x 2 min przy warunkach : x 1 + x 2 2 x 1 + 5x 2 5 x 1 0, x 2 0 28
Za punkt startowy przyjmujemy początek układu współrzędnych. W tym punkcie następujące ograniczenia są aktywne (bądź nieaktywne): x 1 x 2 + 2 0 NA x 1 5x 2 + 5 0 NA x 1 0 A x 2 0 A Macierz współczynników ograniczeń aktywnych wynosi: [ ] 1 0 A = 0 1 Liczymy macierz projekcji: [ 1 0 ] [ 1 0 ] [ 0 0 ] P = 0 1 0 1 = 0 0 Zatem Liczymy mnożniki: [ ] 0 s =, s = 0 0 [ ] [ ] [ 1 0 4 4 u = = 0 1 6 6 ] Mniejszy mnożnik odpowiada drugiemu ograniczeniu. Kasujemy to ograniczenie. Zatem : [ ] A = 1 0 Nowa macierz projekcji: [ ] [ 1 0 1 P = 0 1 0 ] ( [ 1 0 ] [ 1 0 ]) 1 [ 1 0 [ ] 0 0 = 0 1 ] Kierunek: [ ] [ ] [ ] 0 0 4 0 s = = 0 1 6 6 Zatem: [ ] [ ] [ 0 0 0 w(α) = x + αs = + α = 0 6 6α Wartość α max wyznaczamy z ograniczeń nieaktywnych: ] 0 6α + 2 0 0 5 6α + 5 0 29
Zatem maksymalne α spełniające te ograniczenia to: α max = 1 6. Teraz szukamy minimum wzdłuż kierunku (problem jednowymiarowy) na przedziale [0, α max ]. min 2 α [0,α max ] 36α2 36α Minimum funkcji kwadratowej jest w α = 1 4, ale jest ono poza przedziałem poszukiwań. Dlatego przyjmujemy rozwiązanie α = 1 6. Zatem następny punkt wynosi: x (1) = w(α ) = [ 0 1 ] Część IV Tutorial z OCTAVE/MATLAB 7 Wprowadzenie Liczby są konwencjonalnie zapisywane w postaci dziesiętnej. Na przykład zapis 12.25 oznacza: 12.25 = 1 10 1 + 2 10 0 + 2 10 1 + 5 10 2 Komputer jest maszyną bardzo prymitywną. Potrafi tylko dodawać i to w dodatku tylko zera i jedynki. Dlatego używa zapisu binarnego złożonego z samych zer i jedynek, później dopiero przekształcając wynik do postaci dziesiętnej, aby wyświetlić na ekranie. Liczba 12.25 może być zapisana w postaci binarnej w następujący sposób: 1100.01 = 1 2 3 + 1 2 2 + 0 2 1 + 0 2 0 + 0 2 1 + 1 2 2 30