#include <RosenbrockOptimal.h>
Diagram dziedziczenia dla RosenbrockOptimal
Metoda poszukiwań prostych.
Podobnie jak metoda Rosenbrocka z krokiem dyskretnym, polega na przeszukiwaniu w każdej iteracji ortogonalnych kierunków i obracaniu bazy w taki sposób, aby nowe kierunki były kierunkami największej dotychczasowej poprawy. W odróżnieniu od pierwotnego wariantu metody Rosenbrocka, w metodzie z krokiem optymalnym wzdłuż każdego z kierunków wykonywany jest tylko jeden krok - krok o optymalnej długości wyznaczonej przez metodę optymalizacji w kierunku. Dzięki temu każdy krok próbny jest krokiem udanym (kończącym się w punkcie o mniejszej niż poprzednio wartości funkcji celu). Upraszcza to znacznie procedurę.
Informacje wejściowe:
- minimalizowana funkcja zmiennych,
- dowolnie wybrany punkt startowy,
- dokładność właściwego warunku stopu,
warunek stopu - do wyboru:
- minimalna długość kroku w całym etapie,
wybrana metoda minimalizacji w kierunku wraz z parametrami.
Oznaczenia:
- indeks aktualnego kierunku,
- numer aktualnej iteracji,
- aktualna baza kierunków,
- wektor sum długości udanych kroków próbnych w poszczególnych kierunkach,
- aktualny punkt próbny,
- najlepszy punkt w k-tym etapie,
- optymalna długość kroku w i-tym kierunku,
- wektory sum przesunięć wykorzystywane przy obrocie bazy,
- kwadraty norm wektorów wykorzystywane przy normalizacji nowej bazy ().
Procedura.
Krok wstępny:
Podstawiamy:
Krok 1:
Przy pomocy metody optymalizacji w kierunku wyznaczamy optymalną długość kroku i wykonujemy krok:
Zapamiętujemy długość kroku i aktualny punkt:
Podstawiamy i sprawdzamy, czy . Jeśli tak, ponownie wykonujemy krok 1. Jeśli nie, podstawiamy i przechodzimy do kroku 2.
Krok 2:
Sprawdzamy warunek stopu. Jeśli jest on spełniony, to STOP. Wynikiem jest .
W przeciwnym wypadku przechodzimy do kroku 3.
Krok 3:
Dokonujemy obrotu bazy, według algorytmu Palmera:
1) Dla :
Wyliczamy wektory sum przesunięć:
oraz wektor :
2) Tworzymy nowe kierunki ortonormalne :
a) Dla :
b) Na koniec tworzymy kierunek największej poprawy .
W ten sposób otrzymujemy nową bazę kierunków .
Następnie podstawiamy:
i przechodzimy do kroku 1.
Uwagi.
Oryginalna metoda Rosenbrocka wykorzystywała przy ortonormalizacji nowej bazy metodę Grama-Schmidta. W tej implementacji użyto metody Palmera, bardziej wydajnej i tworzącej poprawną bazę również w przypadku, gdy w iteracji istnieją kierunki, w których nie wykonano żadnego udanego kroku.