#include <HookeJeevesDiscrete.h>
Diagram dziedziczenia dla HookeJeevesDiscrete
Metoda poszukiwań prostych.
Metoda wyznacza kierunek za pomocą kroków próbnych wzdłuż osi, a następnie wykonuje krok roboczy w tym kierunku. Jeśli w nowym punkcie, za pomocą kolejnych kroków próbnych, uda się wyznaczyć kierunek opadania funkcji, wykonywany jest kolejny krok roboczy. Jeśli nie, to długość kroku próbnego () jest zmniejszana (mnożona razy współczynnik ).
Algorytm kończy się w momencie, gdy długość kroku staje się mniejsza niż parametr epsilon
lub przekroczona zostaje dozwolona liczba iteracji.
Informacje wejściowe:
- minimalizowana funkcja zmiennych,
- dowolnie wybrany punkt startowy,
: - długość kroku próbnego,
- współczynnik skracania kroku (),
- warunek stopu - minimalna długość kroku próbnego.
Oznaczenia:
- indeks aktualnego kierunku,
- numer aktualnej iteracji,
- aktualna baza kierunków,
- aktualny punkt próbny,
- najlepszy punkt w k-tym etapie,
- wartość funkcji w punkcie ,
- punkt bazowy dla kroków próbnych w k-tym etapie,
- wartość funkcji w punkcie .
Procedura.
Krok wstępny:
Podstawiamy:
Krok 1:
Badamy wartość funkcji w nowym punkcie próbnym po wykonaniu kroku w i-tym kierunku (wzdłuż i-tej osi):
Jeśli krok był udany (), to zapamiętujemy punkt próbny jako najlepszy:
a następnie przechodzimy do kroku 3.
W przeciwnym wypadku () przechodzimy do kroku 2.
Krok 2:
Wykonujemy krok próbny w przeciwnym kierunku:
Jeśli krok był udany (), to zapamiętujemy punkt próbny jako najlepszy:
Przechodzimy do kroku 3.
Krok 3:
Sprawdzamy, czy wykonano kroki próbne we wszystkich kierunkach:
Jeśli , podstawiamy i ponownie przechodzimy do kroku 1.
Jeśli , przechodzimy do kroku 4.
Krok 4:
Sprawdzamy, czy przy ostatnim przeszukiwaniu kierunków nastąpiła poprawa:
Jeśli tak (), to przechodzimy do kroku 5.
W przeciwnym razie przechodzimy do kroku 6.
Krok 5:
Zapamiętujemy aktualny punkt jako punkt bazowy dla następnego etapu:
Następnie wykonujemy krok roboczy w znalezionym w tym etapie kierunku opadania funkcji:
Przechodzimy do kroku 7.
Krok 6:
Skracamy długość kroku próbnego:
i cofamy się do punktu bazowego:
Przechodzimy do kroku 7.
Krok 7:
Sprawdzamy warunek stopu:
Jeśli , kończymy działanie. Wynikiem jest .
W przeciwnym wypadku podstawiamy , i przechodzimy do kroku 1.
Uwagi.
Metoda zaimplementowana na podstawie programu Marka G. Johnsona (http://www.netlib.org/opt/hooke.c), który powstał na podstawie pseudokodu z "Algorithm 178: Direct Search" Arthura F. Kaupe Jr. i zawiera poprawki Bella i Pike'a (CACM v.9, str. 684, Wrzesień 1966) oraz Tomlina i Smitha ("Remark on Algorithm 178", CACM v.12).
Długość kroków próbnych nie jest zależna od pozycji punktu startowego, w przeciwieństwie do implementacji Johnsona.