optim: General-purpose Optimization

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.