Detaljer
Notera att argument efter …
måste matchas exakt.
Som standard utför optim
minimering, men det kommer att maximera om control$fnscale
är negativt. optimHess
är en hjälpfunktion för att beräkna Hessian i ett senare skede om hessian = TRUE
har glömts bort.
Standardmetoden är en implementering av den av Nelder och Mead (1965), som endast använder funktionsvärden och som är robust men relativt långsam. Den kommer att fungera någorlunda bra för icke-differentierbara funktioner.
Metod "BFGS"
är en kvasi-Newton-metod (även känd som en algoritm med variabla metriska mått), närmare bestämt den som publicerades samtidigt 1970 av Broyden, Fletcher, Goldfarb och Shanno. Denna använder funktionsvärden och gradienter för att bygga upp en bild av den yta som skall optimeras.
Metod "CG"
är en metod med konjugerade gradienter baserad på den av Fletcher och Reeves (1964) (men med möjlighet till Polak–Ribiere- eller Beale–Sorenson-uppdateringar). Konjugerade gradientmetoder är i allmänhet mer ömtåliga än BFGS-metoden, men eftersom de inte lagrar en matris kan de vara framgångsrika i mycket större optimeringsproblem.
Metod "L-BFGS-B"
är den av Byrd et. al. (1995) som tillåter boxbegränsningar, det vill säga att varje variabel kan ges en nedre och/eller övre gräns. Det ursprungliga värdet måste uppfylla begränsningarna. Här används en modifiering med begränsat minne av BFGS kvasinewtonmetoden. Om icke-triviala gränser anges kommer denna metod att väljas, med en varning.
Nocedal och Wright (1999) är en omfattande referens för de tre föregående metoderna.
Metod "SANN"
är som standard en variant av simulerad glödgning som ges i Belisle (1992). Simulated-annealing tillhör klassen av stokastiska globala optimeringsmetoder. Den använder endast funktionsvärden men är relativt långsam. Den fungerar även för icke-differentierbara funktioner. I detta genomförande används Metropolis-funktionen för acceptanssannolikheten. Som standard genereras nästa kandidatpunkt från en Gaussisk Markov-kärna med en skala som är proportionell mot den faktiska temperaturen. Om en funktion för att generera en ny kandidatpunkt ges kan metod "SANN"
också användas för att lösa kombinatoriska optimeringsproblem. Temperaturen sänks i enlighet med det logaritmiska avkylningsschema som anges i Belisle (1992, s. 890); närmare bestämt sätts temperaturen till temp / log(((t-1) %/% tmax)*tmax + exp(1))
, där t
är det aktuella iterationssteget och temp
och tmax
kan specificeras via control
, se nedan. Observera att "SANN"
-metoden är kritiskt beroende av inställningarna av styrparametrarna. Det är inte en generell metod men kan vara mycket användbar för att få fram ett bra värde på en mycket grov yta.
Metod "Brent"
är endast för endimensionella problem, med hjälp av optimize()
. Den kan vara användbar i fall där optim()
används inuti andra funktioner där endast method
kan anges, till exempel i mle
från paketet stats4.
Funktion fn
kan returnera NA
eller Inf
om funktionen inte kan utvärderas vid det levererade värdet, men det initiala värdet måste ha ett beräkningsbart ändligt värde av fn
. (Utom för metod "L-BFGS-B"
där värdena alltid ska vara finita.)
optim
kan användas rekursivt, och för en enda parameter såväl som för många. Den accepterar också en par
med noll längd och utvärderar bara funktionen med det argumentet.
Argumentet control
är en lista som kan innehålla någon av följande komponenter:
trace
Non-negativt heltal. Om det är positivt produceras spårningsinformation om hur optimeringen fortskrider. Högre värden kan ge mer spårningsinformation: för metod "L-BFGS-B"
finns det sex spårningsnivåer. (För att förstå exakt vad dessa gör se källkoden: högre nivåer ger mer detaljer.)
fnscale
En övergripande skalning som ska tillämpas på värdet av fn
och gr
under optimeringen. Om den är negativ förvandlas problemet till ett maximeringsproblem. Optimeringen utförs på fn(par)/fnscale
.
parscale
En vektor med skalningsvärden för parametrarna. Optimering utförs på par/parscale
och dessa bör vara jämförbara i den meningen att en enhetsförändring i något element ger ungefär en enhetsförändring i det skalade värdet. Används inte (behövs inte heller)för method = "Brent"
.
ndeps
En vektor med stegstorlekar för finitdifferensapproximationen av gradienten, i skala par/parscale
. Standardvärdet är 1e-3
.
maxit
Det maximala antalet iterationer. Standardvärdet är 100
för de derivatbaserade metoderna och 500
för "Nelder-Mead"
.
För "SANN"
maxit
ger det totala antalet funktionsutvärderingar: det finns inget annat stoppkriterium. Standardvärdet är 10000
.
abstol
Den absoluta konvergenstoleransen. Endast användbar för icke-negativa funktioner, som en tolerans för att nå noll.
reltol
Relativ konvergenstolerans. Algoritmen stannar om den inte kan minska värdet med en faktor reltol * (abs(val) + reltol)
i ett steg. Standardvärdet är sqrt(.Machine$double.eps)
, vanligtvis cirka 1e-8
.
alpha
,beta
,gamma
Skaleringsparametrar för "Nelder-Mead"
-metoden. alpha
är reflektionsfaktorn (standard 1,0), beta
är kontraktionsfaktorn (0,5) och gamma
är expansionsfaktorn (2,0).
REPORT
Frekvensen av rapporter för metoderna "BFGS"
, "L-BFGS-B"
och "SANN"
om control$trace
är positiv. Standardvärdet är var 10:e iteration för "BFGS"
och "L-BFGS-B"
, eller var 100:e temperatur för "SANN"
.
warn.1d.NelderMead
a logical
som anger om (standard) "Nelder-Mean"
-metoden "Nelder-Mean"
ska signalera en varning när den används för endimensionell minimering. Eftersom varningen ibland är olämplig kan du undertrycka den genom att ställa in detta alternativ till false.
type
för konjugatgradientmetoden. Tar värdet 1
för Fletcher–Reeves uppdatering, 2
för Polak–Ribiere och 3
för Beale–Sorenson.
lmm
är ett heltal som ger antalet BFGS-uppdateringar som behålls i "L-BFGS-B"
-metoden, Standardvärdet är 5
.
factr
kontrollerar konvergensen för "L-BFGS-B"
-metoden. Konvergens inträffar när minskningen av målet ligger inom denna faktor av maskintoleransen. Standardvärdet är 1e7
, det vill säga en tolerans på cirka 1e-8
.
pgtol
Hjälper till att kontrollera konvergensen för "L-BFGS-B"
-metoden. Det är en tolerans för den projicerade gradienten i den aktuella sökriktningen. Den är som standard noll, när kontrollen är undertryckt.
temp
kontrollerar "SANN"
-metoden. Det är starttemperaturen för kylningsschemat. Standardvärdet är 10
.
tmax
är antalet funktionsutvärderingar vid varje temperatur för "SANN"
-metoden. Standardvärdet är 10
.
Alla namn som ges till par
kopieras till de vektorer som skickas till fn
och gr
. Observera att inga andra attribut för par
kopieras över.
Parametervektorn som överlämnats till fn
har särskild semantik och kan delas mellan anrop: funktionen bör inte ändra eller kopiera den.