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