Detalles
Nota que los argumentos después de …
deben coincidir exactamente.
Por defecto optim
realiza la minimización, pero maximizará si control$fnscale
es negativo. optimHess
es una función auxiliar para calcular el hessiano en una etapa posterior si se olvida hessian = TRUE
.
El método por defecto es una implementación del de Nelder y Mead (1965), que utiliza sólo valores de la función y es robusto pero relativamente lento. Funcionará razonablemente bien para funciones no diferenciables.
El método "BFGS"
es un método cuasi-Newton (también conocido como algoritmo de métrica variable), concretamente el publicado simultáneamente en 1970 por Broyden, Fletcher, Goldfarb y Shanno. Este utiliza los valores de las funciones y los gradientes para construir una imagen de la superficie a optimizar.
El método "CG"
es un método de gradientes conjugados basado en el de Fletcher y Reeves (1964) (pero con la opción de actualizaciones Polak–Ribiere o Beale–Sorenson). Los métodos de gradientes conjugados serán generalmente más frágiles que el método BFGS, pero como no almacenan una matriz pueden tener éxito en problemas de optimización mucho más grandes.
El método "L-BFGS-B"
es el de Byrd et. al. (1995) que permite restricciones de caja, es decir, a cada variable se le puede dar un límite inferior y/o superior. El valor inicial debe satisfacer las restricciones. Esto utiliza una modificación de memoria limitada del método BFGS quasi-Newton. Si se suministran límites no triviales, se seleccionará este método, con una advertencia.
Nocedal y Wright (1999) es una referencia completa para los tres métodos anteriores.
El método "SANN"
es por defecto una variante del recocido simulado dado en Belisle (1992). El recocido simulado pertenece a la clase de métodos de optimización global estocástica. Utiliza sólo los valores de las funciones, pero es relativamente lento. También funciona para funciones no diferenciables. Esta implementación utiliza la función Metrópolis para la probabilidad de aceptación. Por defecto, el siguiente punto candidato se genera a partir de un núcleo de Markov gaussiano con escala proporcional a la temperatura real. Si se da una función para generar un nuevo punto candidato, el método "SANN"
también puede utilizarse para resolver problemas de optimización combinatoria. Las temperaturas se reducen de acuerdo con el programa de enfriamiento logarítmico como se da en Belisle (1992, p.890); específicamente, la temperatura se establece en temp / log(((t-1) %/% tmax)*tmax + exp(1))
, donde t
es el paso de iteración actual y temp
y tmax
son especificables a través de control
, ver más abajo. Tenga en cuenta que el método "SANN"
depende críticamente de los ajustes de los parámetros de control. No es un método de propósito general, pero puede ser muy útil para llegar a un buen valor en una superficie muy rugosa.
El método "Brent"
es sólo para problemas unidimensionales, utilizando optimize()
. Puede ser útil en los casos en que optim()
se utiliza dentro de otras funciones en las que sólo se puede especificar method
, como en mle
del paquete stats4.
La función fn
puede devolver NA
o Inf
si la función no puede ser evaluada en el valor suministrado, pero el valor inicial debe tener un valor finito computable de fn
. (Excepto para el método "L-BFGS-B"
donde los valores siempre deben ser finitos.)
optim
puede ser utilizado recursivamente, y para un solo parámetro, así como muchos. También acepta un par
de longitud cero, y sólo evalúa la función con ese argumento.
El argumento control
es una lista que puede suministrar cualquiera de los siguientes componentes:
trace
Entero no negativo. Si es positivo, se produce información de rastreo sobre el progreso de la optimización. Los valores más altos pueden producir más información de seguimiento: para el método "L-BFGS-B"
hay seis niveles de seguimiento. (Para entender exactamente lo que estos hacen ver el código fuente: los niveles más altos dan más detalles.)
fnscale
Una escala global que se aplicará al valor de fn
y gr
durante la optimización. Si es negativo, convierte el problema en un problema de maximización. La optimización se realiza en fn(par)/fnscale
.
parscale
Un vector de valores de escala para los parámetros. La optimización se realiza en par/parscale
y estos deben ser comparables en el sentido de que un cambio de unidad en cualquier elemento produce alrededor de un cambio de unidad en el valor escalado. No se utiliza (ni se necesita) para method = "Brent"
.
ndeps
Un vector de tamaños de paso para la aproximación de diferencia finita al gradiente, en la escala par/parscale
. Por defecto es 1e-3
.
maxit
El número máximo de iteraciones. Por defecto es 100
para los métodos basados en la derivada, y 500
para "Nelder-Mead"
.
Para "SANN"
maxit
da el número total de evaluaciones de la función: no hay otro criterio de parada. Por defecto, 10000
.
abstol
La tolerancia de convergencia absoluta. Sólo es útil para funciones no negativas, como tolerancia para llegar a cero.
reltol
Tolerancia de convergencia relativa. El algoritmo se detiene si no es capaz de reducir el valor en un factor de reltol * (abs(val) + reltol)
en un paso. Por defecto es sqrt(.Machine$double.eps)
, normalmente alrededor de 1e-8
.
alpha
,beta
,gamma
Parámetros de escala para el método "Nelder-Mead"
. alpha
es el factor de reflexión (por defecto 1,0), beta
el factor de contracción (0,5) y gamma
el factor de expansión (2,0).
REPORT
La frecuencia de los informes para los métodos "BFGS"
, "L-BFGS-B"
y "SANN"
si control$trace
es positivo. Por defecto, cada 10 iteraciones para "BFGS"
y "L-BFGS-B"
, o cada 100 temperaturas para "SANN"
.
warn.1d.NelderMead
a logical
que indica si el método (por defecto) "Nelder-Mean"
debe señalar una advertencia cuando se utiliza para la minimización unidimensional. Como la advertencia es a veces inapropiada, puede suprimirla estableciendo esta opción a false.
type
para el método de gradientes conjugados. Toma el valor 1
para la actualización Fletcher–Reeves, 2
para Polak–Ribiere y 3
para Beale–Sorenson.
lmm
es un entero que da el número de actualizaciones BFGS retenidas en el método "L-BFGS-B"
, Por defecto es 5
.
factr
controla la convergencia del método "L-BFGS-B"
. La convergencia se produce cuando la reducción del objetivo está dentro de este factor de tolerancia de la máquina. Por defecto es 1e7
, es decir, una tolerancia de aproximadamente 1e-8
.
pgtol
ayuda a controlar la convergencia del método "L-BFGS-B"
. Es una tolerancia en el gradiente proyectado en la dirección de búsqueda actual. Este valor por defecto es cero, cuando se suprime la comprobación.
temp
controla el método "SANN"
. Es la temperatura inicial para el programa de enfriamiento. El valor predeterminado es 10
.
tmax
es el número de evaluaciones de la función a cada temperatura para el método "SANN"
. Por defecto es 10
.
Cualquier nombre dado a par
será copiado a los vectores pasados a fn
y gr
. Tenga en cuenta que no se copian otros atributos de par
.
El vector de parámetros pasado a fn
tiene una semántica especial y puede ser compartido entre llamadas: la función no debe cambiarlo ni copiarlo.