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