#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.