optim: Optimizare de uz general

Detalii

Rețineți că argumentele după trebuie să corespundă exact.

În mod implicit optim realizează minimizarea, dar va maximiza dacă control$fnscale este negativ. optimHess este o funcție auxiliară pentru a calcula Hessianul într-o etapă ulterioară, dacă hessian = TRUE a fost uitat.

Metoda implicită este o implementare a celei a lui Nelder și Mead (1965), care utilizează numai valorile funcției și este robustă, dar relativ lentă. Aceasta va funcționa rezonabil de bine pentru funcții nediferențiabile.

Metoda "BFGS" este o metodă cvasi-Newton (cunoscută și sub numele de algoritm cu metrică variabilă), mai exact cea publicată simultan în 1970 de Broyden, Fletcher, Goldfarb și Shanno. Aceasta utilizează valorile funcțiilor și gradienții pentru a construi o imagine a suprafeței care urmează să fie optimizată.

Metoda "CG" este o metodă a gradienților conjugați bazată pe cea a lui Fletcher și Reeves (1964) (dar cu opțiunea actualizărilor Polak–Ribiere sau Beale–Sorenson). Metodele cu gradienți conjugați vor fi, în general, mai fragile decât metoda BFGS, dar, deoarece nu stochează o matrice, ele pot avea succes în probleme de optimizare mult mai mari.

Metoda "L-BFGS-B" este cea a lui Byrd et al. (1995) care permite constrângeri de tip box, adică fiecare variabilă poate primi o limită inferioară și/sau superioară. Valoarea inițială trebuie să satisfacă constrângerile. Aceasta utilizează o modificare cu memorie limitată a metodei cvasi-Newton BFGS. Dacă sunt furnizate limite non-triviale, această metodă va fi selectată, cu un avertisment.

Nocedal și Wright (1999) este o referință cuprinzătoare pentru cele trei metode anterioare.

Metoda "SANN" este, în mod implicit, o variantă de recoacere simulată prezentată în Belisle (1992). Simulated-annealing aparține clasei de metode stocastice de optimizare globală. Aceasta utilizează numai valorile funcțiilor, dar este relativ lentă. De asemenea, funcționează pentru funcții nediferențiabile. Această implementare utilizează funcția Metropolis pentru probabilitatea de acceptare. În mod implicit, următorul punct candidat este generat de un nucleu Markov Gaussian cu o scară proporțională cu temperatura reală. În cazul în care se oferă o funcție de generare a unui nou punct candidat, metoda "SANN" poate fi utilizată și pentru a rezolva probleme de optimizare combinatorie. Temperaturile sunt diminuate în conformitate cu programul logaritmic de răcire, așa cum este prezentat în Belisle (1992, p.890); mai exact, temperatura este setată la temp / log(((t-1) %/% tmax)*tmax + exp(1)), unde t este pasul de iterație curent și temp și tmax pot fi specificate prin control, a se vedea mai jos. Rețineți că metoda "SANN" depinde în mod critic de setările parametrilor de control. Nu este o metodă de uz general, dar poate fi foarte utilă pentru a ajunge la o valoare bună pe o suprafață foarte aspră.

Metoda "Brent" este numai pentru probleme unidimensionale, folosind optimize(). Poate fi utilă în cazurile în care optim() este utilizată în interiorul altor funcții în care poate fi specificat doar method, cum ar fi în mle din pachetul stats4.

Funcția fn poate returna NA sau Inf dacă funcția nu poate fi evaluată la valoarea furnizată, dar valoarea inițială trebuie să aibă o valoare finită calculabilă de fn. (Cu excepția metodei "L-BFGS-B", unde valorile trebuie să fie întotdeauna finite.)

optim poate fi utilizată în mod recursiv și atât pentru un singur parametru, cât și pentru mai mulți. Acceptă, de asemenea, un par de lungime zero și doar evaluează funcția cu acel argument.

Argumentul control este o listă care poate furniza oricare dintre următoarele componente:

trace

