Details
Nota che gli argomenti dopo …
devono essere abbinati esattamente.
Di default optim
esegue la minimizzazione, ma massimizza se control$fnscale
è negativo. optimHess
è una funzione ausiliaria per calcolare l’Hessiano in una fase successiva se hessian = TRUE
è stato dimenticato.
Il metodo predefinito è un’implementazione di quello di Nelder e Mead (1965), che usa solo valori di funzione ed è robusto ma relativamente lento. Funzionerà ragionevolmente bene per funzioni non differenziabili.
Il metodo "BFGS"
è un metodo quasi-Newton (noto anche come algoritmo a metrica variabile), in particolare quello pubblicato contemporaneamente nel 1970 da Broyden, Fletcher, Goldfarb e Shanno. Questo usa i valori delle funzioni e i gradienti per costruire un’immagine della superficie da ottimizzare.
Il metodo "CG"
è un metodo a gradienti coniugati basato su quello di Fletcher e Reeves (1964) (ma con l’opzione degli aggiornamenti Polak–Ribiere o Beale–Sorenson). I metodi a gradienti coniugati saranno generalmente più fragili del metodo BFGS, ma poiché non memorizzano una matrice possono avere successo in problemi di ottimizzazione molto più grandi.
Il metodo "L-BFGS-B"
è quello di Byrd et. al. (1995) che permette vincoli a scatola, cioè ad ogni variabile può essere dato un limite inferiore e/o superiore. Il valore iniziale deve soddisfare i vincoli. Questo utilizza una modifica a memoria limitata del metodo BFGS quasi-Newton. Se vengono forniti vincoli non banali, questo metodo verrà selezionato, con un avvertimento.
Nocedal e Wright (1999) è un riferimento completo per i tre metodi precedenti.
Il metodo "SANN"
è per default una variante di simulated annealing data in Belisle (1992). L’annealing simulato appartiene alla classe dei metodi di ottimizzazione globale stocastica. Utilizza solo i valori delle funzioni, ma è relativamente lento. Funziona anche per funzioni non differenziabili. Questa implementazione usa la funzione Metropolis per la probabilità di accettazione. Per default il prossimo punto candidato è generato da un kernel di Markov gaussiano con scala proporzionale alla temperatura attuale. Se viene data una funzione per generare un nuovo punto candidato, il metodo "SANN"
può anche essere usato per risolvere problemi di ottimizzazione combinatoria. Le temperature sono diminuite secondo il programma di raffreddamento logaritmico come dato in Belisle (1992, p.890); in particolare, la temperatura è impostata a temp / log(((t-1) %/% tmax)*tmax + exp(1))
, dove t
è il passo di iterazione corrente e temp
e tmax
sono specificabili tramite control
, vedi sotto. Notate che il metodo "SANN"
dipende criticamente dalle impostazioni dei parametri di controllo. Non è un metodo di uso generale, ma può essere molto utile per ottenere un buon valore su una superficie molto ruvida.
Il metodo "Brent"
è solo per problemi unidimensionali, usando optimize()
. Può essere utile nei casi in cui optim()
è usato all’interno di altre funzioni in cui solo method
può essere specificato, come in mle
del pacchetto stats4.
La funzione fn
può restituire NA
o Inf
se la funzione non può essere valutata al valore fornito, ma il valore iniziale deve avere un valore finito calcolabile di fn
. (Eccetto per il metodo "L-BFGS-B"
dove i valori devono essere sempre finiti.)
optim
può essere usato ricorsivamente, e per un singolo parametro come per molti. Accetta anche un par
di lunghezza zero, e valuta semplicemente la funzione con quell’argomento.
L’argomento control
è una lista che può fornire uno dei seguenti componenti:
trace
Intero non negativo. Se positivo, vengono prodotte informazioni di tracciamento sul progresso dell’ottimizzazione. Valori più alti possono produrre più informazioni di tracciamento: per il metodo "L-BFGS-B"
ci sono sei livelli di tracciamento. (Per capire esattamente cosa fanno vedere il codice sorgente: i livelli più alti danno più dettagli.)
fnscale
Un ridimensionamento generale da applicare al valore di fn
e gr
durante l’ottimizzazione. Se negativo, trasforma il problema in un problema di massimizzazione. L’ottimizzazione viene eseguita su fn(par)/fnscale
.
parscale
Un vettore di valori di scala per i parametri. L’ottimizzazione viene eseguita su par/parscale
e questi dovrebbero essere comparabili nel senso che un cambiamento di unità in qualsiasi elemento produce circa un cambiamento di unità nel valore scalato. Non usato (né necessario) per method = "Brent"
.
ndeps
Un vettore di dimensioni di passo per l’approssimazione a differenza finita al gradiente, su scala par/parscale
. Di default a 1e-3
.
maxit
Il numero massimo di iterazioni. Di default a 100
per i metodi basati sulle derivate, e 500
per "Nelder-Mead"
.
Per "SANN"
maxit
dà il numero totale di valutazioni della funzione: non ci sono altri criteri di arresto. Il valore predefinito è 10000
.
abstol
La tolleranza di convergenza assoluta. Utile solo per funzioni non negative, come tolleranza per raggiungere lo zero.
reltol
Tolleranza di convergenza relativa. L’algoritmo si ferma se non è in grado di ridurre il valore di un fattore di reltol * (abs(val) + reltol)
ad un passo. Il valore predefinito è sqrt(.Machine$double.eps)
, in genere circa 1e-8
.
alpha
,beta
,gamma
Parametri di scala per il metodo "Nelder-Mead"
. alpha
è il fattore di riflessione (default 1.0), beta
il fattore di contrazione (0.5) e gamma
il fattore di espansione (2.0).
REPORT
La frequenza delle segnalazioni per i metodi "BFGS"
, "L-BFGS-B"
e "SANN"
se control$trace
è positivo. Il valore predefinito è ogni 10 iterazioni per "BFGS"
e "L-BFGS-B"
, o ogni 100 temperature per "SANN"
.
warn.1d.NelderMead
a logical
che indica se il metodo (predefinito) "Nelder-Mean"
deve segnalare un avvertimento quando viene usato per la minimizzazione unidimensionale. Poiché l’avvertimento è talvolta inappropriato, è possibile sopprimerlo impostando questa opzione su false.
type
per il metodo dei gradienti coniugati. Prende il valore 1
per l’aggiornamento Fletcher–Reeves, 2
per Polak–Ribiere e 3
per Beale–Sorenson.
lmm
è un intero che dà il numero di aggiornamenti BFGS mantenuti nel metodo "L-BFGS-B"
, di default è 5
.
factr
controlla la convergenza del metodo "L-BFGS-B"
. La convergenza avviene quando la riduzione dell’obiettivo è entro questo fattore di tolleranza della macchina. Il default è 1e7
, cioè una tolleranza di circa 1e-8
.
pgtol
controlla la convergenza del metodo "L-BFGS-B"
. È una tolleranza sul gradiente proiettato nella direzione di ricerca corrente. Questo valore predefinito è zero, quando il controllo è soppresso.
temp
controlla il metodo "SANN"
. È la temperatura di partenza per il programma di raffreddamento. Il valore predefinito è 10
.
tmax
è il numero di valutazioni della funzione ad ogni temperatura per il metodo "SANN"
. Defaults to 10
.
Qualsiasi nome dato a par
sarà copiato nei vettori passati a fn
e gr
. Si noti che nessun altro attributo di par
viene copiato.
Il vettore dei parametri passato a fn
ha una semantica speciale e può essere condiviso tra le chiamate: la funzione non dovrebbe cambiarlo o copiarlo.