Metoda złotego podziału

Z testwiki
Wersja z dnia 23:13, 15 lip 2024 autorstwa imported>Chrumps (kat.)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Metoda złotego podziałunumeryczna metoda optymalizacji jednowymiarowej funkcji celu.

Algorytm ten może być używany przy minimalizacji kierunkowej razem z innymi metodami optymalizacji funkcji wielowymiarowych, takich jak metody gradientowe (np. metoda gradientu prostego, metoda Newtona) lub bezgradientowe (np. metoda Gaussa-Seidela, metoda Powella).

Innymi metodami optymalizacji jednowymiarowej są metoda dychotomii, metoda punktu środkowego, metoda Newtona.

Zadanie optymalizacji jednowymiarowej

Niech dana będzie funkcja celu f:

Dxf(x)

oraz przedział [a,b]D w którym f jest unimodalna (jest ciągła i posiada co najwyżej jedno ekstremum lokalne). Zadaniem optymalizacji jednowymiarowej funkcji f jest znalezienie jej minimum w przedziale [a,b].

Warto podkreślić fakt, iż algorytmy minimalizacji jednowymiarowej działają poprawnie jedynie dla przedziałów w których funkcja jest unimodalna. Jeżeli zadana funkcja nie posiada tej własności, należy znaleźć jej przedziały unimodalności i zastosować opisywaną metodę do każdego z nich.

Algorytm

Idea algorytmu

Metoda złotego podziału. Badane są wartości funkcji w punktach xL i xR. Zgodnie z rysunkiem f(xL)>f(xR) z czego wynika, iż minimum musi znajdować się w przedziale [xL,b]

Funkcja ciągła f w przedziale [a,b] posiada dokładnie jedno minimum x*. Minimum to można znaleźć poprzez kolejne podziały zadanego przedziału. W tym celu należy obliczyć wartości funkcji w dwóch punktach xL i xR takich, że a<xL<xR<b, a następnie zbadać ich wielkości:

  • Jeżeli f(xL)>f(xR), to szukane minimum znajduje się w przedziale [xL,b].
  • Jeżeli f(xL)<f(xR), to szukane minimum znajduje się w przedziale [a,xR].

W ten sposób można dowolnie zawężać przedział w którym znajduje się minimum, aż do momentu gdy spełniony zostanie warunek:

(ba)ϵ

dla ustalonej dokładności obliczeń ϵ.

Wielkość otrzymanego w wyniku powyższego postępowania przedziału po n krokach wynosi: (b(n)a(n))kn gdzie k jest stałym współczynnikiem o który zmniejszana jest wielkość przedziałów w kolejnych krokach algorytmu.

Złoty podział

W metodzie złotego podziału wartość współczynnika k jest dobrana w taki sposób, aby przy kolejnych iteracjach wykorzystywać obliczoną w poprzednim kroku wartość funkcji jednej z dwóch próbek (f(xL) lub f(xR)). Aby osiągnąć powyższą własność, wartość współczynnika k musi być równa wartości złotego podziału:

k=5120,61803398

skąd wzięła się nazwa metody.

Strategię obliczania minimum funkcji można zapisać:

  1. {xL(0):=b(0)(b(0)a(0))kxR(0):=a(0)+(b(0)a(0))k
  2. Jeśli:
    • f(xL(i))>f(xR(i)){a(i+1):=xL(i)b(i+1):=b(i)xL(i+1):=xR(i)xR(i+1):=a(i+1)+(b(i+1)a(i+1))k
    • f(xL(i))<f(xR(i)){a(i+1):=a(i)b(i+1):=xR(i)xL(i+1):=b(i+1)(b(i+1)a(i+1))kxR(i+1):=xL(i)
  3. Jeśli (b(i+1)a(i+1))ϵ to STOP, w przeciwnym wypadku powtórz punkt 2.

Pseudokod

Algorytm można również zapisać przy pomocy poniższego kodu w języku C:

float GoldenRatioMethod( float a, float b )
{
        // współczynnik złotego podziału
        float k = ( sqrt( 5 ) - 1 ) / 2;

        // lewa i prawa próbka
        float xL = b - k * ( b - a );
        float xR = a + k * ( b - a );

        // pętla póki nie zostanie spełniony warunek stopu
        while ( ( b - a ) > EPSILON )
        {
                // porównaj wartości funkcji celu lewej i prawej próbki
                if ( f( xL ) < f( xR ) )
                {
                        // wybierz przedział [a, xR]
                        b = xR;
                        xR = xL;
                        xL = b - k * ( b - a );
                }
                else
                {
                        // wybierz przedział [xL, b]
                        a = xL;
                        xL = xR;
                        xR = a + k * ( b - a );
                }
        }

        // zwróć wartość środkową przedziału
        return ( a + b ) / 2;
}

Zbieżność metody

Kolejne obliczane przedziały w metodzie złotego podziału są wielkości:

(b(i+1)a(i+1))=k(b(i)a(i))

z czego wynika iż zbieżność metody jest liniowa (rząd zbieżności wynosi 1, zaś współczynnik zbieżności k0,61803398<1). Ilość iteracji N potrzebna do zawężenia przedziału początkowego [a,b] do zadanej dokładności ϵ wynosi:

N=logkϵba

Zobacz też

Bibliografia

  • Fortuna Z., Macukow B., Wąsowski J.: Metody Numeryczne, Wydawnictwa Naukowo-Techniczne, 2006.
  • Stachurski A., Wierzbicki A.: Podstawy optymalizacji, Oficyna Wydawnicza PW, 1999.

Linki zewnętrzne