Întreg nenegativ. Dacă este pozitiv, se produc informații de urmărire privind progresul optimizării. Valorile mai mari pot produce mai multe informații de urmărire: pentru metoda "L-BFGS-B" există șase niveluri de urmărire. (Pentru a înțelege exact ce fac acestea, consultați codul sursă: nivelurile mai înalte oferă mai multe detalii.)

fnscale

O scalare generală care trebuie aplicată la valoarea lui fn și gr în timpul optimizării. Dacă este negativă, transformă problema într-o problemă de maximizare. Optimizarea se realizează pe fn(par)/fnscale.

parscale

Un vector de valori de scalare pentru parametri. Optimizarea se efectuează pe par/parscale și acestea ar trebui să fie comparabile în sensul că o schimbare de unitate în orice element produce aproximativ o schimbare de unitate în valoarea scalată. Nu se utilizează (și nici nu este necesar) pentru method = "Brent".

ndeps

Un vector de mărimi ale treptelor pentru aproximarea în diferență finită a gradientului, la scara par/parscale. Valoarea implicită este 1e-3.

maxit

Numărul maxim de iterații. Valoarea implicită este 100 pentru metodele bazate pe derivată și 500 pentru "Nelder-Mead".

Pentru "SANN" maxit oferă numărul total de evaluări ale funcției: nu există niciun alt criteriu de oprire. Valoarea implicită este 10000.

abstol

Toleranța de convergență absolută. Utilă numai pentru funcții non-negative, ca toleranță pentru atingerea valorii zero.

reltol

Toleranța de convergență relativă. Algoritmul se oprește dacă nu reușește să reducă valoarea cu un factor de reltol * (abs(val) + reltol) la un pas. Valoarea implicită este sqrt(.Machine$double.eps), de obicei aproximativ 1e-8.

alpha,beta,gamma

Parametri de scalare pentru metoda "Nelder-Mead". alpha este factorul de reflexie (implicit 1,0), beta factorul de contracție (0,5) și gamma factorul de expansiune (2,0).

REPORT

Frecvența rapoartelor pentru metodele "BFGS", "L-BFGS-B" și "SANN" dacă control$trace este pozitivă. Valoarea implicită este la fiecare 10 iterații pentru "BFGS" și "L-BFGS-B", sau la fiecare 100 de temperaturi pentru "SANN".

warn.1d.NelderMead

a logical care indică dacă metoda (implicită) "Nelder-Mean" ar trebui să semnalizeze un avertisment atunci când este utilizată pentru minimizarea unidimensională. Deoarece avertismentul este uneori nepotrivit, îl puteți suprima prin setarea acestei opțiuni la false.

type

pentru metoda gradațiilor conjugate. Ia valoarea 1 pentru actualizarea Fletcher–Reeves, 2 pentru Polak–Ribiere și 3 pentru Beale–Sorenson.

lmm

este un număr întreg care dă numărul de actualizări BFGS reținute în metoda "L-BFGS-B", Valoarea implicită este 5.

factr

controlează convergența metodei "L-BFGS-B". Convergența are loc atunci când reducerea obiectivului se încadrează în acest factor al toleranței mașinii. Valoarea implicită este 1e7, adică o toleranță de aproximativ 1e-8.

pgtol

ajută la controlul convergenței metodei "L-BFGS-B". Este o toleranță asupra gradientului proiectat în direcția de căutare curentă. Aceasta este implicită la zero, atunci când verificarea este suprimată.

temp

controlează metoda "SANN". Este temperatura de pornire pentru programul de răcire. Valoarea implicită este 10.

tmax

este numărul de evaluări ale funcției la fiecare temperatură pentru metoda "SANN". Valoarea implicită este 10.

Toate numele date la par vor fi copiate în vectorii trecuți la fn și gr. Rețineți că niciun alt atribut al lui par nu este copiat.

Vectorialul de parametri transmis către fn are o semantică specială și poate fi partajat între apeluri: funcția nu trebuie să îl modifice sau să îl copieze.

.