optim: General-purpose Optimization

Details

Zauważ, że argumenty po muszą być dokładnie dopasowane.

Domyślnie optim wykonuje minimalizację, ale będzie maksymalizować, jeśli control$fnscale jest ujemne. optimHess jest funkcją pomocniczą do obliczania hesjanu na późniejszym etapie, jeśli hessian = TRUE został zapomniany.

Domyślną metodą jest implementacja metody Neldera i Meada (1965), która używa tylko wartości funkcji i jest solidna, ale stosunkowo wolna. Będzie ona działać dość dobrze dla funkcji nieróżniczkowalnych.

Metoda "BFGS" jest metodą quasi-Newtona (znaną również jako algorytm zmiennej metryki), w szczególności opublikowaną jednocześnie w 1970 roku przez Broydena, Fletchera, Goldfarba i Shanno. Wykorzystuje ona wartości funkcji i gradientów do zbudowania obrazu powierzchni, która ma być zoptymalizowana.

Metoda "CG" jest metodą gradientów sprzężonych opartą na metodzie Fletchera i Reevesa (1964) (ale z opcją aktualizacji Polak–Ribiere lub Beale–Sorenson). Metody gradientów sprzężonych będą ogólnie bardziej kruche niż metoda BFGS, ale ponieważ nie przechowują macierzy, mogą być skuteczne w znacznie większych problemach optymalizacyjnych.

Metoda "L-BFGS-B" jest metodą Byrd et. al. (1995), która pozwala na ograniczenia pudełkowe, czyli każda zmienna może otrzymać dolną i/lub górną granicę. Wartość początkowa musi spełniać te ograniczenia. Wykorzystuje ona ograniczoną pamięciowo modyfikację quasi-Newtonowskiej metody BFGS. Jeśli zostaną podane nietrywialne granice, ta metoda zostanie wybrana z ostrzeżeniem.

Nocedal i Wright (1999) to wyczerpujące odniesienie do poprzednich trzech metod.

Metoda "SANN" jest domyślnie wariantem symulowanego wyżarzania podanego w Belisle (1992). Symulowane wyżarzanie należy do klasy stochastycznych metod optymalizacji globalnej. Używa tylko wartości funkcji, ale jest stosunkowo wolne. Będzie również działać dla funkcji nieróżniczkowalnych. Ta implementacja wykorzystuje funkcję Metropolis dla prawdopodobieństwa akceptacji. Domyślnie następny punkt kandydujący jest generowany z gaussowskiego jądra Markowa o skali proporcjonalnej do rzeczywistej temperatury. Jeśli podana jest funkcja generująca nowy punkt kandydujący, metoda "SANN" może być również użyta do rozwiązywania problemów optymalizacji kombinatorycznej. Temperatury są obniżane zgodnie z logarytmicznym harmonogramem chłodzenia podanym w Belisle (1992, s.890); w szczególności, temperatura jest ustawiana na temp / log(((t-1) %/% tmax)*tmax + exp(1)), gdzie t jest bieżącym krokiem iteracji, a temp i tmax są określane przez control, patrz poniżej. Zauważ, że metoda "SANN" zależy w decydującym stopniu od ustawień parametrów sterowania. Nie jest to metoda ogólnego zastosowania, ale może być bardzo użyteczna w dochodzeniu do dobrych wartości na bardzo chropowatej powierzchni.

Metoda "Brent" jest tylko dla problemów jednowymiarowych, używając optimize(). Może być przydatna w przypadkach, gdy optim() jest używana wewnątrz innych funkcji, w których można określić tylko method, jak np. w mle z pakietu stats4.

Funkcja fn może zwrócić NA lub Inf, jeśli funkcja nie może być obliczona przy dostarczonej wartości, ale wartość początkowa musi mieć obliczalną wartość skończoną fn. (Z wyjątkiem metody "L-BFGS-B", gdzie wartości zawsze powinny być skończone.)

optim może być używane rekurencyjnie, zarówno dla pojedynczego parametru, jak i wielu. Akceptuje również par o zerowej długości i po prostu ocenia funkcję z tym argumentem.

Przedstawiony control argument jest listą, która może dostarczyć dowolny z następujących składników:

