Critère d'arrêt pour Nelder Mead

11

J'essaie d'implémenter l'algorithme Nelder-Mead pour optimiser une fonction. La page wikipedia sur Nelder-Mead est étonnamment claire sur l'ensemble de l'algorithme, à l'exception de son critère d'arrêt. Là, il dit malheureusement:

Vérifier la convergence [clarification nécessaire] .

J'ai moi-même essayé et testé quelques critères:

  • Arrêtez si ϵ est petit et où x i est le i- ème sommet du simplexe, ordonné de bas ( f ( x 1 ) ) à haut ( f ( x N + 1 )F(XN+1)-F(X1)<ϵϵXjejeF(X1)F(XN+1)) valeurs de fonction. En d'autres termes, lorsque la valeur maximale du simplex est presque égale à la valeur minimale. J'ai trouvé que cela ne fonctionnait pas correctement, car cela ne donne aucune garantie sur ce que fait la fonction à l'intérieur du simplex. Exemple, considérons la fonction: Ceci est bien sûr trivial à optimiser, mais disons que nous le faisons avec NM, et que nos deux points simplex soient x 1 = - 1 et x 2 = 1 . L'algorithme convergerait ici sans trouver son optimum.

    F(X)=X2
    X1=-1X2=1
  • La deuxième option consiste à évaluer le centroïde du simplexe: arrêtez si . Cela suppose que si le point le plus bas du simplexe et du centroïde ont des valeurs similaires, le simplexe est suffisamment petit pour appeler la convergence.|F(X1)-F(Xc)|<ϵ

Est-ce une bonne façon de vérifier la convergence? Ou existe-t-il un moyen établi de vérifier cela? Je n'ai trouvé aucune source à ce sujet, car la plupart des résultats de recherche se concentrent sur la complexité de l'algorithme.

JAD
la source
1. Je ne comprends pas pourquoi vous comparez ce qui se passe à avec x 1 ; vous voudriez sûrement le comparer avec ce qui se passe àXN+1X1 . 2. les contrôles de convergence sont un domaine particulièrement délicat dans de nombreuses optimisations; vous avez besoin que la fonction ne change pas beaucoup, mais si les arguments changent rapidement (même si la fonction change à peine) vous n'avez peut-être pas convergé, donc les gens utilisent souvent des critères qui regardent les deux. Il y a aussi la question de savoir si vous utilisez un critère relatif ou absolu (ni l'un ni l'autre ne suffit - par exemple, un test relatif lorsque vous êtes très proche de 0 ne sera pas déclenché)XN
Glen_b -Reinstate Monica
3
Le meilleur critère d'arrêt pour Nelder Mead est avant de commencer.
Mark L. Stone
Juste pour éviter toute confusion par rapport à la notation dans @ Glen_b ... Je pense que les indices ici se réfèrent aux sommets du simplexe, pas à l'itération de l'algorithme. Pour que le premier critère de convergence proposé dans cette question, compare les valeurs de fonction les plus basses et les plus élevées des sommets dans l' espace des paramètres à dimensions ... ce n'est pas explicitement indiqué dans la question, mais la description de l'algorithme sur la page wikipedia liée ( et dans le papier d'origine) ordonner les N + 1 sommets de la valeur de fonction la plus basse à la plus élevée. NN+1
Nate Pope
@NatePope C'était mon intention oui, je vais ajouter une clarification à la question. \
JAD

Réponses:

6

Le récit de cet "algorithme du simplex de descente" dans les versions originales de Recettes numériques est particulièrement lucide et utile. J'en citerai donc les parties pertinentes. Voici le contexte:

Dans la minimisation unidimensionnelle, il était possible de fixer un minimum .... Hélas! Il n'y a pas de procédure analogue dans l'espace multidimensionnel. ... Le mieux que nous puissions faire est de donner à notre algorithme une hypothèse de départ; c'est-à-dire un vecteur de variables indépendantes comme premier point à essayer. L'algorithme est ensuite censé se frayer un chemin dans la complexité inimaginable d'une topographie à N dimensions jusqu'à ce qu'il rencontre un minimum (au moins local).NN

La méthode du simplex de descente doit être démarrée non seulement avec un seul point, mais avec points, définissant un simplex initial. [Vous pouvez considérer ces points comme un point de départ initial P 0 avec] P i = P 0 + λ e ie iN+1P0

(10.4.1)Pje=P0+λeje
eje sont vecteurs unitaires et où λ est une constante qui est votre estimation de la caractéristique du problème échelle de longueur. ...Nλ

La plupart des étapes [déplacent] simplement le point du simplex où la fonction est la plus grande («point le plus élevé») à travers la face opposée du simplex vers un point inférieur. ...

