#include <AlphaDivision.h>
Diagram dziedziczenia dla AlphaDivision
Metoda optymalizacji w kierunku polegająca na stopniowym skracaniu zadanego odcinka (patrz SectionLineSearch).
Skracanie odcinka następuje w każdej iteracji, na podstawie badania wartości funkcji w dwóch punktach: i . Punkty te rozmieszczane są w taki sposób, aby dzieliły odcinek symetrycznie:
gdzie:
- końce zadanego odcinka,
- współczynnik podziału odcinka zadany przez użytkownika,
Dzięki takiemu podziałowi w każdej iteracji zachodzi:
Redukcja odcinka polega na odrzuceniu jednego z jego skrajnych fragmentów: lub , w zależności od wartości funkcji w punktach próbnych. W każdej iteracji odcinek jest więc skracany o długość:
W przypadku gdy metoda działa samodzielnie, wynikiem jest odcinek ; jeśli służy tylko do minimalizacji kierunkowej przy rozwiązywaniu problemu optymalizacji funkcji wielu zmiennych, wynikiem jest punkt - środek tego odcinka: .
Informacje wejściowe:
- minimalizowana funkcja jednej zmiennej,
- lewy kraniec początkowego przedziału poszukiwań,
- prawy kraniec początkowego przedziału poszukiwań,
- współczynnik podziału odcinka,
- wymagana dokładność (graniczna długość odcinka).
Oznaczenia:
- numer aktualnej iteracji,
- lewy kraniec aktualnego przedziału poszukiwań,
- prawy kraniec aktualnego przedziału poszukiwań,
- punkt próbny znajdujący się po lewej stronie,
- punkt próbny znajdujący się po prawej stronie,
- wartość funkcji w punkcie ,
- wartość funkcji w punkcie .
Procedura.
Krok wstępny:
Podstawiamy:
Krok 1:
Jeśli , to przechodzimy do kroku 2. W przeciwnym razie przechodzimy do kroku 3.
Krok 2:
Redukujemy odcinek do :
i dokonujemy podziału otrzymanego odcinka:
Przechodzimy do kroku 4.
Krok 3:
Redukujemy odcinek do :
i dokonujemy podziału otrzymanego odcinka:
Przechodzimy do kroku 4.
Krok 4:
Sprawdzamy warunek stopu:
Jeśli , to STOP. W przeciwnym razie podstawiamy i przechodzimy do kroku 1.
Szczególnym, najczęściej stosowanym przypadkiem metody jest algorytm z parametrem . Dla tej wartości parametru odcinek jest w każdej iteracji dzielony przez punkty próbne na pododcinki spełniające warunek "złotego podziału":
Stąd:
Dzięki ostatniej własności procedura podziałów odcinka upraszcza się: w każdej iteracji wyznaczamy tylko jeden nowy punkt próbny i, co za tym idzie, tylko raz obliczamy wartość funkcji.
Procedura.
Krok wstępny:
Podstawiamy:
Krok 1:
Jeśli , to przechodzimy do kroku 2. W przeciwnym razie przechodzimy do kroku 3.
Krok 2:
Redukujemy odcinek do :
i dokonujemy podziału otrzymanego odcinka:
Przechodzimy do kroku 4.
Krok 3:
Redukujemy odcinek do :
i dokonujemy podziału otrzymanego odcinka:
Przechodzimy do kroku 4.
Krok 4:
Sprawdzamy warunek stopu:
Jeśli , to STOP. W przeciwnym razie podstawiamy i przechodzimy do kroku 1.
Taki wariant metody nazywany jest popularnie metodą złotego podziału.