Détails
Notez que les arguments après …
doivent correspondre exactement.
Par défaut, optim
effectue une minimisation, mais elle maximisera si control$fnscale
est négatif. optimHess
est une fonction auxiliaire pour calculer le Hessien à un stade ultérieur si hessian = TRUE
a été oublié.
La méthode par défaut est une implémentation de celle de Nelder et Mead (1965), qui utilise seulement les valeurs de la fonction et est robuste mais relativement lente. Elle fonctionnera raisonnablement bien pour les fonctions non différentiables.
La méthode "BFGS"
est une méthode quasi-Newton (également connue sous le nom d’algorithme à métrique variable), plus précisément celle publiée simultanément en 1970 par Broyden, Fletcher, Goldfarb et Shanno. Celle-ci utilise les valeurs des fonctions et les gradients pour construire une image de la surface à optimiser.
La méthode "CG"
est une méthode de gradients conjugués basée sur celle de Fletcher et Reeves (1964) (mais avec l’option de mises à jour Polak–Ribiere ou Beale–Sorenson). Les méthodes de gradients conjugués seront généralement plus fragiles que la méthode BFGS, mais comme elles ne stockent pas de matrice, elles peuvent réussir dans des problèmes d’optimisation beaucoup plus grands.
La méthode "L-BFGS-B"
est celle de Byrd et. al. (1995) qui autorise les contraintes de boîte, c’est-à-dire que l’on peut donner à chaque variable une limite inférieure et/ou supérieure. La valeur initiale doit satisfaire les contraintes. Cette méthode utilise une modification à mémoire limitée de la méthode BFGS quasi-Newton. Si des bornes non triviales sont fournies, cette méthode sera sélectionnée, avec un avertissement.
Nocedal et Wright (1999) est une référence complète pour les trois méthodes précédentes.
La méthode "SANN"
est par défaut une variante du recuit simulé donnée dans Belisle (1992). Le recuit simulé appartient à la classe des méthodes d’optimisation globale stochastique. Elle n’utilise que les valeurs des fonctions mais est relativement lente. Elle fonctionne également pour les fonctions non-différentiables. Cette implémentation utilise la fonction Metropolis pour la probabilité d’acceptation. Par défaut, le prochain point candidat est généré à partir d’un noyau de Markov gaussien dont l’échelle est proportionnelle à la température réelle. Si une fonction pour générer un nouveau point candidat est donnée, la méthode "SANN"
peut également être utilisée pour résoudre des problèmes d’optimisation combinatoire. Les températures sont diminuées selon le programme de refroidissement logarithmique tel que donné dans Belisle (1992, p.890) ; plus précisément, la température est fixée à temp / log(((t-1) %/% tmax)*tmax + exp(1))
, où t
est le pas d’itération actuel et temp
et tmax
sont spécifiables via control
, voir ci-dessous. Notez que la méthode "SANN"
dépend de manière critique des réglages des paramètres de contrôle. Ce n’est pas une méthode à usage général mais elle peut être très utile pour obtenir une bonne valeur sur une surface très rugueuse.
La méthode "Brent"
est pour les problèmes unidimensionnels seulement, en utilisant optimize()
. Elle peut être utile dans les cas où optim()
est utilisée à l’intérieur d’autres fonctions où seule method
peut être spécifiée, comme dans mle
du paquet stats4.
La fonction fn
peut retourner NA
ou Inf
si la fonction ne peut pas être évaluée à la valeur fournie, mais la valeur initiale doit avoir une valeur finie calculable de fn
. (Sauf pour la méthode "L-BFGS-B"
où les valeurs doivent toujours être finies.)
optim
peut être utilisée de manière récursive, et pour un seul paramètre comme pour plusieurs. Elle accepte également un par
de longueur nulle, et évalue juste la fonction avec cet argument.
L’argument control
est une liste qui peut fournir l’un des composants suivants :
trace
Entier non négatif. S’il est positif, des informations de traçage sur la progression de l’optimisation sont produites. Des valeurs plus élevées peuvent produire plus d’informations de traçage : pour la méthode "L-BFGS-B"
, il existe six niveaux de traçage. (Pour comprendre exactement ce qu’ils font, voir le code source : les niveaux supérieurs donnent plus de détails.)
fnscale
Une mise à l’échelle globale à appliquer à la valeur de fn
et gr
pendant l’optimisation. S’il est négatif, transforme le problème en un problème de maximisation. L’optimisation est effectuée sur fn(par)/fnscale
.
parscale
Vecteur de valeurs de mise à l’échelle pour les paramètres. L’optimisation est effectuée sur par/parscale
et ceux-ci devraient être comparables dans le sens où un changement d’unité dans un élément produit environ un changement d’unité dans la valeur mise à l’échelle. Non utilisé (ni nécessaire)pour method = "Brent"
.
ndeps
Vecteur de tailles de pas pour l’approximation par différences finies du gradient, à l’échelle par/parscale
. La valeur par défaut est 1e-3
.
maxit
Le nombre maximum d’itérations. Par défaut, 100
pour les méthodes basées sur la dérivée, et 500
pour "Nelder-Mead"
.
Pour "SANN"
maxit
donne le nombre total d’évaluations de la fonction : il n’y a pas d’autre critère d’arrêt. Par défaut, 10000
.
abstol
La tolérance de convergence absolue. Seulement utile pour les fonctions non négatives, comme tolérance pour atteindre zéro.
reltol
Tolérance de convergence relative. L’algorithme s’arrête s’il ne parvient pas à réduire la valeur d’un facteur reltol * (abs(val) + reltol)
à un pas. La valeur par défaut est sqrt(.Machine$double.eps)
, typiquement environ 1e-8
.
alpha
,beta
,gamma
Paramètres de mise à l’échelle pour la méthode "Nelder-Mead"
. alpha
est le facteur de réflexion (par défaut 1,0), beta
le facteur de contraction (0,5) et gamma
le facteur d’expansion (2,0).
REPORT
Fréquence des rapports pour les méthodes "BFGS"
, "L-BFGS-B"
et "SANN"
si control$trace
est positif. Par défaut, toutes les 10 itérations pour "BFGS"
et "L-BFGS-B"
, ou toutes les 100 températures pour "SANN"
.
warn.1d.NelderMead
a logical
indiquant si la méthode (par défaut) "Nelder-Mean"
doit signaler un avertissement lorsqu’elle est utilisée pour une minimisation unidimensionnelle. Comme l’avertissement est parfois inapproprié, vous pouvez le supprimer en mettant cette option à false.
type
pour la méthode des gradients conjugués. Prend la valeur 1
pour la mise à jour Fletcher–Reeves, 2
pour Polak–Ribiere et 3
pour Beale–Sorenson.
lmm
est un nombre entier donnant le nombre de mises à jour BFGS retenues dans la méthode "L-BFGS-B"
, Il prend par défaut la valeur 5
.
factr
contrôle la convergence de la méthode "L-BFGS-B"
. La convergence se produit lorsque la réduction de l’objectif est dans ce facteur de la tolérance de la machine. La valeur par défaut est 1e7
, soit une tolérance d’environ 1e-8
.
pgtol
aide à contrôler la convergence de la méthode "L-BFGS-B"
. Il s’agit d’une tolérance sur le gradient projeté dans la direction de recherche actuelle. Par défaut, elle est égale à zéro, lorsque le contrôle est supprimé.
temp
contrôle la méthode "SANN"
. Il s’agit de la température de départ pour le programme de refroidissement. La valeur par défaut est 10
.
tmax
est le nombre d’évaluations de fonction à chaque température pour la méthode "SANN"
. Valeur par défaut : 10
.
Tout nom donné à par
sera copié dans les vecteurs passés à fn
et gr
. Notez qu’aucun autre attribut de par
n’est copié.
Le vecteur de paramètres passé à fn
a une sémantique spéciale et peut être partagé entre les appels : la fonction ne doit pas le modifier ou le copier.