trace

Nieujemna liczba całkowita. Jeśli jest dodatnia, tworzone są informacje o postępie optymalizacji. Wyższe wartości mogą produkować więcej informacji o śledzeniu: dla metody "L-BFGS-B" istnieje sześć poziomów śledzenia. (Aby dokładnie zrozumieć, co one robią, zobacz kod źródłowy: wyższe poziomy dają więcej szczegółów.)

fnscale

Ogólne skalowanie, które ma być zastosowane do wartości fn i gr podczas optymalizacji. Jeśli jest ujemne, zamienia problem w problem maksymalizacji. Optymalizacja jest wykonywana na fn(par)/fnscale.

parscale

Wektor wartości skalowania dla parametrów. Optymalizacja jest wykonywana na par/parscale i powinny one być porównywalne w tym sensie, że zmiana jednostki w dowolnym elemencie powoduje około jednostkową zmianę w wartości skalowanej. Nieużywane (ani niepotrzebne) dla method = "Brent".

ndeps

Wektor wielkości kroków dla aproksymacji gradientu metodą różnic skończonych, w skali par/parscale. Defaults to 1e-3.

maxit

Maksymalna liczba iteracji. Defaults to 100 for the derivative-based methods, and 500 for "Nelder-Mead".

For "SANN" maxit gives the total number of function evaluations: there is no other stopping criterion. Defaults to 10000.

abstol

Tolerancja zbieżności bezwzględnej. Użyteczne tylko dla funkcji nieujemnych, jako tolerancja osiągnięcia zera.

reltol

Tolerancja zbieżności względnej. Algorytm zatrzymuje się, jeśli nie jest w stanie zmniejszyć wartości o współczynnik reltol * (abs(val) + reltol) w kroku. Domyślnie sqrt(.Machine$double.eps), typowo około 1e-8.

alpha,beta,gamma

Parametry skalowania dla metody "Nelder-Mead". alpha jest współczynnikiem odbicia (domyślnie 1,0), beta współczynnikiem skurczenia (0,5), a gamma współczynnikiem rozszerzenia (2,0).

REPORT

Częstotliwość raportów dla metod "BFGS", "L-BFGS-B" i "SANN", jeśli control$trace jest dodatnia. Domyślnie co 10 iteracji dla "BFGS" i "L-BFGS-B" lub co 100 temperatur dla "SANN".

warn.1d.NelderMead

a logicalwskazanie, czy (domyślna) metoda "Nelder-Mean" powinna sygnalizować ostrzeżenie, gdy jest używana do minimalizacji jednowymiarowej. Ponieważ ostrzeżenie jest czasami niewłaściwe, można je wyłączyć, ustawiając tę opcję na false.

type

dla metody conjugate-gradients. Przyjmuje wartość 1 dla aktualizacji Fletcher–Reeves, 2 dla Polak–Ribiere i 3 dla Beale–Sorenson.

lmm

jest liczbą całkowitą podającą liczbę aktualizacji BFGS zachowanych w metodzie "L-BFGS-B", Domyślnie wynosi 5.

factr

kontroluje zbieżność metody "L-BFGS-B". Zbieżność występuje, gdy redukcja celu mieści się w tym współczynniku tolerancji maszyny. Domyślnie jest to 1e7, czyli tolerancja około 1e-8.

pgtol

pomaga kontrolować zbieżność metody "L-BFGS-B". Jest to tolerancja na projektowanym gradiencie w bieżącym kierunku przeszukiwania. Wartość domyślna to zero, gdy kontrola jest wyłączona.

temp

pomaga kontrolować metodę "SANN". Jest to temperatura początkowa dla harmonogramu chłodzenia. Domyślnie 10.

tmax

jest to liczba ocen funkcji w każdej temperaturze dla metody "SANN". Defaults to 10.

Dowolne nazwy podane do par zostaną skopiowane do wektorów przekazanych do fn i gr. Zauważ, że żadne inne atrybuty par nie są kopiowane.

Wektor parametrów przekazany do fn ma specjalną semantykę i może być współdzielony między wywołaniami: funkcja nie powinna go zmieniać ani kopiować.

.