#include <QuadraticApproximation.h>
Diagram dziedziczenia dla QuadraticApproximation
Metoda optymalizacji w kierunku polegająca na stopniowym skracaniu zadanego odcinka (patrz SectionLineSearch).
Opiera się na założeniu, że w otoczeniu minimum funkcja celu może być aproksymowana funkcją kwadratową.
W każdej iteracji dokonywana jest minimalizacja funkcji kwadratowej zbudowanej na podstawie wartości funkcji celu w trzech punktach próbnych: , i . Do skonstruowania takiej funkcji aproksymującej wykorzystywana jest interpolacja Lagrange'a:
Pierwsza pochodna tej funkcji zeruje się w punkcie:
Algorytm polega na zastępowaniu jednego z punktów próbnych , , punktem i skracaniu odcinka w taki sposób, aby obejmował on estymowane minimum.
Informacje wejściowe:
- minimalizowana funkcja jednej zmiennej,
- lewy kraniec początkowego przedziału poszukiwań,
- prawy kraniec początkowego przedziału poszukiwań,
- wymagana dokładność (graniczna długość odcinka, minimalna odległość od punktów próbnych).
Oznaczenia:
- numer aktualnej iteracji,
- lewy kraniec aktualnego przedziału poszukiwań - pierwszy punkt próbny,
- drugi punkt próbny,
- prawy kraniec aktualnego przedziału poszukiwań - trzeci punkt próbny,
- wartość funkcji celu w punkcie ,
- wartość funkcji celu w punkcie ,
- wartość funkcji celu w punkcie ,
- punkt zerowania się pierwszej pochodnej funkcji aproksymującej,
- wartość funkcji celu w punkcie .
Procedura.
Krok wstępny:
Podstawiamy:
Krok 1:
Znajdujemy potencjalne minimum funkcji aproksymującej:
Jeśli mianownik tego wyrażenia jest liczbą nieujemną, przechodzimy do kroku 8.
Podstawiamy i przechodzimy do kroku 2.
Krok 2:
Sprawdzamy, czy znajduje się wystarczająco blisko jednego z punktów próbnych:
Jeśli lub lub , to przechodzimy do kroku 7.
Sprawdzamy, czy leży wewnątrz badanego odcinka:
Jeśli , to przechodzimy do kroku 3. W przeciwnym wypadku przechodzimy do kroku 9.
Krok 3:
Jeśli , przechodzimy do kroku 4. W przeciwnym wypadku przechodzimy do kroku 5.
Krok 4:
Jeśli , redukujemy odcinek do :
Przechodzimy do kroku 6.
Jeśli , redukujemy odcinek do :
Przechodzimy do kroku 6.
Krok 5:
Jeśli , redukujemy odcinek do :
Przechodzimy do kroku 6.
Jeśli , redukujemy odcinek do :
Przechodzimy do kroku 6.
Krok 6:
Sprawdzamy długość odcinka po redukcji:
Jeśli , przechodzimy do kroku 1. W przeciwnym wypadku przechodzimy do kroku 7.
Krok 7:
Kończymy procedurę. Jeśli , wynikiem jest . W przeciwnym wypadku wynikiem jest .
Krok 8:
Kończymy procedurę z komunikatem błędu: "Optymalizacja nie powiodła się - znaleziono maksimum lub punkt siodłowy funkcji aproksymującej."
Krok 9:
Kończymy procedurę z komunikatem błędu: "Optymalizacja nie powiodła się - znalezione minimum funkcji aproksymującej znajduje się poza badanym odcinkiem."
Metoda zaimplementowana na podstawie opisu zamieszczonego w:
Schwefel H.-P.: Evolution and Optimum Seeking. Nowy Jork, Wiley-Interscience 1995.