Maintenant, pour le problème à résoudre, terminer l'algorithme. Notez la généralité du compte: les auteurs fournissent des conseils intuitifs et utiles pour terminer tout optimiseur multidimensionnel, puis montrent spécifiquement comment il s'applique à cet algorithme particulier. Le premier paragraphe répond à la question qui nous est posée:

Les critères de résiliation peuvent être délicats .... Nous pouvons généralement identifier un "cycle" ou "étape" de notre algorithme multidimensionnel. Il est alors possible de terminer lorsque la distance vectorielle déplacée dans cette étape est fractionnellement plus petite que certaines tolérances TOL. Alternativement, nous pourrions exiger que la diminution de la valeur de la fonction dans l'étape de fin soit légèrement inférieure à une certaine tolérance FTOL. ...

NN+1(10.4.1)P0

Les redémarrages ne devraient jamais être très coûteux; votre algorithme a, après tout, convergé vers le point de redémarrage une fois, et maintenant vous démarrez l'algorithme déjà là.

[Pages 290-292.]

XyT>0

(1)|X|-|y|F(X,y)=2|X|-|y||X|+|y|<T

F(X,y)=(|X|+|y|)/2

(1)

Référence

William H. Press et al. , Recettes numériques: L'art du calcul scientifique. Cambridge University Press (1986). Visitez http://numerical.recipes/ pour les dernières éditions.

whuber
la source
1
Merci pour les informations sur le redémarrage. Je pensais que cela ne faisait qu'exécuter l'algorithme à partir de différents points de départ, mais il semble en fait y avoir plus.
JAD
Je n'avais pas pensé auparavant aux significations possibles de "redémarrage". Dans le contexte actuel, j'aurais peut-être utilisé un terme comme «polissage» pour le «redémarrage», mais ce n'est peut-être pas tout à fait correct non plus. Le type de «redémarrage» préconisé pour la méthode simplex peut lui être assez spécial.
whuber
9

Pas une réponse complète, mais trop longue pour un commentaire et peut vous mettre sur la bonne voie.

Ce sujet est brièvement traité à la page 171 de "Compact Numerical Methods for Computers" 2nd Ed., Par John C. Nash. Et se trouve être la référence citée pour la routine Nelder-Mead implémentée dans la optim()fonction de R. Citant la partie pertinente:

test=[(je=1n+1[S(bje)-S¯]2)/n]1/2
S¯=je=1n+1S(bje)/(n+1).

S(.)bn+1nbHbL

S(bL)S(bH) , c'est-à-dire , un test de hauteur égale de tous les points du simplexe.

Un coup d'œil rapide à la source de optim()indique qu'il utilise la différence entre les valeurs de fonction les plus élevées et les plus basses (des points définissant le simplexe) pour déterminer la convergence: if (VH <= VL + convtol || VL <= abstol) break;VH est la valeur haute et VLla valeur basse. Cela vient avec la mise en garde que j'ai jeté un coup d'œil à la source, et il me manque probablement quelque chose.

Maintenant, votre option (1) semble être la deuxième approche préconisée par Nash. Il discute également du problème que vous avez rencontré:

(n+1)(n-1)n espace à dimensions et peut ne pas pouvoir avancer vers le minimum. O'Neill (1971), dans une mise en œuvre FORTRAN des idées de Nelder-Mead, teste la valeur de la fonction de chaque côté du minimum supposé le long de chacun des axes des paramètres. Si une valeur de fonction est trouvée inférieure au minimum supposé actuel, la procédure est redémarrée.

Les références originales auxquelles Nash fait référence ici sont:

Nelder JA, Mead R. 1965. Une méthode simplex pour la minimisation des fonctions. The Computer Journal 7: 308-313.

O'Neill R. 1971. Algorithme AS 47: minimisation des fonctions à l'aide d'une procédure simplex. Statistiques appliquées 20: 338-345.

Nate Pope
la source
3

Fmin(t)mintous les coins F(Xje,t)
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

n+1

  1. le problème: terrain accidenté, peut-être avec une mauvaise mise à l'échelle ou des contraintes stupides
  2. l'algorithme, équilibrant l'exploration et le déplacement (et la complexité du logiciel)
  3. la règle d'arrêt proprement dite

reste à voir - de vrais cas de test sont les bienvenus.

(Une vraie Stopiterclasse a de nombreuses conditions d'arrêt, en plus depatience ; l'horloge murale est la plus simple.)

Voir aussi:
NLopt : de nombreux algorithmes dont Nelder-Mead, faciles à comparer. Voir en particulier les notes sur la comparaison des algorithmes de
descente : la patience s'arrête avecmin_improvement

denis
la source