#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.
Metody publiczne | |
~HookeJeevesDiscrete (void) | |
Destruktor. | |
virtual std::auto_ptr< Method > | Clone () const |
Tworzy kopię metody. | |
virtual void | UpdateStartingConditions (const Result *result) const |
virtual void | ResetStartingConditions () const |
virtual const wxString & | Name () const |
Zwraca nazwę metody. | |
virtual wxString | ToString (bool standalone=true) const |
Zwraca opis tekstowy metody (nazwa + parametry). | |
virtual MethodIdType | Id () const |
Zwraca ID metody. | |
virtual bool | CanHandle (const ProblemBase *pProblem) const |
Sprawdza, czy dany problem może być rozwiązany tą metodą. | |
Statyczne metody publiczne | |
static MethodIdType | ClassId () |
Zwraca ID metody. | |
Metody chronione | |
HookeJeevesDiscrete (void) | |
Konstruktor domyślny. | |
HookeJeevesDiscrete (const HookeJeevesDiscrete &from) | |
Konstruktor kopiujący. | |
double | CoordinateSearch (const FunctionBase &function, ColumnVector &rx, double tau, HookeJeevesDiscreteIteration &rIterationData) const |
Znajdź kierunek. | |
virtual wxString & | rName () |
Atrybuty chronione | |
DoubleParameter | mTau |
Długość kroku (wersora) próbnego. | |
DoubleParameter | mBeta |
Współczynnik skracania kroku. | |
DoubleParameter | mEpsilon |
Warunek stopu - minimalna długość kroku. | |
ColumnVector | mStartingPoint |
Punkt startowy. | |
ColumnVector | mInitialStartingPoint |
Przyjaciele | |
class | HookeJeevesDiscretePanel |
Panel ustawień metody. |
|
Konstruktor kopiujący.
|
|
Znajdź kierunek. Wykonuje kroki próbne, po kolei dla wszystkich zmiennych, wybierając te kierunki, dla których następuje poprawa. Kroki próbne są dodawane do wyniku.
|