optim : Optimisation à usage général

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.