optim: Generel optimering

Detaljer

Bemærk, at argumenter efter skal passe nøjagtigt sammen.

Som standard udfører optim minimering, men den vil maksimere, hvis control$fnscale er negativ. optimHess er en hjælpefunktion til at beregne Hessian på et senere tidspunkt, hvis hessian = TRUE blev glemt.

Standardmetoden er en implementering af den af Nelder og Mead (1965), som kun bruger funktionsværdier og er robust, men relativt langsom. Den vil fungere rimeligt godt for ikke-differentierbare funktioner.

Metode "BFGS" er en quasi-Newton-metode (også kendt som en algoritme med variabel metrik), nærmere bestemt den, der blev offentliggjort samtidig i 1970 af Broyden, Fletcher, Goldfarb og Shanno. Denne metode anvender funktionsværdier og gradienter til at opbygge et billede af den overflade, der skal optimeres.

Metode "CG" er en konjugeret gradientermetode baseret på den af Fletcher og Reeves (1964) (men med mulighed for Polak–Ribiere- eller Beale–Sorenson-opdateringer). Konjugerede gradientmetoder vil generelt være mere skrøbelige end BFGS-metoden, men da de ikke lagrer en matrix, kan de være vellykkede i meget større optimeringsproblemer.

Metode "L-BFGS-B" er den af Byrd et. al. (1995), som tillader boksbegrænsninger, dvs. at hver variabel kan have en nedre og/eller øvre grænse. Den oprindelige værdi skal opfylde begrænsningerne. Denne metode anvender en ændring af BFGS-kvasi-newton-metoden med begrænset hukommelse. Hvis der angives ikke-trivielle grænser, vælges denne metode med en advarsel.

Nocedal og Wright (1999) er en omfattende reference for de tre foregående metoder.

Metode "SANN" er som standard en variant af simuleret annealing givet i Belisle (1992). Simulated-annealing hører til klassen af stokastiske globale optimeringsmetoder. Den anvender kun funktionsværdier, men er relativt langsom. Den fungerer også for ikke-differentierbare funktioner. Denne implementering anvender Metropolis-funktionen til accept-sandsynligheden. Som standard genereres det næste kandidatpunkt fra en Gaussisk Markov-kernel med en skala, der er proportional med den faktiske temperatur. Hvis der er angivet en funktion til at generere et nyt kandidatpunkt, kan metode "SANN" også anvendes til at løse kombinatoriske optimeringsproblemer. Temperaturen sænkes i henhold til den logaritmiske køleskemaplan som angivet i Belisle (1992, s. 890); nærmere bestemt sættes temperaturen til temp / log(((t-1) %/% tmax)*tmax + exp(1)), hvor t er det aktuelle iterationstrin, og temp og tmax kan specificeres via control, jf. nedenfor. Bemærk, at "SANN"-metoden er kritisk afhængig af indstillingerne af kontrolparametrene. Det er ikke en metode til generelle formål, men den kan være meget nyttig til at nå frem til en god værdi på en meget ru overflade.

Metode "Brent" er kun for endimensionale problemer, idet optimize() anvendes. Den kan være nyttig i tilfælde, hvor optim() bruges inde i andre funktioner, hvor kun method kan angives, f.eks. i mle fra pakke stats4.

Funktion fn kan returnere NA eller Inf, hvis funktionen ikke kan evalueres ved den angivne værdi, men begyndelsesværdien skal have en beregnelig finit værdi af fn. (Undtagen for metode "L-BFGS-B", hvor værdierne altid skal være finitte.)

optim kan bruges rekursivt og for en enkelt parameter såvel som for mange. Den accepterer også en par af nul længde og evaluerer blot funktionen med dette argument.

controlArgumentet control er en liste, der kan levere en af følgende komponenter:

trace

Non-negativt heltal. Hvis den er positiv, produceres der sporingsoplysninger om optimeringens forløb. Højere værdier kan give flere sporingsoplysninger: for metode "L-BFGS-B" er der seks sporingsniveauer. (For at forstå præcis, hvad disse gør, se kildekoden: højere niveauer giver flere detaljer.)

fnscale

En samlet skalering, der skal anvendes på værdien af fn og gr under optimeringen. Hvis den er negativ, forvandler den problemet til et maksimeringsproblem. Optimeringen udføres på fn(par)/fnscale.

parscale

En vektor af skaleringsværdier for parametrene. Optimeringen udføres på par/parscale, og disse bør være sammenlignelige i den forstand, at en ændring af en enhed i et element giver ca. en ændring af en enhed i den skalerede værdi. Ikke anvendt (og heller ikke nødvendigt)for method = "Brent".

ndeps

En vektor af trinstørrelser for finite-difference-approximationen af gradienten på skala par/parscale. Standardværdien er 1e-3.

maxit

Det maksimale antal iterationer. Standardværdien er 100 for de derivatbaserede metoder og 500 for "Nelder-Mead".

For "SANN" maxit angiver det samlede antal funktionsvurderinger: der er intet andet stopkriterium. Standardværdien er 10000.

abstol

Den absolutte konvergenstolerance. Kun nyttig for ikke-negative funktioner, som en tolerance for at nå nul.

reltol

Relativ konvergenstolerance. Algoritmen stopper, hvis den ikke er i stand til at reducere værdien med en faktor reltol * (abs(val) + reltol) på et trin. Standardværdien er sqrt(.Machine$double.eps), typisk ca. 1e-8.

alpha,beta,gamma

Skaleringsparametre for "Nelder-Mead"-metoden. alpha er refleksionsfaktoren (standard 1,0), beta er sammentrækningsfaktoren (0,5) og gamma er ekspansionsfaktoren (2,0).

REPORT

Frekvensen af indberetninger for "BFGS", "L-BFGS-B" og "SANN"-metoderne, hvis control$trace er positiv. Standardværdien er hver 10. gentagelse for "BFGS" og "L-BFGS-B" eller hver 100 temperaturer for "SANN".

warn.1d.NelderMead

a logical, der angiver, om (standard)"Nelder-Mean"-metoden "Nelder-Mean" skal signalere en advarsel, når den anvendes til endimensional minimering. Da advarslen nogle gange er uhensigtsmæssig, kan du undertrykke den ved at indstille denne indstilling til false.

type

for konjugat-gradienter-metoden. Tager værdien 1 for Fletcher–Reeves-opdateringen, 2 for Polak–Ribiere og 3 for Beale–Sorenson.

lmm

er et heltal, der angiver antallet af BFGS-opdateringer, der bevares i "L-BFGS-B"-metoden, Det er standardværdien 5.

factr

styrer konvergensen af "L-BFGS-B"-metoden. Der er konvergens, når reduktionen af målet er inden for denne faktor af maskintolerancen. Standardværdien er 1e7, dvs. en tolerance på ca. 1e-8.

pgtol

hjælper med at kontrollere konvergensen af "L-BFGS-B"-metoden. Det er en tolerance på den projicerede gradient i den aktuelle søgeretning. Den er som standard nul, når kontrollen er undertrykt.

temp

styrer "SANN"-metoden. Det er starttemperaturen for køleskemaet. Standardværdien er 10.

tmax

er antallet af funktionsvurderinger ved hver temperatur for "SANN"-metoden. Standardværdien er 10.

Alle navne, der er givet til par, vil blive kopieret til de vektorer, der overføres til fn og gr. Bemærk, at ingen andre attributter for par kopieres over.

Parametervektoren, der overdrages til fn, har en særlig semantik og kan deles mellem kald: funktionen bør ikke ændre eller kopiere den.